[elektro] C kérdés
hg12345
hg12345 at freemail.hu
Wed Mar 24 10:40:02 CET 2010
Köszönöm, sikerült.....
"Lukács Ákos" <lukrskywalkman at gmail.com> írta:
>avr_gcc-ben van egy ISR_ALIAS(vector, target_vector) nevű makró, amivel
>elvileg pont ezt lehet megcsinálni.
>Nem kizárt, hogy más fordítók is tudnak ilyeneket.
>
>2010/3/23 hg12345 <hg12345 at freemail.hu>
>
>> Szia!
>>
>> Ennél összetettebb a probléma, egy TIMER és CAPTURE kell egyszerre
>> lekezelni, a program jelentős része közös, most sok ugrálást tartalmaz.
>> a kód méretét szeretném kicsiben tartani. (kb 80-150 C sor). Első
>> nekifutásra egy subrutint hívott, de itt 8 általános célú regiszter mentése
>> nem tetszett. (Arra még nem jöttem rá, hogyan tudom megmondani a fordítónak,
>> hogy az adott subrutin melyik regisztereket használja)
>>
>> Én megértem a f(ordító) program fejlesztőket, hogy szeretnének minél több
>> féket elhelyezni a hibák kikűszöbölésére. Inkább tanítani kéne....
>>
>> Tökéletes megoldás nincs, de "__preprologue__" már használható eredményt
>> ad.
>>
>> A legszörnyűbb az, hogy ez ASM-ben egy sor, C-ben még megoldhatatlan....
>>
>>
>> <elektro at tesla.hu>, ezt írta:
>>
>> Helló!
>>
>> Most jutott eszembe: makró nem jó neked? Vagy kicsinek meg gyorsnak is kell
>> lennie? :)
>>
>> Üdv,
>> Lajos
>>
>> 2010/3/17 hg12345 <hg12345 at freemail.hu>
>>
>> > Elnézést küldés után a WEBMAIL szerkesztő kiveszi a sortördelést :-( Ez
>> nem
>> > 8 bites variáns, hanem 16 bites, ezért a IT kezelője egy kicsit
>> összetettebb
>> > mint a 8 biteseké inkább a 32 bitesekhez hasonlít. Több 100 IT vektor van
>> a
>> > kód memória elején, ez még nem lenne probléma. Az IT megírása C-ben itt
>> már
>> > nem akkora probléma mint a 8 bites eszközöknél, optimalizált esetben elég
>> jó
>> > minőségű kódot generál, a hordozhatóság miatt maradnék a C-nél.Tudom nem
>> egy
>> > gyakori probléma, hogy két teljesen eltérő IT forrásból jó megszakítást
>> kell
>> > egy azonos programmal feldolgozni, de van ilyen. Erre a programra
>> (rutinra)
>> > kéne két IT vektort beállítani. A linkerscript-ben a nevek feltételezve
>> > vannak, ha nem az előre elképzelt nevet használod, akkor a DEFAULT IT
>> > vektorral helyettesíti. (Így nem kell 114db nem használt IT rutin
>> > definiálni :-().A gyári linkerscripthez nem akarok hozzányúlni, de ezt a
>> > rész nem tudom hogyan lehet egy saját előzőleg futtatott linkerscipttel
>> > felülírni. Marad az a C és az ASM. C-ben : void
>> > __attribute__((interrupt,no_auto_psv, )) _T2Interrupt(void) {......};void
>> > __attribute__((interrupt,no_auto_psv, )) _T3Interrupt(void); Én semmi
>> mást
>> > nem szeretnék, csak a T3 It-nek ne legyen teste csak címe és az azonos
>> > legyen a T2 rutinéval.Na ez ahol szerény C tudásom elvérzik. Nekem nem
>> > sikerült a következő megadás void __attribute__((interrupt,
>> > address(_T2Interrupt))) _T3Interrupt(void); elvileg így lehetni egy
>> címet
>> > megadni, de az interrupt-tal együtt nem működik, vagy rosszul használom.
>> Ha
>> > írók egy közös szubrutint mint egy lehetséges megoldás, akkor bizony az
>> IT
>> > latency megnő, ráadásul ezek a rendszer ben a legmagasabb
>> piorításúak..... A
>> > szubrutin hívás miatt a 8 általános regisztert elnyomja a stackre.....
>> Másik
>> > lehetőség amit a C megenged, hogy ez IT-ből meghívom szubrutinként a
>> másik
>> > IT-t, erre még nem is kiabál, de korrekten mind a 8 általánosan használt
>> > regiszter nagy sietségben elteszi a stackre. Sajnos az optimalizáció
>> ezekre
>> > nincs felkészítve, ezek kód részletek ha kell ha nem, benne maradnak. ASM
>> > nem találtam olyan parancsot, hogy egy egy globál definiciójú nevet egy
>> > extern definicójú névvel azonos címre állítsak. Jelenleg itt tartok.
>> Üdv
>> > .
>> >
>> > "Gál Zsolt" <tralitoverin at gmail.com> írta:
>> > >Hát... elég zavaros számomra a kérdés, de azért annyit csak írok hozzá,
>> > hogy
>> > >talán nem kellene ennyire belebonyolódni.
>> > >Ha jól értem, akkor valamilyen PIC-ről méghozzá 18-as sorozatról írsz.
>> Én
>> > az
>> > >SDCC-t használtam eddig és ott arra jöttem rá, hogy a megszakítási
>> rutint
>> > >érdemes inkább asm-be megírni. Szóval én azt javasolnám. Aztán majd
>> > >összelinkeled az objektumokat.
>> > >
>> > >2010/3/17 hg12345 <hg12345 at freemail.hu>
>> > >
>> > >> Hi! Hogyan lehet egy meghatározott függvényhívási, interrupt névhez
>> > >> érvényes definiciót és címet generálni?A nevek a linkerscriptben már
>> > >> leírtak, ha nincsenek definiálva akkor DefaultIT helyettesítődnek.Ehez
>> a
>> > >> részhez nem szeretnék hozzá nyúlni. Az függvény/IT -t definiálnám és
>> > >> megírnám ez egyik név alatt, a másikat meg ehhez hozzárendelném.
>> > Definiálnám
>> > >> a nevet és a címet! Az ami nem megy, C forrás szinten (GNU C variáns
>> > MPLAB
>> > >> C30). pl.: IT1 és IT2 linkerscriptben ide használt nevek ettől nem
>> > lehet
>> > >> eltérni.... void __attribute__((interrupt,no_auto_psv)) _IT1(void){
>> > >> //feldolgozó program} ez nem müködik:void
>> > >> _-attribute__((interrupt,address(_IT1) _IT2(void); Ez megoldható
>> C-ben?
>> > >> -----------------------------------------
>> > >> elektro[-flame|-etc]
>> > >>
>> > >
>> > >
>> > >
>> > >--
>> > >~~~~~~~~~~~~~~~~
>> > >http://galzsolt.zzl.org
>> > >-----------------------------------------
>> > > elektro[-flame|-etc]
>> > -----------------------------------------
>> > elektro[-flame|-etc]
>> >
>> -----------------------------------------
>> elektro[-flame|-etc]
>>
>> -----------------------------------------
>> elektro[-flame|-etc]
>>
>-----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list