 |

|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 07 13, 17:45. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » AVR studio crashinasi
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
 |
 |
 |
AVR studio crashinasi |
Parašytas: 2009 05 23, 15:47 |
|
|
|
Na situacija tokia gan įdomi. Į x64 WinXP instaliuota AVR studio v4.16. Taip pat instaliuotas naujausias WinAVR su GCC..
AVR studio pasileidžia, veikia gerai. Sukompiliavus programą ir paleidus simuliatorių jis veikia, tačiau daug žingsnių tiesiog peršokinėja (naudoju "step into"). Sustabdžius simuliatorių ("Stop Debugging") dalį sekundės pasimato kaip simuliatorius išsijungia ir AVR studio persijungia į normalią programavimo aplinką, tačiau viskas iškart išsijungia. T.y. AVR studio langas tiesiog dingsta. Šitaip nutinka beveik kiekvieną kartą stabdant simuliatorių.
Sumečiau naujausią AVR studio SP - nepadėjo.
Sumečiau naujausią WinAVR RC versiją - nepadėjo.
Kur bėda?
P.S. Kaip priversti kompiliatorių neišmesti savo parašytų loop funkcijų?
Kodas: |
unsigned char delay100(void)
{
unsigned char bla1, bla2;
for(bla1=0;bla1<255;bla1++)
{
for(bla2=0;bla2<100;bla2++);
}
return 1;
} |
Į šią funkciją programa kreipiasi kelis šimtus kartų, tačiau kompiliatoriui tai nė motais - ją tiesiog išmeta. Problemą išsprendžia visiškas optimizavimo išjungimas, tačiau tai nėra geriausias sprendimas - ir taip jau tragiškai juokingai tas kompiliatorius dirba. Pvz.:
Kodas: |
50: store|=(data<<3)&0b10001000;
+000000CD: 818A LDD R24,Y+2 Load indirect with displacement
+000000CE: 2F88 MOV R24,R24 Copy register
+000000CF: E090 LDI R25,0x00 Load immediate
+000000D0: 0F88 LSL R24 Logical Shift Left
+000000D1: 1F99 ROL R25 Rotate Left Through Carry
+000000D2: 0F88 LSL R24 Logical Shift Left
+000000D3: 1F99 ROL R25 Rotate Left Through Carry
+000000D4: 0F88 LSL R24 Logical Shift Left
+000000D5: 1F99 ROL R25 Rotate Left Through Carry
+000000D6: 2F98 MOV R25,R24 Copy register
+000000D7: 7898 ANDI R25,0x88 Logical AND with immediate
+000000D8: 8189 LDD R24,Y+1 Load indirect with displacement
+000000D9: 2B89 OR R24,R25 Logical OR
+000000DA: 8389 STD Y+1,R24 Store indirect with displacement |
Štai kaip sugeba sukompiliuoti vieną eilutę...... O tai galima būtų padaryti per max. 7 ciklus.
Arba va šitas iš vis tragedija:
Kodas: |
13: DDRA= 0b11111111;
+00000059: E2E1 LDI R30,0x21 Load immediate
+0000005A: E0F0 LDI R31,0x00 Load immediate
+0000005B: EF8F SER R24 Set Register
+0000005C: 8380 STD Z+0,R24 Store indirect with displacement
14: PORTA= 0b00000000;
+0000005D: E2E2 LDI R30,0x22 Load immediate
+0000005E: E0F0 LDI R31,0x00 Load immediate
+0000005F: 8210 STD Z+0,R1 Store indirect with displacement
16: DDRB= 0b00010011;
+00000060: E2E4 LDI R30,0x24 Load immediate
+00000061: E0F0 LDI R31,0x00 Load immediate
+00000062: E183 LDI R24,0x13 Load immediate
+00000063: 8380 STD Z+0,R24 Store indirect with displacement
17: PORTB= 0b11101000;
+00000064: E2E5 LDI R30,0x25 Load immediate
+00000065: E0F0 LDI R31,0x00 Load immediate
+00000066: EE88 LDI R24,0xE8 Load immediate
+00000067: 8380 STD Z+0,R24 Store indirect with displacement
19: DDRC= 0b11000000;
+00000068: E2E7 LDI R30,0x27 Load immediate
+00000069: E0F0 LDI R31,0x00 Load immediate
+0000006A: EC80 LDI R24,0xC0 Load immediate
+0000006B: 8380 STD Z+0,R24 Store indirect with displacement
20: PORTC= 0b00111111;
+0000006C: E2E8 LDI R30,0x28 Load immediate
+0000006D: E0F0 LDI R31,0x00 Load immediate
+0000006E: E38F LDI R24,0x3F Load immediate
+0000006F: 8380 STD Z+0,R24 Store indirect with displacement
22: DDRD= 0b11110010;
+00000070: E2EA LDI R30,0x2A Load immediate
+00000071: E0F0 LDI R31,0x00 Load immediate
+00000072: EF82 LDI R24,0xF2 Load immediate
+00000073: 8380 STD Z+0,R24 Store indirect with displacement
23: PORTD= 0b00000000;
+00000074: E2EB LDI R30,0x2B Load immediate
+00000075: E0F0 LDI R31,0x00 Load immediate
+00000076: 8210 STD Z+0,R1 Store indirect with displacement
24: }
+00000077: 91CF POP R28 Pop register from stack
+00000078: 91DF POP R29 Pop register from stack
+00000079: 9508 RET Subroutine return |
O dar kažkas rimtu veidu įtikinėjo, kad C kodas veikia optimaliai.... |
|
|
|
|
 |
 |
Re: AVR studio crashinasi |
Parašytas: 2009 05 23, 20:37 |
|
|
|
Kodas: |
unsigned char delay100(void)
{
unsigned char bla1, bla2;
for(bla1=0;bla1<255;bla1++)
{
for(bla2=0;bla2<100;bla2++);
}
return 1;
} |
šitą vietą išoptimizuoja, nes ji nieko nedaro (kompiliatorius geriau žino ko tau reikia )
šiaip naudok delay_us(), arba iš jos išsitrauk kaip išjungti optimizaciją.
tie likę kodo pavyzdžiai su įjungta ar išjungta optimizicija? spėju kad išjungta, todėl ir padaro brudą
dėl lūžimų, gal 64bit OS bėda  |
|
|
|
|
|
 |
Google paieška forume |
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
 |
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
 |
Football Training Kit
Football Training Equipment,
Football Skills,
Football Training |
|

|
 |