Elektronika.lt
 2025 m. sausio 14 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

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 01 14, 16:48. Visos datos yra GMT + 2 valandos.
 Forumas » Mikrovaldikliai » Lentelės adreso perdavimas funkcijai naudojant AVR-GCC
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
 
  
Puslapis 11
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 Lentelės adreso perdavimas funkcijai naudojant AVR-GCC
PranešimasParašytas: 2006 06 30, 09:27 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Dreifas
Moderatorius
Moderatorius
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje ICQ numeris
Na turiu tokį specifinį klausimą AVR GCC žinovams.
Saugau duomenų lentelę flach atmintyje:

Kodas:
const uint8_t sinewave[] PROGMEM= //256 values
{
0x80,0x83,0x86,0x89,0x8c,0x8f,.....


Po to talentelę nuskaitau su funkcija:.

Kodas:
void signalOUT1(const uint8_t *signal)
{
   uint8_t i=0;
   do{
   PORTD=pgm_read_byte(&signal[i++]);
   }while(1);
}


Sukompiliuoju programą ir žiūriu į listingą. Pasirodo lentelės adreso rodyklė funkcijai yraperduodama per registrus r24 ir r25:


Kodas:
2738 05b6 80E0            ldi r24,lo8(sinewave)
 2739 05b8 90E0            ldi r25,hi8(sinewave)
 2740                  .L150:
 2741 05ba 99DD            rcall signalOUT



Tada pačioj funkcijoj singnalOUT r24 ir r25 reikšmės yra persiunčiamos adresų rodyklei Z su komanda movw r30,r24.
Klausimas. Kodėl funkcijai programa neperduoda rodyklės adreso per Z registrų porą, nes savo programoje noriu naudoti inline ASM, kur parametrus pasiima prie kintamojo pririštas Z registras. Pagal Avrlibc bibliotekos tutorialus “e”(signal) priskyrimas turėtų perduoti signal rodyklę registrų porai r30 ir r31 bet kazkodel taip near. Todel mano sekanti funkcija neveikia kaip as noriu:

Kodas:
void signalOUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)
{
asm volatile("eor r28, r28    ;r28<-0"   "\n\t"
      "eor r29, r29    ;r29<-0"   "\n\t"
      "1:"               "\n\t"
      "add r28, %0   ;1 cycle"         "\n\t"
      "adc r29, %1   ;1 cycle"         "\n\t"   
      "adc %A3, %2   ;1 cycle"         "\n\t"
      "lpm __tmp_reg__, %a3+   ;3 cycles" "\n\t"
      "out %4, __tmp_reg__   ;1 cycle"   "\n\t"
      "rjmp 1b      ;2 cycles. Total 9 cycles"   "\n\t"
      :
      :"r" (ad0),"r" (ad1),"r" (ad2),"e" (signal),"I" (_SFR_IO_ADDR(PORTD))
      :"r28", "r29"
   );
}

Tai vat sakau gal kas susidūrė su kažuo panašaus. Ar čia bugas koks ar ka nors pražiūrėjau…
Dekui
 Lentelės adreso perdavimas funkcijai naudojant AVR-GCC
PranešimasParašytas: 2006 06 30, 15:05 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Dreifas
Moderatorius
Moderatorius
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje ICQ numeris
kaip sakant gal kitiems pravers kada....

Nu ka susitvarkiau. Pasirodo naudojant Static Inline funkcija privercia kompiliatoriu optimizuoti koda, tada rodyklės adresas perduodams tiesiai R30 ir R31 (Z) registru porai.

Kitaip tariant:
Kodas:
void static inline signalOUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0);

generuoja ASM:
Kodas:
 2652 0568 E0E0            ldi r30,lo8(sinewave)
 2653 056a F0E0            ldi r31,hi8(sinewave)


toliau jau mano inline ASM kodas jau zino ka daryti Wink
Pradėti naują temą  Atsakyti į pranešimą
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

Global electronic components distributor – Allicdata Electronics

Electronic component supply – „Eurodis Electronics“

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Full feature custom PCB prototype service

Sveiki ir ekologiški maisto produktai

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

Technologijos.lt

Buitinė technika ir elektronika internetu žemos kainos – Zuza.lt

www.esaugumas.lt – apsaugok savo kompiuterį!

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

Draugiškas internetas

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
LEGO
Mänguköök, mudelautod, nukuvanker
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope
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
GTA 6 Weapons
GTA 6 Characters, GTA 6 Map, GTA 6 Vehicles
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps
ATS Trailers
American Truck Simulator Mods, ATS Trucks, ATS Maps
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Script hook v, Openiv, Menyoo
gta5mod.net
FS25 Mods, FS25 Tractors, FS25 Maps
fs25mods.lt
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
Reklamos paslaugos
SEO sprendimai

www.addad.lt
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
FS22 mods, Farming simulator 22 mods,
FS22 maps

fs22.com
Reklama


Reklama