AVR: programmēšana AVR Studio vidē. Integrēta atkļūdošanas vide AVR Studio no Atmel Avr studio

Lai strādātu ar AVR Studio 4, tā ir jāinstalē atsevišķi. Ja tas jau ir instalēts, varat izlaist šo darbību.

Uzstādīšana:
izveidot direktoriju c:/avr/ - šeit atradīsies darba programmas.
izveidot direktoriju, piemēram, c:/works/ – šeit tiks saglabāti jūsu darbi.
Ir nepieciešams, lai būtu īsceļi, lai ar tiem nebūtu problēmu.

Parasti ir AVRStudio5, bet ar AVRStudio4 joprojām ir pietiekami.

Viss darbs notiks AVRStudio4, WinAVR ir vajadzīgs tikai AVR-GCC bibliotēkas dēļ (lai varētu rakstīt C)
BET! Vispirms jāinstalē WinAVR, pretējā gadījumā AVR-GCC bibliotēka netiks uztverta.

Es domāju, ka jūs to izdomāsit šeit.
AVR-GCC rakstīšanai C
Atmel Avr Assembler attiecīgi montētājam.

Labāk ir sākt saprast MK no nulles. Un tas nozīmē no Assembler, kas nozīmē, ka jūs izveidojat to, kas ir Atmel AVR Assembler.

Pēc tam izvēlieties Atmega8 mikrokontrolleri.

kad projekts būs izveidots, būs liela, balta, tukša lapa. šeit būs kods.

nedaudz par šīs lapas saturu

