Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
WinAVR / GCC alapszabályok:
1. Ha ISR-ben használsz globális változót, az legyen "volatile"
2. Soha ne érjen véget a main() függvény
3. UART/USART hibák 99,9% a rossz órajel miatt van
4. Kerüld el a -O0 optimalizációs beállítást minden áron
5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás
6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et
Bővebben: AVR-libc FAQ
Lapozás: OK   760 / 837
(#) kapu48 válasza wbt hozzászólására (») Jan 26, 2017 /
 
Szerintem, ha kapsz megszakítást, hogy megérkeztek az adatok.
Én az adat feldolgozásával kezdeném a ténykedést, nem az RS485 vezérlésével foglalkoznák.
Ha sok az adat, mire a végére ér a feldolgozás már biztos ott lesz az utolsó Byte is.

Vagy ha biztosra akarsz menni, küldesz a végén 1 lezáró karaktert, amivel aztán már nem kel foglalkozni. Így akár ki is hagyhatod a DMA átvitel vége figyelését.
Lényeg a feladatok okos megosztása a CPU és DMA között, hogy lehetőleg ne akadályozzák egymást.
Az RS485 átkapcsolása meg ráér, majd mikor újra adatot akarsz küldeni.
(#) wbt válasza kapu48 hozzászólására (») Jan 26, 2017 /
 
Az adással van a gondom. Rövid frame-ek mennek, de aránylag lassan (most 9600bps). A válasz viszont nagyon gyorsan el kezd érkezni, ezért hipp-hopp át kell kapcsolnom az irányt. Most minden puffer minimumon van, ami lehet (DMA-nál 1 a legkisebb, az UART-nál meg ott a HW duplapuffer). 5 byte kiküldésekor a 3. végén kapom a DMA ready jelet (igaz, a DMA kiürült, mert már átnyomta az UARTnak a duplapufferébe. Az UART TX jel meg az 5. byte elején már vált, mert az adat már a kimeneti shiftregiszterben van, tehát jöhet a következő, ha van. Ilyen kis sebességnél/adatmennyiségnél miért vacakolok a DMA-val? Mert igen sok tennivaló van, több soros port (szintén DMA-val a uC-k között, kijelző felé, még más szolga uC, nem igazán engedhetem meg magamnak, hogy msec-eket várakozzak a semmiért. A többi megy, csak ez a fránya RS485 okoz gondot. (igen, tudnék irányváltó jel nélküli RS485-öt is csinálni, de az a módi most az iszonyat nagy hosszok miatt nem működik, kell a normális meghajtás) Már olyan birkaságok is eszembe jutottak, hogy beáldozok egy UART-ot és arra is beállítok egy másik DMA csatornát csak nem 5 hanem 7 byte-ra. Amikor a "7"-es lejár, akkor pont kiment a másikból az 5 byte-om.
(#) mTTamas válasza wbt hozzászólására (») Jan 26, 2017 /
 
Köszönöm szépen a választ, akkor mepróbálom így.
(#) kapu48 válasza wbt hozzászólására (») Jan 26, 2017 /
 
És mi történik, ha a DMA átvitel vége megszakításban engedélyezed ezt:
DRE_vect, USART Data Register Empty Interrupt vector
Akkor, ha kiürült az USART kapnál még 1 megszakítást?

Bit 5 - DREIF: USART Data Register Empty Flag
The DREIF indicates if the transmit buffer (DATA) is ready to receive new data. The flag is one
when the transmit buffer is empty, and zero when the transmit buffer contains data to be transmitted
that has not yet been moved into the Shift Register. DREIF is set after a reset to indicate
that the Transmitter is ready. Always write this bit to zero when writing the STATUS register.
DREIF is cleared by writing DATA. When interrupt-driven data transmission is used, the Data
Register Empty interrupt routine must either write new data to DATA in order to clear DREIF or
disable the Data Register Empty interrupt. If not, a new interrupt will occur directly after the
return from the current interrupt.

Szerintem ez figyeli a puffer kiürülését is.
A hozzászólás módosítva: Jan 26, 2017
(#) kapu48 válasza kapu48 hozzászólására (») Jan 26, 2017 /
 
Erre gondolok:
21.15.3 CTRLA – USART Control Register A
...
• Bit 1:0 - DREINTLVL[1:0]: USART Data Register Empty Interrupt Level
These bits enable the Data Register Empty Interrupt and select the interrupt level as described
in Section 12. ”Interrupts and Programmable Multi-level Interrupt Controller” on page 123. The
enabled interrupt will be triggered when the DREIF in the STATUS register is set.
(#) wbt válasza kapu48 hozzászólására (») Jan 26, 2017 /
 
Köszi, most mérgemben nekiálltam NYÁK-ot tervezni, közben agyalok. Összedobok egy kispanelt és kikísérletezem már ezt a dolgot. Olyan szép, mikor szkóppal túrjuk a SW dolgokat...
(#) ThompsoN hozzászólása Jan 27, 2017 /
 
Sziasztok!

Van egy áramköröm, aminél egy érdekes anomális fordul elő. A mikrokontroller egy ATMega48PA-PU. Erre egy CP2104-re épülő USB-UART átalakító (Pololu-1308) van kötve, így kerül kapcsolatba a PC-vel.

Próbapanelon minden tökéletesen üzemel, nincs kommunikációs hiba. Viszont a kész NYÁK-on időről időre előjön, teljesen rendszertelenül, hogy a mikrokontroller elkezdi ontani magából a bájtokat. Úgy figyeltem meg, hogy a programjában lévő 4 konstans string fix sorrendben, sokszor egymás után (legalább 10-szer ismétli meg őket, kötött sorrendben), amit megelőz véletlenszerű bájtokból álló sorozat. (Ez rendszertelen, változó hosszúságú, és nem is hasonló, valami memóriaszemét féleségnek néz ki) Tehát úgy néz ki, mintha valamiért a mikrokontroller behülyülne és a teljes RAM-ot kiküldené UART-on. Ezek után nem reagál semmire, csak a zsegít, ha áramtalanítom. Ha csak a CP2104-et húzom ki és dugom vissza, akkor is folytatódik a bájtáradat.
A dolog tetőpontja az, hogy ezt csak az elmúlt 2 napban csinálja, előtte a végleges áramkörben is tökéletesen üzemelt, napokon keresztül (legalább 3-4 napig ment)! Azóta a programot nem piszkáltam, ahogy a hardvert se, tehát nem értem, hogy mi válthatta ki. Kipróbáltam másik mikrokontrollerrel, de annál is ugyan ez a jelenség áll fönn.

5V-on üzemel az áramkör, a mikrokontroller 8MHz-en megy, de ez a próbapanelon is így van, ott pedig még sosem fordult elő a hiba.

Ha a fenti problémára van bárkinek ötlete, akkor legyen szíves segíteni. Köszönöm!
(#) csatti2 válasza ThompsoN hozzászólására (») Jan 27, 2017 /
 
Sokat segítene ha mellékelnél kapcsolási rajzot és fotókat az áramkörről.
(#) ThompsoN válasza csatti2 hozzászólására (») Jan 28, 2017 /
 
Az áramkörön a kapcsolási rajzhoz képest annyi az eltérés, hogy a 4N25 és reed relé párosokból kétszer ennyi van, ahogy a jobb alul lévő motorvezérlő részből is van még egy. Ezek tökéletesen ugyan ilyen felépítésűek, a használt alkatrészek is teljesen megegyeznek mindenhol.

A DSC_0225 képen (kézzel készül NYÁK, nem a legszebb...) bekereteztem, hogy melyik két vezetősáv köti össze a mikrokontrollert a az USB-UART átalakítóval. Sehol sem érnek össze, mértem szakadásvizsgálóval.

A DSC_0224 képen pedig a NYÁK felülnézetből látszik. Bal oldalon vannak a motorvezérléshez a relék, a tranzisztorok és a két MOSFET. Jobb oldalon van a CP2104, egy Pololu 1308 formájában. Ez USB-ről kapja az áramellátását, az áramkör többi része ugyan annak a PC-nek a tápjáról. Minden 5V-on üzemel. A bal alsó sarokban lévő fekete drót a GND a teljes áramkörnek, a sárga a motorokhoz viszi az 5V-ot, a piros a mikrokontrollerhez az 5V-ot. (Eredetileg a motorok 12V-ot kaptak volna, azért a két drót.) A jobb oldalon lévő vékony drótok és a csatlakozó a reed reléket kapcsolja a 4N25-ökhöz.

PC tápból kettőt is próbáltam az első eset óta, mindegyiknél előfordul. Ha éppen jól működik, akkor a bájtok nagy része hibátlanul megy, bármelyik irányt is nézzük.
(#) Massawa válasza ThompsoN hozzászólására (») Jan 28, 2017 / 1
 
Azért rendbe is tehetted volna a rajzot mielött feltöltötted. A lényeg valoszinü nem us a rajzon van hanem a tápon és az AVR csatlakozásán. Az a két 100nF kondi édeskevés olyan esetben ha induktiv a terhelés mint az esetedben a motor.
Nem tudjuk milyen az 5V táp milyen a belsö ellenállása és a szürése.
Az optok illesztése is elég felületes az AVR-hez. Oda mindenképp kell kb 1-5 kOhm terhelö ellenállás, meg talán egy egy kondi is jol jönne szürni a zajt a bemeneten ( gondolom végálláskacsolo a 2).
(#) Ivan93 válasza ThompsoN hozzászólására (») Jan 28, 2017 / 1
 
Szia! A képek szerint a belső oszcillátorról járatod az AVR-t. Ez általában nem elég stabil/pontos az aszinkron soros kommunikációhoz. Nekem legalábbis külső kristály nélkül mindig zagyvaság ment át a PC-re. Bár érdekes, hogy Nálad néha mégis jól működik. Ha van otthon a projekthez megfelelő kristályod, egy próba idejére forraszd oda alulról.
(#) killbill válasza ThompsoN hozzászólására (») Jan 28, 2017 /
 
Azoknak az optoknak mi hasznuk van? (semmi). A D5, D6 dioda szinten kerdeses. Azoknak a rele tekercsekkel parhuzamosan kellene lenniuk.
(#) Robi98 hozzászólása Jan 28, 2017 /
 
Sziasztok!

Elkezdtem foglalkozni az UART kommunikációval. Elsőként egy olyan programot írtam, ami másodpercenként kiírja a számítógép képernyőjére, új sorba, hogy Hello World! Az eredmény viszont az lett, hogy másodpercenként kiír a képernyőre egy csomó ékezetes R betűt egy sorba. Putty terminált használok 9600-as baud rate-el. A külső rezgőkvarc 16MHz-es. A mikrovezérlő (ATmega16) adatlapja szerint a hibaszázalék 0.2% ami megbízhatónak minősül. Azért pont 16Mhz-es kristályt használtam, mert nincs itthon másfajta. Elvileg ezzel is működni kéne. Kipróbáltam az Arduino saját soros monitorjával is, ott meg csak kis négyzeteket rakott. Sőt kipróbáltam 250000-es baud rate-el (az adatlap szerint 0.0% a hiba), hát úgy sem akart működni.
  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3. #include <util/delay.h>
  4.  
  5. #define F_CPU 16000000UL
  6.  
  7. volatile char data;
  8.  
  9. void konfigUART(unsigned int baud_rate)
  10. {
  11. unsigned int MY_UBR=((F_CPU/(16*baud_rate))-1);
  12.  
  13. UBRRL=MY_UBR;
  14. UBRRH=(MY_UBR>>8);
  15.  
  16. UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // 8 adatbit, 1 stop bit, nincs paritásbit
  17. UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE); // adó és vevő bekapcs. és vevő interrupt engedélyezése
  18. }
  19.  
  20. void transmitUART(char c)
  21. {
  22. while(!(UCSRA & (1<<UDRE)));
  23.  
  24. UDR=c;
  25. }
  26.  
  27. void transmit_stringUART(char *p)
  28. {
  29.         while(*p)
  30.         {
  31.         transmitUART(*p++);
  32.         }
  33. }
  34.  
  35. int main(void)
  36. {
  37. //LED lábak kimenetek
  38. DDRD|=(1<<PD7);
  39. DDRC=(1<<PC0)|(1<<PC1);
  40.  
  41. konfigUART(9600);
  42. sei();
  43.  
  44.         while(1)
  45.         {
  46.                 transmit_stringUART("HELLO WORLD!");
  47.                 transmitUART('/n');
  48.                 transmitUART('/r');
  49.  
  50.                 _delay_ms(1000);
  51.         }
  52. }
  53.  
  54. ISR(USART_RXC_vect) //ezt csak azért raktam bele mert először egy RGB led állapotát szerettem volna vezérelni számítógépről, de persze nem működött
  55. {
  56. data=UDR;
  57. }

Tudnátok benne segíteni?
Köszönöm
(#) ThompsoN válasza Massawa hozzászólására (») Jan 28, 2017 /
 
@Massawa: köszönöm a segítséget, úgy tűnik, hogy a beültetett 470µF kondi megoldotta.

@Ivan93: neked is köszönöm, betettem egy 12MHz-es kristályt, azóta minden bájt hiba nélkül átmegy.

@killbill: azért használok optot, mert az egyik motor a vezérléstől több méter távolságban van, a hozzá tartozó reed relékkel együtt. Zavarvédelem gyanánt tettem be, az ötletet Topi dallamcsengős írásából vettem. A dióda a rajzon valóban rossz helyen van, bocsi, a NYÁK-on már a tekercsekkel párhuzamosan van.
(#) Istvanpisti válasza Robi98 hozzászólására (») Jan 28, 2017 /
 
Szia!
A TX-et kimenetre állítottad?
Próbáld meg, hogy beírod MY_UBR=103; //ekkor 9600 baud lesz!
(#) Robi98 válasza Istvanpisti hozzászólására (») Jan 28, 2017 /
 
A TX-et nem állítottam be kimenetnek, de ha jól tudom, akkor erre nincs is szükség, mert amikor bekapcsolom aTXEN bitet az UCSRB regiszterben, akkor az uart átveszi az irányítást a TX láb felett. Tehát ha előzőleg bemenetnek adtam volna meg, akkor is kimenet lenne. A 103-as baud rate-et külön kipróbálom majd, de nem hiszem, hogy lesz változás.
(#) killbill válasza ThompsoN hozzászólására (») Jan 29, 2017 /
 
Idézet:
„@killbill: azért használok optot, mert az egyik motor a vezérléstől több méter távolságban van, a hozzá tartozó reed relékkel együtt. Zavarvédelem gyanánt tettem be,”
Gondoltam, hogy ez az oka, de ez még az 5V-ra kerülő zajoktól nem véd meg.
(#) csatti2 válasza ThompsoN hozzászólására (») Jan 29, 2017 /
 
Gyakorlatilag kihúztál kétszer két antennát és rákötötted a betápodra...
Ha úgy akarod csinálni, ahogy ezt kitalálták, akkor beépítesz egy 0505 konvertert (5V-ból csinál galvanikusan leválasztott 5V-ot, amit használhatsz a reed reléidhez, illetve egyéb szenzoraidhoz), ezek beöntött kis modulok formájában kaphatóak.
(#) Max26 hozzászólása Jan 29, 2017 /
 
Ha van sei(); és timer_init();, de nincs init_pwm(); , akkor működik a kód. Ha csak init_pwm(); van, de a többi nincs akkor is működik a kód.
Ha mindhárom inicializálva van, akkor nem megy a PWM funkció.
Ezt mi okozhatja?

  1. #define DO_TIMING_MSTIME 1000       //1 másodperc
  2.  
  3. uint8_t do_timing = 0;
  4.  
  5. //freq desired 1ms = 1000hz
  6. //freq desired = FCPU/(2*prescaler*(1+OCR1A))
  7. //OCR1A = (FCPU/(2*prescaler*freq)) - 1
  8.  
  9.     #define TIMER1_OCR1A 7999
  10.    
  11.     #define TIMER1_PRESCALER (1 << CS10) //16mhz -en 64 előosztó
  12.     #define TIMER_1MSTICKS 1 //timer ticks to count 1 msecond
  13.  
  14. extern void timer_init(void)
  15.     {
  16.         TIMSK   &= ~(1 << TOIE0);   //timer 1 set at mode ctc, compare to oscr1a
  17.         OCR1A   = TIMER1_OCR1A; //set value = fcpu / prescaler
  18.         TCCR1B |= (1 << WGM12); //mode 4, CTC on OCR1A
  19.         TIMSK  |= (1 << OCIE1A); //interrupt on compare match
  20.         TCCR1B |= TIMER1_PRESCALER; // set prescaler
  21.         TIMSK  |= (1 << TOIE0);
  22.     }
  23.  
  24. ISR (TIMER1_COMPA_vect)
  25. {
  26.     static uint16_t timer2_step = 0;
  27.     static uint32_t do_timing_mstime = 0;
  28.  
  29.     timer2_step++;
  30.  
  31.     if(timer2_step == TIMER_1MSTICKS)
  32.     {
  33.         timer2_step = 0;//we are here every ms
  34.         do_timing_mstime++;
  35.  
  36.         if(do_timing_mstime == DO_TIMING_MSTIME*2)
  37.         {
  38.             do_timing_mstime = 0;
  39.             do_timing = 1;
  40.         }
  41.     }
  42. }
  43. void init_pwm(void)
  44. {
  45.    TCCR0|=(1<<WGM00)|(1<<WGM01)|(1<<COM01)|(1<<CS00);
  46.    DDRB|=(1<<PB3);//Set OC0 PIN as output. It is  PB3 on ATmega16 ATmega32
  47. }
  48. void SetPWMOutput(uint8_t duty)
  49. {
  50.    OCR0=duty;
  51. }
  52.  
  53.  
  54. int main (void)
  55. {
  56.     sei();
  57.     timer_init();//init timer
  58.     init_pwm(); //???????????????? Ha timer_init-om, akor nem jó a DAC!
  59. }
(#) ThompsoN válasza csatti2 hozzászólására (») Jan 29, 2017 /
 
Köszönöm a javaslatot, utána nézek!
(#) Robi98 válasza Robi98 hozzászólására (») Jan 29, 2017 /
 
Igazad volt. Kipróbáltam, hogy UBRRL=103 és úgy működik. A kérdésem, hogy miért nem működött úgy ahogy én csináltam? Elvileg ugyan az lenne nem?
  1. void konfigUART(unsigned int baud_rate)
  2. {
  3. unsigned int MY_UBR=((F_CPU/(16*baud_rate))-1);
  4.  
  5. UBRRL=MY_UBR;
  6. UBRRH=(MY_UBR>>8);
  7.  
  8. }


Még egy kérdés: a '/n' és '/r' parancsok nálam miért nem működtek? Ezekkel szerettem volna új sorba és sor elejére írni a következő "Hello World!" szöveget. Az eredmény az lett, hogy a / jelet nem írta ki, de az n és r betűt igen (egy sorba egymás mellé). Az ASCII táblázat szerint LF és CR parancsokat kéne írni. Kipróbáltam velük is, de úgy sem működött.

  1. transmitUART('LF');
  2.          transmitUART('CR');


Egyedül úgy sikerült, hogy beírtam a tizes számrendszerbeli kódjukat:
  1. transmitUART(10);
  2. transmitUART(13);
(#) Istvanpisti válasza Robi98 hozzászólására (») Jan 29, 2017 /
 
Szia!
Szerintem azért, mert átadtál a konfigUART-nak egy 2 bytos egész számot (9600), amit a MY_UBR nevezőjében megszoroztál 16-tal, de ezt továbbra is 2 byte-os egésznek veszi a fordító, tehát a 16*9600-nak, csak az alsó byte-ja kerül be a MY_UBR nevezőjébe és ezzel a számmal osztja el az F_CPU-t (viszont a 16*9600 nagyobb, mint amit ábrázolni lehet 2 byte-on 65.535)
Két dolgot lehetne tenni, ha továbbra is változóként akarod átadni a baud értékét, akkor: 1.
  1. MY_UBR=((F_CPU/(16*(long)baud_rate))-1);

, vagy a függvény definícióját változtasd meg
  1. void konfigUART(long baud_rate)

,ha nem kell változó, akkor:2.
  1. #define baud_rate   9600

ekkor ugye elég ez:
  1. void konfigUART()
  2. {   unsigned int MY_UBR=((F_CPU/(16*baud_rate))-1);
  3.     UBRRL=MY_UBR;  
  4.    UBRRH=(MY_UBR>>8);
  5. }
(#) Robi98 válasza Istvanpisti hozzászólására (») Jan 29, 2017 /
 
Most már értem, köszönöm a magyarázatot.
(#) Ivan93 válasza Robi98 hozzászólására (») Jan 29, 2017 /
 
Szia! Azért nem működik a "/r/n", mert rosszul írod be őket. Helyesen "\r\n".
(#) csatti2 válasza Max26 hozzászólására (») Jan 29, 2017 /
 
Ez tényleg a teljes kód? Ha igen, miért hagyod a main függvényt befejeződni?
A timer_init-ben miért a timer0 interrupt bitjét állítod, ha a timer1-t konfigurálod ott? Így az a szerencsétlen megpróbál meghívni egy nem létező megszakítást...
  1. TIMSK   &= ~(1 << TOIE0);
  2. .
  3. .
  4. .
  5. TIMSK  |= (1 << TOIE0);

Szerintem miután a compare match megszakítást használod, igazából ezek nem is kellenek...
Egyébként szerencsésebb volna, ha mindenhol ahol perifériát (és főleg megszakítást) konfigurálsz betennéd a kódot egy cli(); .... sei(); közé.

Máskor add meg milyen mikrót használsz.
(#) zombee hozzászólása Jan 29, 2017 /
 
Sziasztok!
AVR C programozásánál belefutottam egy idegesítő bugba az EEPROM használatánál.
  1. uint32_t MASTERCODES[8] EEMEM = { 4412301, 4434506, 4703273, 4427643, 0, 0, 0, 0 }; //mesterkulcsok
  2. uint8_t  RESERVED[80]   EEMEM = {};     //fenntartott
  3. uint8_t  KEYCONTROL[80] EEMEM = {};     //kulcskódok: vezérlöbájt (x1 bájt)
  4. uint32_t KEYCODES[80]   EEMEM = {};     //kulcskódok: adat (x4 bájt)


A fenti kódot úgy értelmezi a fordító, hogy a legelső (MASTERCODES) változót az EEP fájl legvégére rakja, és a továbbiakban úgy is kezeli. Ha viszont kiveszem a többi változót, akkor az elejére kerül, természetesen más pointerrel. A gubanc ott kezdődik, hogy egy másik gépemen pont fordítva történik, azaz az elsőként definiált változó az EEPROM elejére kerül. Az EEPROM tartalmát pedig nem frissítem a fejlesztés során, mert az már tartalmaz olyan értékeket amelyet a készülékem ír és olvas. Ha a változók definiálási sorrendjét felcserélem, akkor mindkét gépemen megcserélődik a sorrend:
az első gépemen lesz "jó" a sorrend, a másikor "rossz". Valamivel le lehetne fixálni a változókat?
A hozzászólás módosítva: Jan 29, 2017
(#) Max26 válasza csatti2 hozzászólására (») Jan 30, 2017 /
 
Köszi, ez volt a hiba.
(#) dc001 válasza zombee hozzászólására (») Jan 30, 2017 / 1
 
Próbáld meg struct-ba rakni:

  1. typedef struct {
  2.     uint32_t mastercodes[8];
  3.     uint8_t reserved[80];
  4.     uint8_t keycontrol[80];
  5.     uint32_t keycodes[80];
  6. } eeprom_vars_t;
  7.  
  8. eeprom_vars_t eeprom_vars EEMEM = {
  9.     .mastercodes = { 4412301, 4434506, 4703273, 4427643, 0, 0, 0, 0 },
  10.     .reserved = {},
  11.     .keycontrol = {},
  12.     .keycodes = {},
  13. };
  14.  
  15. #define MASTERCODES eeprom_vars.mastercodes
  16. #define RESERVED eeprom_vars.reserved
  17. #define KEYCONTROL eeporm_vars.keycontrol
  18. #define KEYCODES eeprom_vars.keycodes
  19.  
  20. int main(void)
  21. {
  22. uint32_t mk;
  23.  
  24. mk=eeprom_read_dword( &MASTERCODES[1] );
  25. }
(#) zombee válasza dc001 hozzászólására (») Jan 31, 2017 /
 
Köszi, legközelebb ezt próbálom. A második gépemen (ahol "jó" volt a sorrend), ott a Toolchain 3.3.0 verziója volt telepítve, míg a "fordított" sorrendet adó gépen 3.4.2. Előbbit frissítettem, így legalább mindkét gép ugyanazt a fordított sorrendet használja, nem kell folyton átirogatni ha átülök a másikra.

Mindenesetre elgondolkodtató, miért csinálja ezt, főleg, hogy pont az újabb verzió fordítja át.
Ja igen, AVR Studio 4-et használok, de ez szerintem nem befolyásolja a fordító működését. A legújabb toolchain-ban sajnos nincs make.exe, de még telepítője sincs, csak egy önkicsomagoló cucc.
A hozzászólás módosítva: Jan 31, 2017
(#) slimtomi hozzászólása Jan 31, 2017 /
 
Helló Mindenki!
Egy ideje foglalkozom AVR programozással, szép sikerrel, egészen jó progikkal a hátam mögött (programozásban már nem vagyok zöldfülű egyébként sem). Szóval tetszik, meg minden, de egyelőre csak Arduinoban programozom. ezt a jó kis procit.
Ahogy olvasom, kissé memóriapazarlóan fordítja a kódot az Arduino, így szeretném más módon is megtanulni programozni. Több kérdésem is lenne:
1. Milyen más fordítókat használtok, ezek a hol érhetőek el, ha ingyenesek?
1/2. Assembly-n kívül melyik nyelv tartható a legalkalmasabbnak (C, Pascal) ?
2. AVR Studioban lehet assemblyben is programozni (még nem telepítettem fel)?
3. Arduinoban vagy más fejlesztőkörnyezetben lehet beilleszteni assembly betéteket, mint pl Pascal-ban, C-ben?
Következő: »»   760 / 837
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem