[elektro] C kérdés
hg12345
hg12345 at freemail.hu
Wed Mar 17 19:30:24 CET 2010
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]
More information about the Elektro
mailing list