“Komentāri” ir teksts, ko kompilators kompilēšanas laikā izlaiž.
pirms komentāra sākuma ir jābūt īpašam simbolam, es izmantoju simbolu; “semikols”, ir arī “dubultā slīpsvītra” (//),
šeit ir komentāru piemēri

/* * Šāda veida komentārs (vairākrindu), * parasti tiek izmantots * pavadošai informācijai * par avota kodu, t.i. * vārds, izstrādātājs utt. */ NOP // Šis komentārs galvenokārt tiek izmantots, lai izskaidrotu komandas vai koda daļas mērķi SLEEP ; Šo komentāru, tāpat kā iepriekšējo, var izmantot skaidrojumam (piezīmēm) kodā

komandas tiek rakstītas katrā rindā. tie. viena komanda - viena rinda.
Pieņemsim, ka ir komandas ar diviem “parametriem”, ar vienu vai bez nekā

MOV R16, R17 ; divi parametri INC R16 ; viens SEI parametrs; bez parametriem

MOV R16, R17 ; trīs baiti INC R16; divi baiti SEI; viens baits

Vai redzat saikni starp komandas lielumu un parametriem?

Katram mikrokontrollerim ir savs montētājs, lai gan to mnemonika ir līdzīga, t.i. MOV komanda vienas sērijas MK meklēs mašīnkodā, piemēram, 0x12, bet citai 0x55.
Lai kompilācijas laikā tas tiktu apkopots mums vajadzīgajā kodā, mums ir jāpasaka kompilatoram, kuram mikrokontrollerim mēs rakstām programmu.
Tas parasti tiek izvēlēts, veidojot projektu.
Šī iemesla dēļ mēs izvēlējāmies Atmega8 mikrokontrolleri.

Bet tas vēl nav viss. Lai atvieglotu mūsu dzīvi, AVRStudio4 ir konstantu kopa, ko sauc par "Macroassembler".

Lai tos ielādētu, koda sākumā jāievieto rinda

Iekļaut "m8def.inc" // izmantojot komandu .include, mēs ielādējām failu m8def.inc; un tagad tas mums kļūs vieglāk;)

Koda pašā sākumā tiek ievietota pārtraukumu tabula. Kas tas ir un kā tas darbojas, es paskaidrošu citā ierakstā. Bet pagaidām rakstīsim šādi:

RJMP RESET ; Reset Handler RETI; RJMP EXT_INT0 ; IRQ0 Handler RETI; RJMP EXT_INT1 ; IRQ1 Handler RETI; RJMP TIM2_COMP ; Timer2 Salīdzināt Handler RETI; RJMP TIM2_OVF ; Timer2 pārplūdes apstrādātājs RETI; RJMP TIM1_CAPT ; Timer1 Capture Handler RETI; RJMP TIM1_COMPA ; Timer1 CompareA Handler RETI; RJMP TIM1_COMPB ; Timer1 CompareB Handler RETI; RJMP TIM1_OVF ; Timer1 Overflow Handler RETI; RJMP TIM0_OVF ; Timer0 pārplūdes apstrādātājs RETI; RJMP SPI_STC ; SPI Transfer Complete Handler RETI; RJMP USART_RXC ; USART RX Complete Handler RETI; RJMP USART_UDRE ; UDR tukšs apdarinātājs RETI; RJMP USART_TXC ; USART TX Complete Handler RETI; RJMP ADC ; ADC Conversion Complete Handler RETI; RJMP EE_RDY ; EEPROM Ready Handler RETI; RJMP ANA_COMP ; Analogā salīdzinājuma apdarinātājs RETI; RJMP TWSI ; Divu vadu seriālās saskarnes apdarinātājs RETI; RJMP SPM_RDY ; Saglabājiet programmas atmiņas gatavu apdarinātāju

Pēc tam nāk pats kods

RESTARTĒT: ; inicializācijas marķieris MAIN: NOP ; galvenās cilpas marķieris RJMP MAIN

Bet ir viena (vai drīzāk ne viena, bet daudzas) iezīmes.

Koda rakstīšanas ērtībai, skaidrībai un relatīvo pāreju atvieglošanai mums tika doti marķieri, kā tie izskatās? “RESET:” un “MAIN:” ir marķieri; to nosaukumos var būt gandrīz jebkuras latīņu rakstzīmes un cipari. Marķieriem nedrīkst būt funkciju un komandu nosaukumi, piemēram, “NOP”.
Kā pie viņiem var tikt? Teiksim, RJMP komanda.

Tāpat no marķieriem mēs varam izveidot apakšprogrammu (procedūru), pēc kuras pabeigšanas atgriezīsimies tur, no kurienes tā tika izsaukta. Lai to izsauktu, izmantojiet komandu “RCALL (apakšprogramma)”, un, lai atgrieztos no apakšprogrammas (procedūra), tā jāpabeidz ar komandu “RET”. Mums vajadzētu iegūt šādu kodu:

RESTART: MAIN: NOP RCALL PPP1 ; izsaukt apakšprogrammu RJMP MAIN PPP1: NOP RET ; iziet no apakšprogrammas

Kā darbojas komanda “RCALL”, kad tā tiek izsaukta, adrese, no kuras tā tika izsaukta, tiek ievietota STACK, un, kad tiek izsaukta komanda “RET”, tā tiek noņemta no “steka” reģistra. STACK ir jāinicializē.

Lai mēs varētu strādāt ar savu MK, mums tas ir jāinicializē. jo mk, šī ierīce ir universāla, tai ir daudz ievades/izvades portu un perifērijas ierīču. piemēram, USART, PWM, DAC, ADC utt. Pirmais solis mikrokontrollera inicializācijā ir norādīt “steka” sākumu. Mēs veicam inicializāciju pēc marķiera “RESET:”.

LDI R16, HIGH (RAMEND) OUT SPH, R16 LDI R16, LOW (RAMEND) OUT SPL, R16

Ja mēs nebūtu ievadījuši komandu .include “m8def.inc” koda sākumā, mums tā būtu jāraksta šādi:

LDI R16,0x04 OUT SPH,R16 LDI R16,0x5f OUT SPL,R16

Atšķirība, manuprāt, ir būtiska.

STACK ir veikala tipa atmiņa: (pēdējais iekšā, pirmais ārā).
Veikala tips nav lielveikals, bet rags no ložmetēja. Es ceru, ka ikviens var iedomāties, kā tajā tiek ievietotas kasetnes un kā tās pēc tam tiek izņemtas no turienes.
Liela uzmanība jāpievērš STACK atmiņai, jo... jebkura neliela kļūda darbā ar to var izraisīt steka kļūmi. Šī ir tik svarīga tēma, ka nolēmu tai veltīt veselu tēmu un ierakstīšu atsevišķā piezīmē.

Tādējādi mēs saņēmām šādu kodu:

Iekļaut "m8def.inc" RJMP RESET ; Reset Handler RETI; RJMP EXT_INT0 ; IRQ0 Handler RETI; RJMP EXT_INT1 ; IRQ1 Handler RETI; RJMP TIM2_COMP ; Timer2 Salīdzināt Handler RETI; RJMP TIM2_OVF ; Timer2 pārplūdes apstrādātājs RETI; RJMP TIM1_CAPT ; Timer1 Capture Handler RETI; RJMP TIM1_COMPA ; Timer1 CompareA Handler RETI; RJMP TIM1_COMPB ; Timer1 CompareB Handler RETI; RJMP TIM1_OVF ; Timer1 Overflow Handler RETI; RJMP TIM0_OVF ; Timer0 pārplūdes apstrādātājs RETI; RJMP SPI_STC ; SPI Transfer Complete Handler RETI; RJMP USART_RXC ; USART RX Complete Handler RETI; RJMP USART_UDRE ; UDR tukšs apdarinātājs RETI; RJMP USART_TXC ; USART TX Complete Handler RETI; RJMP ADC ; ADC Conversion Complete Handler RETI; RJMP EE_RDY ; EEPROM Ready Handler RETI; RJMP ANA_COMP ; Analogā salīdzinājuma apdarinātājs RETI; RJMP TWSI ; Divu vadu seriālās saskarnes apdarinātājs RETI; RJMP SPM_RDY ; Saglabāt programmu Atmiņa Ready Handler RESET: LDI R16,HIGH(RAMEND) OUT SPH,R16 LDI R16,LOW(RAMEND) OUT SPL,R16 RGMP RESET MAIN: NOP ; galvenās cilpas marķieris RJMP MAIN

Šajā posmā mēs varam apkopot projektu un palaist to atkļūdošanai, taču, tā kā mūsu kods neko nedara, kodā būs iespējams identificēt tikai sintakses kļūdas.

Pareizam atkļūdošanas procesam emulatoram jāiestata frekvence, ar kādu MK darbosies, tas tiek darīts tikai pēc kompilēšanas un atkļūdošanas sākšanas,
Tas nozīmē, ka izvēlņu joslā atrodam “Build”, atveram to un redzam “Build and Run”, pēc kura mēs redzēsim dzeltenu bultiņu pretī pirmajai komandai mūsu koda sarakstā. Tagad izvēlņu joslā meklējam “Debug” un noklikšķiniet uz “AVR Simulator Options”, tiek atvērts šāds logs:

Kurā mēs varam mainīt MK un tā frekvenci, arī labajā panelī mēs redzam informāciju par mūsu MK: tā maksimālo frekvenci, atmiņas ietilpību (EEPROM, RAM, FLASH). Tagad atveriet datu lapu vietnē Atmega8 203. lappusē (vispārējais reģistru saraksts) un 205. lappusē (vispārējs komandu saraksts) un sāciet rakstīt programmu.
Un atcerieties, nebaidieties eksperimentēt ar simulatoru, tas neplīsīs!


Sveiki.

Šis raksts patiks tiem, kuri uzskata, ka ir “izauguši” no Arduino un ir gatavi ieiet “nopietnās” mikrokontrolleru programmēšanas pasaulē. Papildus tam, ka jūs "uzsūknēsit savas programmētāja prasmes", jums būs iespēja izvēlēties jebkuru mikrokontrolleri saviem projektiem, un, protams, jūs novērtēsiet programmu ātrumu un to aizņemtās atmiņas lielumu.

Viss tiks aprakstīts (   ), no sākuma līdz beigām, - nepieciešamās programmatūras uzstādīšana un sagatavošana, vienkāršākā “Gromov” programmētāja montāža (nebaidieties, ir tikai trīs diodes un septiņi rezistori), MK programmaparatūra un koda rakstīšana programmā AVR Studio. Viss process tiks papildināts ar ilustrācijām un piemēriem.

Ļaujiet man nekavējoties veikt rezervāciju: datoram jābūt aprīkotam ar COM portu (USB uz COM adapteris nedarbojas labi). Ja jūsu datoram nav šāda savienotāja aizmugurē, tad tas, iespējams, atrodas mātesplatē (kontaktu veidā), tad visu var atrisināt ar šo “izgrūšanu”

Diemžēl klēpjdatoru īpašniekiem bez COM raksts interesē tikai akadēmisku interesi.

Tātad, sāksim…

Kas tev būs vajadzīgs?

"mīksts"


UniProf- universāla programma dažādu ATmega mikrokontrolleru mirgošanai, vienkārša un ērta, un pats galvenais, lieliski darbojas ar mūsu programmētāju. Autors ir krievu izstrādātājs Mihails Nikolajevs.

Protams, jūs varat mirgot MK no AVR Studio, taču šim nolūkam ir nepieciešams īpašs programmētājs. Tāpēc mēs ierakstīsim kodu studijā un, izmantojot mūsu paštaisīto programmētāju, ar UniProf mirgosim iegūtos hex failus. Turklāt tiks aprakstīta programmaparatūras mirgošanas metode no komandrindas.

Linux lietotājiem būs jāizmanto vai nu virtuālā mašīna, vai Wine. Ar Wine man tas neizdevās, es vispār neredzu portu un neesmu to izmēģinājis ar virtuālo mašīnu.

  Nevainojami darbojas vīnā (Debian 8.5, wine 1.6).

Visa programmatūra ir bezmaksas.

"dzelzs"

Mēs veiksim eksperimentus Arduino pro mini ar ATmega328 mikroshēmu. Kvarca frekvence (8/16MHz), kā arī spriegumu (3,3/5v), nav svarīgi. (Skatīt zemāk)

Nākotnē programmēsiet dažādus Atmel mikrokontrollerus, bet pirmo reizi šī plate ir tieši piemērota. Tas ir labi, jo tas ir praktiski tukšs kontrolieris ar minimālu vadu un lodētām tapām. Tieši tas, kas jums nepieciešams.

Par marķējumiem uz mikrokontrolleriem

Aiz nosaukuma ir cipari, kas visbiežāk norāda atmiņas apjomu.

Burts aiz cipariem norāda barošanas sprieguma parametrus.

Nav vēstules- kontroliera barošanas spriegums ir 4,5–5,5 voltu robežās.
L- kontrolieru versijas, kas darbojas ar samazinātu ātrumu (zems) barošanas spriegums (2,7 - 5,5 volti).
V- kontrolieru versijas, kas darbojas ar zemu barošanas spriegumu (1,8–5,5 volti).
U- kontrolieru versijas, kas darbojas ar īpaši zemu barošanas spriegumu (0,7–5,5 volti).
P- mazjaudas versijas (līdz 100 nA izslēgšanas režīmā).
A- samazināts strāvas patēriņš, aptverot visu pulksteņa frekvenču diapazonu visām versijām, barošanas spriegums 1,8-5,5 volti (dažos modeļos ir pievienotas jaunas funkcijas un jauni reģistri, vienlaikus saglabājot pilnīgu savietojamību ar iepriekšējām versijām).

Mikrokontrolleri « A" un nē- A" parasti ir vienāds paraksts, kas rada zināmas grūtības, jo drošinātāju biti ir atšķirīgi.

Piemēri:

ATmega8- programmas atmiņas ietilpība ir 8 kilobaiti, barošanas spriegums ir 4,5-5,5 volti.
ATmega8L- programmas atmiņas ietilpība ir 8 kilobaiti, barošanas spriegums ir 2,7-5,5 volti.
ATtiny43U- atmiņas ietilpība 4 kilobaiti, modifikācija - 3, barošanas spriegums - 0,7-5,5 volti.
ATtiny44A- atmiņas ietilpība 4 kilobaiti, modifikācija - 4, samazināts strāvas patēriņš, barošanas spriegums 1,8-5,5 volti.

Gadās, ka kontrolierim bez burta var būt samazināts barošanas spriegums (1,7 vai 1,8 volti). Tas ir jāprecizē datu lapā.

ATtiny841- atmiņas ietilpība 8 kilobaiti, modifikācija - 41, barošanas spriegums - 1,7-5,5 volti.

Pēc defises tiek norādīta mikrokontrollera versija, kas sastāv no cipariem, kas norāda kontrollera maksimālo frekvenci (pie atbilstoša barošanas sprieguma), un no burtiem, kas norāda korpusa iespēju, darba temperatūras diapazonu un ražošanas iezīmes.

Viens vai divi burti aiz biežuma norāda korpusa veidu:

UniProf
Programmas rakstīšana ir puse no panākumiem; jums tā joprojām ir kaut kā jāiebāž kontrolierī. Tāpēc pievērsīsim tam lielāku uzmanību.

Būtu jauki, ja jūsu Arduino būtu ielādēts ar standarta Blink (tas tiek piegādāts no rūpnīcas).

Palaidīsim UniProf... Iespējams, tiks parādīts šāds logs:

Tas ir savienots ar LPT portu, tāpēc vienkārši noklikšķiniet labi.

Pēc tam tiks atvērts programmas logs:

Ja ports nav izvēlēts pareizi, parādīsies logs ar jautājumu...

Noklikšķiniet uz Labi un atlasiet vajadzīgo portu.

Ja MK netiek atklāts automātiski, parādīsies logs ar manuālu atlasi:

Diemžēl nav sarakstā atmega328, tāpēc mēs izvēlamies mega32 (tiem ir vienāds zibatmiņas apjoms) un nospiediet labi.

Pēc tam vārda nezināms vietā parādīsies pievienotais kontrolleris...

32K ir zibatmiņas apjoms un 1024 - EEPROM apjoms.

Tagad, ja viss ir kā bildē, tad atver palīdzību   un uzmanīgi izlasi, kas tur rakstīts. Autors bija ļoti kodolīgs, tāpēc tas neaizņems daudz laika. Vēl nespiediet nevienu pogu.

Vai esat satikušies? Lieliski, tagad varam doties tālāk. Noņemiet atzīmi no izvēles rūtiņas blakus EEPROM, un jūs redzēsit mainīto saskarni:

Pēc EEPROM izvēles rūtiņas noņemšanas šī atmiņas apgabala lasīšana un rakstīšana netiek veikta.

Tā kā mēs darbosimies ar hex failiem, mēs noņemsim “atzīmes” Ģenerālis Un BIN, kā arī atzīmējiet izvēles rūtiņu Bremzējiet!, tas palielinās lasīšanas/rakstīšanas laiku, bet palielinās stabilitāti.

Process nav ātrs, tāpēc jums būs jāgaida. Zemāk tiks rādīti zili kvadrāti, un skaitļi tiks skaitīti apakšējā labajā stūrī. Pirmajā piegājienā tiks nolasīts PROGRAMMAS apgabals, bet otrajā - EEPROM.

Man ir jauns Arduino ar iebūvētu standarta Blink (kad ir pievienots programmētājs, diode pārstās mirgot). Ja jums ir tas pats, parādīsies šāds attēls:

Labajā pusē mēs redzam, ka EEPROM nav nekā, un kreisajā pusē PROGRAM ir ierakstīta programma (kā jau teicu, tas ir Blink). Tagad izmantojiet lejupvērsto bultiņu, lai ritinātu slīdni, līdz beidzas dati...

...tagad ritiniet līdz beigām. Jūs redzēsit vairāk datu - tas ir Arduino sāknēšanas ielādētājs.

Tagad es ierosinu pārtraukumu no sava raksta un izlasīt par MK struktūru, tas ievērojami palielinās jūsu izpratni par materiālu. Viss ir uzrakstīts ļoti labi un skaidri. Kad esat to izlasījis, atgriezieties un turpināsim...

Noņemiet atzīmi no EEPROM. Mums tas nav īsti vajadzīgs, bet būs skaidrs, ka ir "ķeksītis" Bremzējiet!

Tagad saglabāsim kontrolierī visu, kas ir programmaparatūra, lai pēc eksperimentiem varētu to atgriezt sākotnējā stāvoklī.

Nospiediet pogu   un saglabājiet programmaparatūru, nosaucot to kā - origProMini328.hex. Tas arī viss, tagad jums ir rezerves kopija.

... un pēc tam noklikšķiniet uz jau pazīstamās pogas Lasīt. Pēc tam jūs redzēsiet, ka visas programmas PROGRAMMAS šūnas ir tukšas. Tika noņemta ne tikai programma, bet arī Arduino sāknēšanas ielādētājs.
Tas ir, tagad jūs nevarēsit augšupielādēt skices, izmantojot tradicionālo metodi. Pēc tam, ja vēlaties, ar vieglu rokas mājienu atjaunojiet visu no dublējuma.

Tagad mēs mirgosim kontrolieri ar to pašu “Blink”, tikai rakstīts AVR Studio.

Lūk, kā izskatās kods:

#define F_CPU 16000000UL #include #iekļauts #define PIN_PB5 5 // PB5 (Arduino — D13) #define PIN_PB5_PORT PORTB #define PIN_PB5_DDR DDRB int main(void) ( PIN_PB5_DDR = 1<< PIN_PB5; // устанавливаем PIN_PB5 (PB5 (ардуина - D13)) как ВЫХОД while(1) { PIN_PB5_PORT = 1 << PIN_PB5; _delay_ms(300); PIN_PB5_PORT = 0 << PIN_PB5; _delay_ms(300); } return 0; }
Ja izmantojat Arduino ar 8 MHz kvarcu, tad nav nekā slikta, diode mirgos uz pusi tik bieži.

Lūk, cik daudz vietas tas aizņem:

AVRDude

Uniprof, tāpat kā daudzas citas līdzīgas programmas, ir tikai grafisks papildinājums programmai AVRDude (AVR lejupielādētājs-augšupielādētājs), kas pēc tam veic visas iepriekš aprakstītās darbības ar mikrokontrolleru.
Tāpēc ka AVRDude nav sava grafiskā interfeisa; jums ir jāstrādā ar to no komandrindas. Dažiem tas var šķist neērti, taču tas ir tieši otrādi; strādāt no konsoles ir vienkārši lieliski. Ērti, vienkārši un nav piesaistīti nevienai OS, jo avrdude laikam eksistē visam. Tagad jūs to redzēsit.

Lietotājiem

Avrdude ir iekļauts AVR rīku ķēdē, tāpēc instalējiet to (pēc AVR Studio instalēšanas) kā rakstīts raksta sākumā.

CD\
...dodieties uz diska sakni AR.

Ievadot komandu:

Ja tas tā ir, tad avrdude gatavs doties un turpināt.

Tagad mums ir jāpievieno mūsu programmētājs konfigurācijas failam avrdude (C:\Program Files (x86)\Atmel\AVR Tools\AVR Toolchain\bin\ avrdude.conf) . Atveriet to programmā Notepad++ un pēc uzraksta “PROGRAMMĒTĀJA DEFINĪCIJAS” pievienojiet šīs rindas:

Programmētāja ID = "gromov"; desc = "Serial port banging, reset=dtr sck=rts mosi=txd miso=cts"; tips = serbb; atiestatīt = 4; scck = 7; mosi = 3; miso = 8; ;
Bit-banding.

Saglabājiet un aizveriet failu; tas vairs nav vajadzīgs.

Atgriezieties terminālī un dodiet komandu, lai pārbaudītu saziņu starp MK un programmētāju:

Avrdude -n -c gromov -P com1 -p m328p
Jums var būt cits com ports.

Uzstādīt avrdude

Sudo apt install avrdude

Ievadot komandu:

Jums vajadzētu redzēt palīdzības informāciju.

Ja tas tā ir, tad avrdude gatavs darbam.

Konfigurējiet portu:

Sudo stty 9600 ignbrk -brkint -icrnl -imaxbel -opost -isig -icanon -iexten -echo noflshTas jādara pēc katras datora atsāknēšanas vai jāpievieno rc.local.

Kur atrodas /dev/ttyS0 com1, /dev/ttyS1 - com2 utt.
Nākotnē komandās rakstīšu /dev/ttyS0, jums var būt /dev/ttyS1 utt.

Pievienojiet programmētāju konfigurācijas failam /etc/avrdude.conf

Sudo nano /etc/avrdude.conf

Pēc “PROGRAMMĒTĀJA DEFINĪCIJAS” pievienojiet šādas rindas:

Programmētāja ID = "gromov"; desc = "Serial port banging, reset=dtr sck=rts mosi=txd miso=cts"; tips = "serbb"; atiestatīt = 4; scck = 7; mosi = 3; miso = 8; ;
Programmētājs izmanto Bit-banging tehnoloģiju.

Pārliecinieties, ka, kopējot, pēdiņas paliek tikai pēdiņas, pretējā gadījumā tās var mainīties (kodējumu atšķirības dēļ) un avrdude zvērēs.

Saglabājiet un aizveriet failu.

Dodiet komandu, lai pārbaudītu savienojumu starp MK un programmētāju:

Sudo avrdude -n -c gromov -P /dev/ttyS0 -p m328p

Ja ir savienojums, tad atbilde būs šāda:

Šeit beidzas atšķirības starp operētājsistēmām un komandas tiek dublētas.

Pievienojiet komandai argumentu -v vai -v -v (var pievienot jebkurai komandai) lai parādītu pilnu informāciju:

Avrdude -n -v -c gromov -P com1 -p m328p ###WIN###
sudo avrdude -n -v -c gromov -P /dev/ttyS0 -p m328p ###Linux###


Avrdude secinājums ir tāds, ka gan Windows, gan Linux ir vienādi, tāpēc turpmāk ekrānšāviņus uzņemšu tikai Win.

Šeit ir vairāk informācijas, piemēram, var redzēt, kādi drošinātāji ir uzstādīti. Šeit tie tiek izvadīti heksadecimālā veidā (HEX) cipariem. Piemēram, hfuse 0xDA, binārajā formātā tas izskatās šādi - . Tas ir, tie ir tie paši biti, kas tiek atzīmēti grafiskajās saskarnēs.

Strādājot ar drošinātājiem, atcerieties, ka ATmega mikrokontrolleros drošinātāji ir apgriezti. Tas ir 0 -Šo ieslēgts Jučeno un 1 - izslēgts Jučeno. Tas rada apjukumu tiešsaistes kalkulatoros (skatīt zemāk).

Lasīsim programmaparatūru no apgabala zibspuldze (tas pats kas PROGRAMMA uniprof) komanda:

Avrdude -c gromov -P com1 -p m328p -U flash:r:readfl.txt:h ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U flash:r:readfl.txt:h ###Linux###

Uniprofā kods tika parādīts programmā, bet šeit tas tiks ierakstīts failā.

Programmaparatūra nolasīta un ierakstīta failā lasītfl.txt. Vēstule h (hex) beigās norāda, ka dati jāraksta heksadecimālā formātā. Ja raksti vēstuli b (binārs), tiks rakstīts binārajā sistēmā, un ja r (neapstrādāts), tad dati būs “neapstrādātā” formā (kryakozyabra).

No šī brīža tiek pieņemts, ka win lietotāji atrodas diska saknē AR (C:\), un Linux lietotāji strādā no savas mājas mapes, tāpēc faili tiks saglabāti tur (ja nav norādīts citādi). Tur ir jāatrodas programmaparatūrai, kas tiks augšupielādēta MK.

Win, fails atradīsies šeit C:\readfl.txt, bet linux gadījumā - mapē /home/user/readfl.txt. Jūs varat atvērt šo failu un apskatīt.

EEPROM lasīšana:

Avrdude -c gromov -P com1 -p m328p -U eeprom:r:reader.txt:h ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U eeprom:r:reader.txt:h ###Linux###

Flash un eeprom lasīšana kopā:

Avrdude -c gromov -P com1 -p m328p -U flash:r:readfl.txt:h -U eeprom:r:reader.txt:h ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U flash:r:readfl.txt:h -U eeprom:r:reader.txt:h ###Linux###

Kontroliera dzēšana:

Avrdude -e -c gromov -P com1 -p m328p ###WIN###
sudo avrdude -e -c gromov -P /dev/ttyS0 -p m328p ###Linux###

Atvienojiet “atiestatīšanas” tapu - diode nemirgos, programma tiks izdzēsta.

Zibināsim MK ar iepriekš lejupielādēto failu 328test.hex. Atrodas diska saknē C(c:\328test.hex) operētājsistēmā Windows vai sākuma mapē (/home/user/328test.hex) operētājsistēmā Linux.

Avrdude -c gromov -P com1 -p m328p -U flash:w:328test.hex ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U flash:w:328test.hex ###Linux###

Tagad, ja izslēgsit “atiestatīšanu”, kontrolieris atdzīvosies.

Piezīme. Mirgojot MK caur avrdude, nav nepieciešams dzēst kontrolieri, programma to dara pati. Tomēr, ja norādāt parametru -D, tad MK netiks iztīrīts automātiski.

EEPROM programmaparatūra:

Avrdude -c gromov -P com1 -p m328p -U eeprom:w:eeprom.hex ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U eeprom:w:eeprom.hex ###Linux###

Visu drošinātāju nolasīšana:

Avrdude -c gromov -P com1 -p m328p -U hfuse:r:hfuse.txt:h -U lfuse:r:lfuse.txt:h -U lock:r:lock.txt:h -U efuse:r:efuse .txt:h ###UZVARĒT###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U hfuse:r:hfuse.txt:h -U lfuse:r:lfuse.txt:h -U lock:r:lock.txt:h -U efuse :r:efuse.txt:h ###Linux###

Dažiem kontrolleriem var nebūt drošinātāju.

Tikai lasīšanai Zems drošinātājs:

Avrdude -c gromov -P com1 -p m328p -U lfuse:r:lfuse.txt:h ###WIN###
sudo avrdude -c gromov -P com1 -p m328p -U lfuse:r:lfuse.txt:h ###Linux###

Zems drošinātājs ir atbildīgs par pulksteņa signāla avota (iekšējais, ārējais), tā frekvences un pauzes izvēli pirms kontrollera iedarbināšanas pēc tam, kad tam tiek pievienota barošana. Tagad jums tur ir rakstīta vērtība - 0xff, kas atbilst ārējam kvarcam no 8 MHz un vairāk.

Tagad mēs mirgosim vēl vienu drošinātāju, kas pārsūtīs jūsu ATmeg darbam no iekšējā 8 MHz ģeneratora.

Avrdude -c gromov -P com1 -p m328p -U lfuse:w:0xe2:m ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U lfuse:w:0xe2:m ###Linux###

Ja jums ir 16 MHz Arduino, diode mirgos divreiz lēnāk.
Nākotnē, kodējot AVR Studio, varat norādīt 8 MHz frekvenci un atlodēt kvarcu, tādējādi iegūstot vēl divus bezmaksas digitālos kontaktus.

Bet tas ir vēlāk, un tagad atgriezīsim visu tā, kā tas bija, ieslēdzot iepriekšējo drošinātāju:

Avrdude -c gromov -P com1 -p m328p -U lfuse:w:0xff:m ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U lfuse:w:0xff:m ###Linux###

Diode mirgos pareizi.

Drošinātājus var ieslēgt atsevišķi vai kopā:

Avrdude -c gromov -P com1 -p m328p -U hfuse:w:0xda:m -U lfuse:w:0xff:m -U efuse:w:0x05:m ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U hfuse:w:0xda:m -U lfuse:w:0xff:m -U efuse:w:0x05:m ###Linux###
Šīs komandas nav jādod. Es tos piedāvāju skaidrības labad.

Nākotnē, kad būs jāizmanto citi kontrolleri, tiešsaistes kalkulatorā atzīmēsiet izvēles rūtiņas un iegūsit vērtības (saite atrodas augšējā kreisajā stūrī) hex formātā un flash to.

Tagad atliek tikai izdomāt parametrus avrdude un jūs varat pāriet uz pēdējo daļu.

-c gromovs- programmētāja veids vai drīzāk nosaukums, ar kuru tas ir rakstīts konfigurācijā (avrdude.conf).
-P com1- Nu, šeit viss ir skaidrs.
-p m328p- apzīmējuma veids MK.
-U- pēc šīs opcijas tiek norādīts atmiņas apgabals (flash, eeprom, xfuse), kurā tiks veiktas jebkādas darbības (r — lasīt, w — rakstīt).
Koli kalpo kā atdalītāji.

Šeit ar mikrokontrolleru nosaukumiem un to aizstājvārdiem, programmētājiem un citām iespējām.

Iesaukas MK

uc3a0512- AT32UC3A0512
c128- AT90CAN128
c32- AT90CAN32
c64- AT90CAN64
pwm2- AT90PWM2
pwm2b- AT90PWM2B
pwm3- AT90PWM3
pwm316- AT90PWM316
pwm3b- AT90PWM3B
1200 - AT90S1200 (****)
2313 - AT90S2313
2333 - AT90S2333
2343 - AT90S2343 (*)
4414 - AT90S4414
4433 - AT90S4433
4434 - AT90S4434
8515 - AT90S8515
8535 - AT90S8535
usb1286- AT90USB1286
usb1287- AT90USB1287
usb162- AT90USB162
usb646- AT90USB646
usb647- AT90USB647
usb82- AT90USB82
m103- ATmega103
m128- ATmega128
m1280- ATmega1280
m1281- ATmega1281
m1284p- ATmega1284P
m1284rfr2- ATmega1284RFR2
m128rfa1- ATmega128RFA1
m128rfr2- ATmega128RFR2
m16- ATmega16
m161- ATmega161
m162- ATmega162
m163- ATmega163
m164p- ATmega164P
m168- ATmega168
m168p- ATmega168P
m169- ATmega169
m16u2- ATmega16U2
m2560- ATmega2560 (**)
m2561- ATmega2561 (**)
m2564rfr2- ATmega2564RFR2
m256rfr2- ATmega256RFR2
m32- ATmega32
m324p- ATmega324P
m324pa- ATmega324PA
m325- ATmega325
m3250- ATmega3250
m328- ATmega328
m328p- ATmega328P
m329- ATmega329
m3290- ATmega3290
m3290p- ATmega3290P
m329p- ATmega329P
m32u2- ATmega32U2
m32u4- ATmega32U4
m406- ATMEGA406
m48- ATmega48
m48p- ATmega48P
m64- ATmega64
m640- ATmega640
m644- ATmega644
m644p- ATmega644P
m644rfr2- ATmega644RFR2
m645- ATmega645
m6450- ATmega6450
m649- ATmega649
m6490- ATmega6490
m64rfr2- ATmega64RFR2
m8- ATmega8
m8515- ATmega8515
m8535- ATmega8535
m88- ATmega88
m88p- ATmega88P
m8u2- ATmega8U2
t10-ATtiny10
t11- ATtiny11
t12- ATtiny12
t13- ATtiny13
t15-ATtiny15
t1634- ATtiny1634
t20- ATtiny20
t2313- ATtiny2313
t24- ATtiny24
t25- ATtiny25
t26- ATtiny26
t261- ATtiny261
t4- ATtiny4
t40- ATtiny40
t4313-ATtiny4313
t43u- ATtiny43u
t44- ATtiny44
t45- ATtiny45
t461- ATtiny461
t5- ATtiny5
t84- ATtiny84
t85- ATtiny85
t861- ATtiny861
t88- ATtiny88
t9- ATtiny9
x128a1- ATxmega128A1
x128a1d- ATxmega128A1revD
x128a1u- ATxmega128A1U
x128a3- ATxmega128A3
x128a3u- ATxmega128A3U
x128a4- ATxmega128A4
x128a4u- ATxmega128A4U
x128b1- ATxmega128B1
x128b3- ATxmega128B3
x128c3- ATxmega128C3
x128d3- ATxmega128D3
x128d4- ATxmega128D4
x16a4- ATxmega16A4
x16a4u- ATxmega16A4U
x16c4- ATxmega16C4
x16d4- ATxmega16D4
x16e5- ATxmega16E5
x192a1- ATxmega192A1
x192a3- ATxmega192A3
x192a3u- ATxmega192A3U
x192c3- ATxmega192C3
x192d3- ATxmega192D3
x256a1- ATxmega256A1
x256a3- ATxmega256A3
x256a3b- ATxmega256A3B
x256a3bu- ATxmega256A3BU
x256a3u- ATxmega256A3U
x256c3- ATxmega256C3
x256d3- ATxmega256D3
x32a4- ATxmega32A4
x32a4u- ATxmega32A4U
x32c4- ATxmega32C4
x32d4- ATxmega32D4
x32e5- ATxmega32E5
x384c3- ATxmega384C3
x384d3- ATxmega384D3
x64a1- ATxmega64A1
x64a1u- ATxmega64A1U
x64a3- ATxmega64A3
x64a3u- ATxmega64A3U
x64a4- ATxmega64A4
x64a4u- ATxmega64A4U
x64b1- ATxmega64B1
x64b3- ATxmega64B3
x64c3- ATxmega64C3
x64d3- ATxmega64D3
x64d4- ATxmega64D4
x8e5- ATxmega8E5

Linux lietotāji var izmantot vīnu.

Es ceru, ka jums jau viss ir instalēts, tāpēc palaidīsim AVR Studio...


Šeit mums tiek lūgts izveidot jaunu projektu vai atvērt vecu. Klikšķis Jauns Projekts


Izvēlieties AVR GCC, jo mēs rakstīsim SI, nevis montētājā.
Mēs piešķiram projektam nosaukumu un atzīmējam izvēles rūtiņas.
Izvēlieties Atrašanās vieta (Es izveidoju AVR mapi uz C:\ diska) Tur automātiski tiks izveidotas mapes ar projektiem.
Klikšķis Nākamais


Izvēlieties AVR simulators, jo mums nav īpaša programmētāja, kas ļauj atkļūdot, un mūsu mikrokontrolleris ir ATmega328p.
Klikšķis Pabeigt.

Pēc šīm manipulācijām studija ir gatava darbam.

Kreisajā pusē ir ceļi uz projektu. Centrā ir teksta redaktors, kurā tiek ierakstīts kods. Labajā pusē ir kontroliera reģistri. Apakšējā kreisajā stūrī ir informācija par atkļūdošanu.

No pogām, kuras mūs šobrīd interesē šīs -

Veidojiet projektu.
Izveidojiet projektu un sāciet atkļūdošanu.
Faila kompilēšana.
Tīrīšana.
Projekta iestatīšana. Tātad noklikšķiniet uz tā ...

Šeit jūs varat mainīt MK veidu, iestatīt pulksteņa frekvenci (mēs to ierakstīsim tieši kodā), optimizācijas līmeni, kā arī noteikt, kādi faili tiks izveidoti.
Noklikšķiniet uz ikonām kreisajā pusē, lai iegūtu interesi, un noklikšķiniet uz Atcelt.
Šos un citus variantus nepaskaidrošu, bet vēlāk iedošu saiti ar kompetentu aprakstu.

Tagad nokopējiet kodu, kas rakstīts raksta sākumā, un ielīmējiet to redaktorā:

Mēs kodā norādījām pulksteņa frekvenci, jo bibliotēka to pieprasa kavēšanās.h.

Būvēšana bija veiksmīga, nebija kļūdu vai brīdinājumu.

Tagad dodamies ceļā C:\AVR\my328\default\, mēs tur atrodam mūsu izveidoto hex failu - my328.hex un ievietojiet to kontrolierī. Ko mirgot (avrdude vai uniprof) izvēlies pats.

Avrdude tas izskatīsies šādi:

Avrdude -c gromov -P com1 -p m328p -U flash:w:\AVR\my328\default\my328.hex ###WIN###
avrdude -c gromov -P /dev/ttyS0 -p m328p -U flash:w:my328.hex ###Linux###

Atspējojiet “atiestatīšanu” un redziet, ka diode mirgo reizi sekundē. Es ceru, ka esmu jūs pārliecinājis par komandrindas vienkāršību un ērtumu.

Lai Arduino atkal pārvērstu par Arduino, jums ir rezerves kopija.

Kā jau rakstīts iepriekš, es neiedziļināšos skaidrojumos par darbu ar AVR Studio, kā arī nesniegšu nodarbības par SI valodu. Pirmkārt, tas nebija mans plāns. (Es tikai gribēju palīdzēt veikt pāreju no Arduino uz AVR Studio)

IDE ir integrēta izstrādes vide, kas ietver dažādas veidnes, bibliotēkas un atkļūdotāja funkcijas. Ja runājam, kopš 2004. gada viņiem ir izstrādāta jaudīga programmatūras pakotne AVR studio.

Pirmās versijas

Pirmajās studijas versijās bija iekļauts montētājs priekš , to var izvilkt no pirmajiem komplektiem, taču vēlāk šis projekts tika pamests, un par galveno valodu tika izvēlēta C AVR. Kompilators bija apmaksāts un ļoti nopietns produkts IAR. Jūs varat lejupielādēt bezmaksas WINAVR; lai to izdarītu, pēc studijas instalēšanas tā jāinstalē.

Piezīme! Labāk to darīt tikai pēc AVR studio 4 un citu versiju instalēšanas.

AVR studio 4 (attēlā iepriekš) tika demonstrēta ilgu laiku. Daudzi mikrokontrolleru izstrādātāji ir saskārušies ar šo problēmu. Vēlāk IDE tika jaunināts uz AVR studio 5. Ja neskaita interfeisu, nekādu īpašu izmaiņu nebija, un tikai pēc tam izstrādātāju uzņēmums pārveidoja produkta zīmolu un mainīja nosaukumu uz Atmel studio 6.

AVR studio 5 vide atbalstīja šādus mikrokontrollerus:

  • AVR32;
  • XMEGA.

Atmel studio 6 būtiski atšķīrās no AVR studio 5; pamanāmākie jauninājumi versijā bija:

  1. Microsoft Visual Studio 2010 sāka strādāt ar AVR saimi.
  2. Uzlabota sintakses izcelšana salīdzinājumā ar AVR studio 5.
  3. Pievienoti padomi un komandu kopas automātiska pabeigšana, kas paātrina izstrādes procesu.
  4. Kopumā visa vides darbība ir kļuvusi uzticamāka.
  5. Pievienots ARM Cortex-M atbalsts.
  6. WinAVR vairs nav jāinstalē atsevišķi; GCC tagad tiek instalēts instalēšanas procesa laikā, atšķirībā no jaunākām versijām.

Atmel studijā 6 notika lēciens uz labo pusi programmas lietotājam, kas ietekmēja Atmel ģimeņu popularitāti. Tomēr nebija iespējams panākt adekvātu atbalstu krievu rakstzīmēm failu ceļos.

Pašreizējā versija – Atmel studio 7

Izstrādes vide, kuru izmantoju, bija Visual Studio Isolated Shell 2015; no vienas puses, šis risinājums netiek atbalstīts operētājsistēmā Windows XP, no otras puses, šie pasākumi tika veikti, lai uzlabotu gan programmas izskatu, gan tās funkcionalitāti.

Iespējams, visnozīmīgākais ir Arduino atbalsta pievienošana Atmel studio 7. Tas nozīmē, ka varat pāriet no vienkāršu skiču kopas uz visu C funkciju, atkļūdošanas, MCU simulatora un citu funkciju izmantošanu. Arduino un Atmel studio 7 kombinācija deva jaunu kārtu šīs vienkāršās mācību platformas izstrādē.

Atmel studijas studijas ar Arduino sniegs iespēju pāriet uz pilnīgu un produktīvu meistarību un dziļāku iepazīšanos ar Arduino sirdi – Atmega mikrokontrolleri.

Turklāt no Atmel vietnes varat lejupielādēt paketi LCD darbināšanai un pievienošanai. Kā piemēru apgūšanai varat izmantot LCD 1602; internetā par to ir daudz nodarbību, un izstrādātājam displejā ir pieejamas 16 rakstzīmes un 2 rindas.

Kur sākt mācīties?

Jums jāsāk, protams, ar programmētāja iegādi; Budžetam draudzīgākais ir USBASP. Atmel Studio 7 neatbalsta USBASP programmētāju.


Lejupielādējiet programmētāja un programmas AVRdude draiverus un, lai tas viss darbotos kopā, varat izmantot komandu, izmantojot komandrindu:

"avrdude -c usbasp -p atmega32 -U flash:w: programmaparatūras faila nosaukums. hex -U drošinātājs:w:0x6a:m -U drošinātājs:w:0xff:m"

un iespējojiet tā atbalstu, izveidojot profilu atmel studio 7 (nosaukums – ārējie rīki), un vienumā Arguments ievadiet “-c usbasp -p atmega32 -U flash:w:$(TargetName).hex” un tā tālāk katram. veids, kādā izmantojat mikrokontrollerus.

Tas ir vienīgais veids, kā savienot studiju un USBASP programmētāju. Esiet uzmanīgi mirgojot - varat sabojāt mikrokontrollera parakstu, un to var atjaunot tikai ar 12 V (augstsprieguma) programmētāju.

Kādu literatūru izmantot apmācībās?

Pirmkārt, lejupielādējiet katra mikrokontrollera rokasgrāmatas no oficiālās vietnes. Ir grūti ieteikt konkrētu mācību grāmatu, bet ir “DI Halt - AVR. Apmācību kurss" jūs varat to izmantot - šī materiāla veidotājs ir praktiķis, daudzu rakstu autors par dažādiem interneta resursiem un vienkārši cienīts cilvēks speciālistu aprindās.

Esmu ne reizi vai divas reizes teicis, ka studēt MK jāsāk ar montētāju. Tam tika veltīts vesels kurss mājaslapā (lai gan tas nav īpaši konsekventi, bet pamazām ķemmēju to līdz adekvātam izskatam). Jā, tas ir grūti, rezultāts nebūs pirmajā dienā, bet jūs iemācīsities saprast, kas notiek jūsu kontrolierī. Jūs zināt, kā tas darbojas, nevis kopēt citu cilvēku avotus kā mērkaķis un mēģināt saprast, kāpēc tas pēkšņi pārstāja darboties. Turklāt C ir daudz vieglāk izveidot redneck kodu, kas iznāks ar dakšiņu visnepiemērotākajā brīdī.

Diemžēl visi vēlas rezultātus nekavējoties. Tāpēc nolēmu iet citu ceļu - uztaisīt pamācību par C, bet ar viņa apakšveļas atrādīšanu. Labs iegulšanas programmētājs vienmēr cieši tur savu aparatūras daļu aiz skrūves, neļaujot tai spert nevienu soli bez atļaujas. Tātad vispirms būs C kods, tad tas, ko kompilators radīja un kā tas viss faktiski darbojas :)

No otras puses, C stiprā puse ir koda pārnesamība. Ja, protams, visu uzrakstīsi pareizi. Darba algoritmu un to aparatūras implementāciju sadalīšana dažādās projekta daļās. Pēc tam, lai pārsūtītu algoritmu uz citu mikrokontrolleri, pietiks pārrakstīt tikai interfeisa slāni, kurā tiek ierakstīti visi izsaukumi uz aparatūru, un atstāt visu darba kodu kā ir. Un, protams, lasāmība. C pirmkods ir vieglāk saprotams no pirmā acu uzmetiena (lai gan... piemēram, man ir vienalga, uz ko norādīt - vai tas būtu C vai ASM :)), bet atkal, ja viss ir uzrakstīts pareizi. Es arī pievērsīšu uzmanību šiem punktiem.

Mana atkļūdošanas dēlis kalpos kā eksperimentālā aparatūra, kurā tiks instalēta lauvas tiesa no visiem piemēriem.

Pirmā C programma AVR

Kompilatora izvēle un vides iestatīšana
AVR ir daudz dažādu C kompilatoru:
Vispirms tas IAR AVR C- gandrīz noteikti ir atzīts par labāko AVR kompilatoru, jo pats kontrolieris tika izveidots, cieši sadarbojoties Atmel un IAR speciālistiem. Bet par visu ir jāmaksā. Un šis kompilators ir ne tikai dārga komerciāla programmatūra, bet arī tam ir tik daudz iestatījumu, ka ir nepieciešams daudz pūļu, lai to vienkārši apkopotu tajā. Man tiešām ar viņu nebija izveidojušās draudzības; projekts sabruka dīvainu kļūdu dēļ saistīšanas posmā (vēlāk uzzināju, ka tā bija šķība plaisa).

Otrais nāk WinAVR GCC- spēcīgs optimizācijas kompilators. Pilnībā atvērtā koda, starpplatformu, kopumā visi dzīves prieki. Tas arī lieliski integrējas AVR Studio, ļaujot atkļūdot tieši tur, kas ir sasodīti ērti. Kopumā es to izvēlējos.

Ir arī CodeVision AVR C ir ļoti populārs kompilators. Tas kļuva populārs savas vienkāršības dēļ. Tajā jūs varat iegūt darba programmu tikai dažu minūšu laikā - sākuma koda vednis to ievērojami atvieglo, štancējot standartus visu veidu uartu inicializācijai. Godīgi sakot, man tas ir diezgan aizdomīgs - reiz, kad man bija jāizjauc šī kompilatora rakstītā programma, tas izrādījās kaut kāds haoss, nevis kods. Briesmīgi daudz nevajadzīgu kustību un operāciju, kā rezultātā radās ievērojams koda daudzums un lēna veiktspēja. Tomēr, iespējams, bija kļūda tās personas DNS, kura uzrakstīja sākotnējo programmaparatūru. Turklāt viņš grib naudu. Ne tik daudz kā IAR, bet pamanāms. Un demonstrācijas režīmā tas ļauj rakstīt ne vairāk kā 2 kb koda.
Protams, ir plaisa, bet, ja jūs gatavojaties zagt, tas ir miljons IAR izpratnē :)

Ir arī Image Craft AVR C Un MicroC no mikroelektronikas. Man nevajadzēja izmantot nevienu, bet S.W.G.ļoti slavinoši MicroPascal, saka, šausmīgi ērta programmēšanas vide un bibliotēkas. Es domāju, ka MicroC nebūs sliktāks, bet tas ir arī apmaksāts.

Kā jau teicu, es izvēlējos WinAVR trīs iemeslu dēļ: tas ir bezmaksas, integrējas AVR Studio, un tam ir rakstīts tikai ļoti daudz gatavu kodu visiem gadījumiem.

Tāpēc lejupielādējiet WinAVR instalāciju, izmantojot AVR Studio. Tālāk vispirms tiek instalēta studija, pēc tam WinAVR tiek uzvilkta virsū un pievienota studijai spraudņa veidā. Es ļoti iesaku instalēt WinAVR uz īsa ceļa, piemēram, C:\WinAVR, tādējādi jūs izvairīsities no daudzām problēmām ar ceļiem.

Projekta izveide
Tātad, studija ir uzstādīta, C ir ieskrūvēts, ir pienācis laiks mēģināt kaut ko ieprogrammēt. Sāksim ar vienkāršāko, vienkāršāko. Palaidiet studiju, atlasiet tur jaunu projektu kā AVR GCC kompilatoru un ievadiet projekta nosaukumu.

Tiek atvērts darba lauks ar tukšu *.c failu.

Tagad nenāks par ļaunu konfigurēt ceļu parādīšanu studijas grāmatzīmēs. Lai to izdarītu, dodieties uz:
Izvēlnes rīki - Opcijas - Vispārīgi - Failu cilnes un nolaižamajā sarakstā atlasiet "Tikai faila nosaukums". Pretējā gadījumā nebūs iespējams strādāt - cilnē būs pilns faila ceļš, un ekrānā būs ne vairāk kā divas vai trīs cilnes.

Projekta iestatīšana
Kopumā tiek uzskatīts, ka ir klasisks izveidot make failu, kurā ir aprakstītas visas atkarības. Un tas droši vien ir pareizi. Bet man, kas uzauga uz pilnībā integrētiem IDE, piemēram uVision vai AVR studijašī pieeja ir dziļi sveša. Tāpēc darīšu pēc sava prāta, visu izmantojot studijas līdzekļus.

Ieduriet pogu ar pārnesumu.


Šie ir jūsu projekta iestatījumi vai drīzāk iestatījumi make faila automātiskai ģenerēšanai. Pirmajā lapā jums vienkārši jāievada frekvence, kādā jūsu MK darbosies. Tas ir atkarīgs no drošinātāju bitiem, tāpēc mēs pieņemam, ka mūsu frekvence ir 8000000Hz.
Pievērsiet uzmanību arī optimizācijas līnijai. Tagad ir -Os - tā ir izmēru optimizācija. Pagaidām atstājiet to kā ir, tad varat mēģināt spēlēt ar šo parametru. -O0 nav optimizācijas vispār.

Nākamais solis ir ceļu konfigurēšana. Pirmkārt, pievienojiet tur savu projekta direktoriju - tur pievienosit trešo pušu bibliotēkas. Ceļš “.\” parādīsies sarakstā.

Make fails ir ģenerēts, varat to apskatīt sava projekta noklusējuma mapē, vienkārši ieskatieties un skatiet, kas tur ir.


Tas pagaidām ir viss. Visur noklikšķiniet uz Labi un dodieties uz avotu.

Problēmas formulēšana
Tukša papīra lapa vilina īstenot kādu viltīgu ideju, jo banāla diodes mirkšķināšana vairs nedarbojas. Tūlīt ņemsim vērsi pie ragiem un ieviesīsim savienojumu ar datoru – tas ir pirmais, ko daru.

Tas darbosies šādi:
Kad caur COM portu pienāk viens (kods 0x31), mēs ieslēgsim diodi, un, kad pienāk nulle (kods 0x30), tā izslēdzas. Turklāt viss tiks darīts ar pārtraukumiem, un fona uzdevums būs citas diodes mirgošana. Vienkārši un jēgpilni.

Ķēdes montāža
Mums ir jāpievieno USB-USART pārveidotāja modulis ar mikrokontrollera USART tapām. Lai to izdarītu, paņemiet džemperi no diviem vadiem un novietojiet to uz tapām šķērsām. Tas ir, mēs savienojam kontroliera Rx ar pārveidotāja Tx, bet pārveidotāja Tx - ar kontroliera Rx.

Galu galā šī ir diagramma:


Es neapsveru iespēju pievienot atlikušās tapas, barošanu vai atiestatīšanu, tas ir standarts.

Koda rakstīšana

Uzreiz atļaušos izdarīt atrunu, ka pašas C valodas aprakstā īpaši neiedziļināšos. Šim nolūkam ir vienkārši milzīgs daudzums materiālu, sākot no klasiskās “C programmēšanas valodas” no K&R līdz dažādām rokasgrāmatām.

Es atradu vienu šādu metodi savā krātuvē; reiz es to izmantoju, lai pētītu šo valodu. Tur viss ir īss, skaidrs un precīzs. Es to pakāpeniski salieku kopā un velku uz savu vietni.

Tiesa, visas nodaļas vēl nav pārsūtītas, bet domāju, ka tas nebūs ilgi.

Maz ticams, ka es to varēšu aprakstīt labāk, tāpēc no apmācības kursa tā vietā, lai sniegtu detalizētu informāciju par niansēm, es vienkārši sniegšu tiešas saites uz atsevišķām šīs rokasgrāmatas lapām.

Bibliotēku pievienošana.
Pirmkārt, mēs pievienojam nepieciešamās bibliotēkas un galvenes ar definīcijām. Galu galā C ir universāla valoda, un mums viņam jāpaskaidro, ka mēs strādājam tieši ar AVR, tāpēc ierakstiet rindiņu avota kodā:

1 #iekļauts

#iekļauts

Šis fails atrodas mapē WinAVR un tajā ir visu kontroliera reģistru un portu apraksts. Turklāt viss tur ir viltīgs, ar piesaisti konkrētam kontrolierim, ko kompilators pārraida caur veidot fails parametrā MCU un pamatojoties uz šo mainīgo, jūsu projektam ir pievienots galvenes fails ar visu šī konkrētā kontrollera portu un reģistru adrešu aprakstu. Oho! Arī bez tā tas ir iespējams, taču tad nevarēsit izmantot simboliskus reģistru nosaukumus, piemēram, SREG vai UDR, un jums būs jāatceras katra adrese, piemēram, “0xC1”, kas būs galvassāpes.

Pati komanda #iekļauts<имя файла> ļauj projektam pievienot jebkura teksta faila saturu, piemēram, failu ar funkciju aprakstu vai cita koda fragmentu. Un, lai direktīva varētu atrast šo failu, mēs norādījām ceļu uz mūsu projektu (WinAVR direktorijs jau ir reģistrēts tur pēc noklusējuma).

Galvenā funkcija.
C programma pilnībā sastāv no funkcijām. Tos var ligzdot un izsaukt vienu no otra jebkurā secībā un dažādos veidos. Katrai funkcijai ir trīs obligātie parametri:

  • Atgriešanas vērtība ir piem. grēks (x) atgriež x sinusa vērtību. Īsumā kā matemātikā.
  • Pārraidītie parametri ir tie paši X.
  • Funkciju korpuss.

Visām pārsūtītajām un atgrieztajām vērtībām ir jābūt noteikta veida atkarībā no datiem.

Jebkurā C programmā ir jābūt funkcijai galvenais kā ieejas punkts galvenajā programmā, pretējā gadījumā tas nemaz nav C :). Pēc galvenā klātbūtnes kāda cita avota kodā no miljons failiem, jūs varat saprast, ka šī ir galvenā programmas daļa, ar kuru viss sākas. Tātad jautāsim:

1 2 3 4 5 int main(void) (atgriež 0 ; )

int main(void) (atgriež 0; )

Tas arī viss, ir uzrakstīta pirmā vienkāršākā programma, nav svarīgi, ka tā neko nedara, mēs esam tikko sākuši.

Izdomāsim, ko mēs izdarījām.
starptŠis ir datu tips, ko atgriež galvenā funkcija.

Protams, mikrokontrollerī galvenais principā neko nevar atdot un teorētiski tam vajadzētu būt nederīgs galvenais (neesošs), bet GCC sākotnēji ir paredzēts personālajam datoram, un tur programma pēc pabeigšanas var atgriezt vērtību operētājsistēmai. Tāpēc GCC ieslēgts nederīgs galvenais (neesošs) zvēr pie Brīdinājuma.

Tā nav kļūda, tā darbosies, bet man nepatīk brīdinājumi.

nederīgsŠis ir datu veids, ko mēs nododam funkcijai, šajā gadījumā galvenais arī nevar pieņemt neko no ārpuses, tāpēc nederīgs- manekens. Stubs tiek izmantots, ja nekas nav jāpārraida vai jāatgriež.

Šeit tie ir { } cirtaini breketes ir programmas bloks, šajā gadījumā funkcijas pamatteksts galvenais, kods atradīsies tur.

atgriezties- šī ir atgriešanas vērtība, ko galvenā funkcija atgriezīs pēc pabeigšanas, jo mums ir int, tas ir, skaitlis, tad mums ir jāatgriež skaitlis. Lai gan tam joprojām nav jēgas, jo... uz mikrokontrollera, mēs varam tikai nekur no galvenā. Es atgriežu nulli. Jo tas nav svarīgi. Bet kompilators parasti ir gudrs un šim gadījumam kodu neģenerē.
Lai gan, ja perverss, tad no galvenais Varat doties uz MK - piemēram, iekļūt sāknēšanas ielādētāja sadaļā un izpildīt to, taču, lai labotu pārejas adreses, būs nepieciešama zema līmeņa programmaparatūra. Tālāk jūs redzēsiet pats un sapratīsit, kā to izdarīt. Par ko? Tas ir cits jautājums, 99.999% gadījumu tas nav nepieciešams :)

Mēs to izdarījām un devāmies tālāk. Pievienosim mainīgo, mums tas nav īsti vajadzīgs un bez tā nav jēgas ieviest mainīgos, bet mēs mācāmies. Ja funkcijas pamattekstā tiek pievienoti mainīgie, tie ir lokāli un pastāv tikai šajā funkcijā. Izejot no funkcijas, šie mainīgie tiek dzēsti un RAM atmiņa tiek piešķirta svarīgākām vajadzībām. .

1 2 3 4 5 6 int main(void) (neparakstīts char i; return 0;)

int main(void) ( neparakstīts char i; return 0; )

neparakstīts nozīmē neparakstīts. Fakts ir tāds, ka binārajā attēlojumā zīmei tiek piešķirts visnozīmīgākais bits, kas nozīmē, ka skaitlis +127/-128 iekļaujas vienā baitā (char), bet, ja zīmi atmet, tas ietilps no 0 līdz 255. Parasti zīme nav vajadzīga. Tātad neparakstīts.
i ir tikai mainīgais nosaukums. Vairāk ne.

Tagad mums ir jāinicializē porti un UART. Protams, jūs varat paņemt un savienot bibliotēku un izsaukt kaut kādu UartInit(9600); bet tad tu nezināsi, kas īsti notika.

Mēs to darām:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 int main(void ) ( unsigned char i; #define XTAL 8000000L #define baudrate 9600L #define bodu dalītāju (XTAL/(16*baudrate)-1)#define HI(x) ((x)>>8) #define LO(x) ((x)& 0xFF) UBRRL = LO(bauddalītājs) ; UBRRH = HI(bauddalītājs) ; UCSRA = 0; UCSRB = 1<< RXEN| 1 << TXEN| 1 << RXCIE| 0 << TXCIE; UCSRC = 1 << URSEL| 1 << UCSZ0| 1 << UCSZ1; }

int main(void) ( unsigned char i; #define XTAL 8000000L #define baudrate 9600L #define boddivider (XTAL/(16*baudrate)-1) #define HI(x) ((x)>>8) #define LO( x) ((x)& 0xFF) UBRRL = LO (bauddalītājs); UBRRH = HI (bauddalītājs); UCSRA = 0; UCSRB = 1<

Baisi? Faktiski ir tikai piecas pēdējās reālā koda rindas. Viss, tas #definēt tā ir priekšprocesora makro valoda. Gandrīz tādas pašas lietas kā Assembly, taču sintakse nedaudz atšķiras.

Tie atvieglos jūsu ikdienas nepieciešamo koeficientu aprēķināšanas operācijas. Pirmajā rindā mēs to sakām XTAL jūs varat droši aizstāt 8000000, un L- tipa norāde, sakot, ka garš ir procesora takts frekvence. Tas pats pārraides ātrumu— datu pārraides biežums, izmantojot UART.

bodu dalītājs jau sarežģītāk, tā vietā tiks aizstāta izteiksme, kas aprēķināta pēc formulas no divām iepriekšējām.
Nu un L.O. Un SVEIKI no šī rezultāta tiks ņemti zemie un augstie baiti, jo Acīmredzot tas var neietilpst vienā baitā. IN SVEIKI X (makro ievades parametrs) tiek pārvietots astoņas reizes pa labi, kā rezultātā paliek tikai nozīmīgākais baits. Un iekšā L.O. mēs veicam bitu UN ar numuru 00FF, kā rezultātā paliks tikai zemais baits.

Tātad viss, kas izdarīts, ir kā #definēt jūs varat to droši izmest un aprēķināt nepieciešamos skaitļus kalkulatorā un nekavējoties ievadīt tos rindās UBBRL = …. un UBBRH = .....

Var. Bet! Dari šo PILNĪGI NEIESPĒJAMI!

Darbosies tā vai tā, bet tev būs t.s burvju skaitļi- vērtības, kas ņemtas no nekurienes un nezināmu iemeslu dēļ, un, ja jūs atverat šādu projektu pēc pāris gadiem, būs sasodīti grūti saprast, kas tās ir. Arī tagad, ja vēlaties mainīt ātrumu, vai mainīt kvarca frekvenci, viss būs jāpārrēķina vēlreiz, bet jūs nomainījāt pāris ciparus kodā un viss. Kopumā, ja nevēlaties tikt apzīmēts kā kodētājs, izveidojiet savu kodu tā, lai tas būtu viegli lasāms, saprotams un viegli modificējams.

Tad viss ir vienkārši:
Visi šie “UBRRL un Co” ir UART raidītāja konfigurācijas reģistri, ar kuru palīdzību mēs sazināsimies ar pasauli. Un tagad mēs esam piešķīruši tiem vajadzīgās vērtības, iestatot tos vajadzīgajā ātrumā un režīmā.

Ieraksta veids 1< Nozīmē sekojošo: paņemiet 1 un ievietojiet to vietā RXEN baitā. RXENšis ir reģistra 4. bits UCSRB, Tātad 1< veido bināro skaitli 00010000, TXEN- šis ir 3. bits un 1< dos 00001000. Single "|" tas ir bitiski VAI, tātad 00010000 | 00001000 = 00011000. Tādā pašā veidā atlikušie nepieciešamie konfigurācijas biti tiek iestatīti un pievienoti vispārējai kaudzei. Rezultātā savāktais numurs tiek reģistrēts UCSRB. Sīkāka informācija ir aprakstīta MK datu lapā USART sadaļā. Tāpēc nenovērsīsim uzmanību no tehniskām detaļām.

Gatavs, laiks redzēt, kas noticis. Noklikšķiniet uz kompilācijas un sāciet emulāciju (Ctrl+F7).

Atkļūdošana
Cauri skrēja visādas progresa joslas, mainījās studija un pie galvenās funkcijas ieejas parādījās dzeltena bultiņa. Šeit pašlaik darbojas procesors, un simulācija ir apturēta.

Fakts ir tāds, ka sākotnēji tas bija rindā UBRRL = LO (bauddalītājs); Galu galā tas, kas mums ir definē, nav kods, bet vienkārši provizoriski aprēķini, tāpēc simulators ir nedaudz blāvs. Bet tagad viņš saprata, pirmā instrukcija ir izpildīta un ja jūs kāpt kokā I/O skats, uz USART sadaļu un paskatieties uz UBBRL baitu tur, redzēsiet, ka vērtība jau ir! 0x33.

Sniedziet to vienu soli tālāk. Skatiet, kā mainās otra reģistra saturs. Tāpēc apskatiet tos visus, pievērsiet uzmanību tam, ka visi norādītie biti ir iestatīti tā, kā es jums teicu, un tie tiek iestatīti vienlaikus visam baitam. Tas netiks tālāk par Atgriešanos - programma ir beigusies.

Atvēršana
Tagad atiestatiet simulāciju uz nulli. Noklikšķiniet tur Atiestatīt (Shift+F5). Atveriet izjaukto sarakstu, tagad redzēsit, kas patiesībā notiek kontrollerī. Skatīt -> Demontētājs. Un ne YYAAAAAA!!! Montētājs!!! ŠAUSMAS!!! UN TAS IR VAJAG. Lai vēlāk, kad kaut kas noiet greizi, tu nebūtu stulbs kodā un neuzdotu lamu jautājumus forumos, bet uzreiz iedziļināties iekšā un redzētu, kur esat iestrēdzis. Tur nav nekā biedējoša.

Vispirms būs topi no sērijas:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 +00000000: 940C002A JMP 0x0000002A Lēciens +00000002: 940C0034 JMP 0x00000034 Pārlēciens +00000004: 940C0034 JMP 0x000MP00603400MP0603 0x00000034 lēciens +00000008: 940C0034 JMP 0x00000034 lēciens +0000000A: 940C0034 JMP 0x00000034 lēciens +0000000C: 9400000C: 940 JMP000x 0000000E: 940C0034 JMP 0x00000034 Pārlēkt +00000010: 940C0034 JMP 0x00000034 Pārlēkt +00000012: 940C0034 JMP 0x000mp00C40:03400mp001403 0x00000034 lēciens +00000016: 940C0034 JMP 0x00000034 lēciens +00000018: 940C0034 JMP 0x00000034 lēciens +0000001A: 9400001A: Jump : 940C0034 JMP 0x00000034 Pārlēkt +0000001E: 940C0034 JMP 0x00000034 Pārlēkt +00000020: 940C0034 JMP 0x00000034 Pārlēkt 0x00000034 Pārlēkt 34 Lēciens +00000024: 940C0034 JMP 0x00000034 Lēciens +00000026: 940C0034 JMP 0x00000034 Lēciens +00000028: 940C0034 JMP 0x304

00000000: 940C002A JMP 0x0000002A Lēciens +00000002: 940C0034 JMP 0x00000034 Pārlēciens +00000004: 940C0034 JMP 0x000MP0060340000C40 0x00000034 Pārlēkt +00000008: 940C0034 JMP 0x00000034 Pārlēkt +0000000A: 940C0034 JMP 0x00000034 Pārlēkt +0000000C: Jump +0000000C: Jump : 940C0034 JMP 0x00000034 Pārlēkt +00000010: 940C0034 JMP 0x00000034 Pārlēkt +00000012: 940C0034 JMP 0x00000034 Pārlēkt +00000034 JMP 34 Lēciens +00000016: 940C0034 JMP 0x00000034 Lēciens +00000018: 940C0034 JMP 0x00000034 Lēciens +0000001A: 940C0034 JMP 0x0300 JMP 0x00300 : 940C0034 JMP 0x00000034 Pārlēkt +0000001E: 940C0034 JMP 0x00000034 Pārlēkt +00000020: 940C0034 JMP 0x00000034 Pārlēkt 0x00000034 Pārlēkt 34 Lēciens +00000024: 940C0034 JMP 0x00000034 Lēciens +00000026: 940C0034 JMP 0x00000034 Lēciens +00000028: 940C0034 JMP 0x304

Šī ir pārtraukumu vektoru tabula. Mēs pie tā atgriezīsimies vēlāk, bet pagaidām vienkārši paskatieties un atcerieties, ka tā pastāv. Pirmā kolonna ir zibatmiņas šūnas adrese, kurā atrodas komanda, otrā ir komandas kods, trešā ir komandas mnemonika, tā pati montāžas instrukcija, trešā ir komandas operandi. Nu automātiskais komentārs.
Tātad, ja paskatās, ir nepārtrauktas pārejas. Un JMP komandas kods ir četri baiti, tajā ir lēciena adrese, kas rakstīta atpakaļ - zemais baits zemajā adresē un lēciena komandas kods 940C

0000002B: BE1F OUT 0x3F, R1 Out uz I/O atrašanās vietu

Šīs nulles ierakstīšana adresē 0x3F. Ja paskatās uz I/O skata kolonnu, jūs redzēsit, ka adrese 0x3F ir SREG reģistra adrese - kontrollera karoga reģistrs. Tie. mēs atiestatām SREG, lai programmu palaistu nulles apstākļos.

1 2 3 4 +0000002C: E5CF LDI R28,0x5F Tūlītēja ielāde +0000002D: E0D4 LDI R29,0x04 Tūlītēja ielāde +0000002E: BFDE OUT 0x3E,R29 Izeja uz I/O atrašanās vietu +0000002F: BFCD uz I/O atrašanās vieta

0000002C: E5CF LDI R28,0x5F Tūlītēja ielāde +0000002D: E0D4 LDI R29,0x04 Tūlītēja ielāde +0000002E: BFDE OUT 0x3E,R29 Izeja uz I/O atrašanās vietu +0000002F: BFCD uz I/O atrašanās vieta

Tiek ielādēts steka rādītājs. Jūs nevarat tieši ielādēt I/O reģistros, tikai caur starpreģistru. Tāpēc vispirms LDI uz starpproduktu un pēc tam OUT uz I/O. Vēlāk arī pastāstīšu vairāk par steku. Pagaidām ziniet, ka šī ir dinamiska atmiņas apgabals, kas karājas RAM beigās un saglabā adreses un starpposma mainīgos. Tagad mēs esam norādījuši, no kurienes sāksies mūsu kaudze.

00000032: 940C0041 JMP 0x00000041 Pārlēkt

Pārejiet uz pašām programmas beigām, un tur ir aizliegts pārtraukt un cieši cilpot sevi:

1 2 +00000041: 94F8 CLI globālā pārtraukuma atspējošana +00000042: CFFF RJMP PC-0x0000 Relatīvais lēciens

00000041: 94F8 CLI globālā pārtraukuma atspējošana +00000042: CFFF RJMP PC-0x0000 Relatīvais lēciens

Tas notiek neparedzētu apstākļu gadījumā, piemēram, aizejot no galvenās funkcijas. Kontrolieri var izņemt no šādas cilpas, veicot aparatūras atiestatīšanu vai, visticamāk, atiestatot no sargsuņa. Nu, vai, kā jau teicu iepriekš, izlabojiet to hex redaktorā un dodieties uz turieni, kur vien mūsu sirds vēlas. Ņemiet vērā arī to, ka ir divu veidu pārejas: JMP un RJMP; pirmā ir tieša pāreja uz adresi. Tas aizņem četrus baitus un var tieši pāriet pa visu atmiņas apgabalu. Otrs pārejas veids ir RJMP – relatīvs. Viņa komanda aizņem divus baitus, bet viņš pārvietojas no pašreizējās pozīcijas (adreses) 1024 soļus uz priekšu vai atpakaļ. Un tā parametri norāda nobīdi no pašreizējā punkta. To lieto biežāk, jo vienā līmenī aizņem pusi vietas, un reti ir vajadzīgas garas pārejas.

1 +00000034: 940C0000 JMP 0x00000000 lēciens

00000034: 940C0000 JMP 0x00000000 Pārlēkt

Un tas ir lēciens uz koda sākumu. Sava veida atsāknēšana. Šeit varat pārbaudīt, vai visi vektori pārlec. Secinājums no tā ir tāds, ka, ja jūs tagad iespējojat pārtraukumus (pēc noklusējuma tie ir atspējoti) un jūsu pārtraukums notiek, bet nav apstrādātāja, tad notiks programmatūras atiestatīšana - programma tiks atgriezta pašā sākumā.

Galvenā funkcija. Viss ir līdzīgi, pat nevajag to aprakstīt. Paskatieties, kā jau aprēķinātais skaitlis tiek ievadīts reģistros. Kompilatora priekšprocesors satriec!!! Tātad bez "maģiskiem" skaitļiem!

1 2 3 4 5 6 7 8 9 10 11 12 <

00000036: E383 LDI R24,0x33 Tūlītēja ielāde +00000037: B989 OUT 0x09,R24 Out uz I/O vietu 15: UBRRH = HI (bauddalītājs); +00000038: BC10 OUT 0x20,R1 Out uz I/O vietu 16: UCSRA = 0; +00000039: B81B OUT 0x0B,R1 Out uz I/O vietu 17: UCSRB = 1<

Un šeit ir kļūda:

1 2 3 +0000003E: E080 LDI R24.0x00 Tūlītēja ielāde +0000003F: E090 LDI R25.0x00 Tūlītēja ielāde +00000040: 9508 RET Apakšprogrammas atgriešana

0000003E: E080 LDI R24.0x00 Tūlītēja ielāde +0000003F: E090 LDI R25.0x00 Tūlītēja ielāde +00000040: 9508 RET Apakšprogrammas atgriešana

Jautājums, kāpēc kompilators pievieno tādus topus? Un tas nav nekas vairāk kā Return 0, funkciju definējām kā int main(void) un tā mēs velti iztērējām vēl četrus baitus :) Un ja uztaisīsi void main(void) tad paliks tikai RET, bet parādīsies brīdinājums , ka mūsu galvenā funkcija neko neatgriež. Vispār dari kā gribi :)

Grūti? Acīmredzot nē. Noklikšķiniet uz soli pa solim izpilde disassembler režīmā un skatiet, kā procesors izpilda atsevišķas instrukcijas, kas notiek ar reģistriem. Kā notiek kustība caur komandām un galīgā cilpa?

Turpinājums pēc pāris dienām...

Ārpus augšpusē:
Aleksejs78 Es izveidoju Firefox spraudni, kas atvieglo navigāciju manā vietnē un forumā.
Diskusija un lejupielāde,

Atmel Studio ir integrēta izstrādes platforma, kas nodrošina iespēju izstrādāt un atkļūdot lietojumprogrammas, kas izstrādātas Atmel mikrokontrolleriem, pamatojoties uz ARM Cortex-M sērijas procesoru arhitektūru. Atmel Studio ir viengabalaina, ērti lietojama vide, kas nodrošina iespēju atkļūdot un veidot lietojumprogrammas, kas izveidotas C/C++ vai montāžas valodā. Tajā ir iebūvēta apjomīga absolūti bezmaksas Atmel Software Framework pirmkoda bibliotēka, kas ietver vairāk nekā 1600 projektus ARM un AVR arhitektūrām. Šādas bibliotēkas esamība ir lielisks bonuss jebkuram programmētājam. Šo IDE var izmantot, lai programmētu dažādus uz AVR balstītus mikrokontrollerus, kā arī uz Atmel SAM3 balstītus zibatmiņas mikrokontrollerus, kas izmanto Cortex-M3, Cortex-M4 kodolus.

Atmel Studio ietver arī rīkus, kas ievērojami atvieglos jebkura programmētāja dzīvi. Platformā ir iekļauti tādi risinājumi kā Atmel Spaces un Atmel Gallery. Atmel Gallery ir izstrādes rīku un integrētas programmatūras tiešsaistes veikals. Atmel Spaces ir uz mākoņiem balstīta telpa, kas paredzēta Atmel mikrokontrolleru aparatūras un programmatūras projektu failu kopīgai izstrādei un glabāšanai.

Galvenās funkcijas un funkcijas

  • ir pilnīgi bezmaksas integrēta izstrādes vide;
  • atbalsta C/C++ un Assembler valodas;
  • kopā ar detalizētu dokumentāciju;
  • ietver plašu bibliotēku ar pirmkoda piemēriem dažādām lietojumprogrammām;
  • paredzēts Atmel mikrokontrolleru programmēšanai.

Īpašas prasības

  • procesora takts frekvence 1,6 GHz un augstāka;
  • 32 bitu sistēmām no 1 GB RAM;
  • 64 bitu sistēmām no 2 GB RAM;
  • darbojoties virtuālajā mašīnā, ieteicams papildus 512 MB RAM;
  • 6 GB brīvas vietas cietajā diskā.

Kas jauns šajā versijā?

7.0.790 (25.02.2016)

  • pievienots atbalsts paplašinātajam atkļūdotājam (EDBG);
  • pievienots interfeisa iestatījumu profilu atbalsts. Varat pārslēgties starp profiliem, izmantojot iestatījumu paneļa taustiņus;
  • pievienoja iespēju importēt bibliotēkas iepriekš importētajos projektos. Pievienots atbalsts Arduino Zero un Zero Pro;
  • Paralēlā veidošana tagad ir iespējota pēc noklusējuma;
  • atjaunināta programmaparatūra Xplained Mini;
  • Solution Explorer funkcija "Rādīt visus failus" ir novērsta.