[elektro] C kérdés
Lajos Rancz
lajos.rancz at gmail.com
Mon Dec 20 09:14:09 CET 2010
Hello!
Asszem kicsit más nyelvet beszélünk, de megoldjuk :)
(1. Már hogy ne lenne, const-ra mutató pointer van, #define-ra (érték)-re
nincs)
Kezdem érteni, hogy mit akarsz. Én így csinalnám:
controller1.c:
#include "controller1.h" // gyari header
short * controller1_ptrs[] = {
....
}
controller2.c:
#include "controller2.h" // gyari header
short * controller2_ptrs[] = {
....
}
controllern.c:
#include "controllern.h" // gyari header
short * controllern_ptrs[] = {
....
};
controllers.c:
extern short* controller1[];
extern short* controller2[];
short ** controllers[] = {
controller1,
controller2,
....
controllern
};
A trükk, hogy minden controllerx c fájlban egy adott kontrollerhez tartozó
header van beinkludolva, így az annak megfelelő pointer értékek lesznek a
táblában. Utána a táblákat összefogod egy nagy táblában (short pointerre
mutató pointer).
Üdv,
Lajos
2010/12/19 hg12345 <hg12345 at freemail.hu>
> Szia!
>
> Köszönöm, hogy segíteni próbálsz.
>
> Mint sejtettem, sajnos ez a megoldás se tökéletes :-(
> 1, a #define és a konstans között nincs semmi különbség, mert az
> elöfeldolgozó még fordítás elött a valódi értékeket előállítja
> 2, sajnos igy értéket adni egy struktura tömbre mutató pointernek nem
> lehet, mert struktura tömbre mutató pointer castolást igényel.... a sima
> mezei konstans nem emészti.
> 3, a fentiek miatt az eredmény ugyan az.
>
> Ez a megoldás nem volt szimpatikus, a kód hordozhatóságát nem segíti elő,
> más eszköz esetén ez elképzelhető más perifériához kapcsolódik... Amit
> kiítam az csak a kód lényeges része, több periféria előválasztó tartalmaz.
>
> Szerintem a hiba leginkább a linker butaságára vezethető vissza amikor nem
> képés két pointer összadni, csak pointer + konstans müveltet ismer. (A GNU-c
> leginkább ilyenkor kiabált)...
>
> De minden ötletre kiváncsi vagyok.....
>
>
>
> Info <info at kiralyelektronika.hu> írta:
> >Szia !>
> >
> > TIM_TypeDef *TIMbase = TIMbaseAddr; //Én globál változóként>
> > használom, és müködik a programban.>
> > ..\HWlayer\It_TimerBase.c(97): error: #28: expression must have a>
> > constant value>
> >
> Naszal, innentől nem adhatod meg konstansnak, csak #define.>
> Vagy ezt alakítod át #define, aztán lehet konstans.>
> >
> Most tehát ez van:>
> TIM_TypeDef *TIMbase = 0x40000000;>
> >
> >
> Ez a sor nem kell:>
> TIM_TypeDef *TIMbase = TIMbaseAddr;>
> >
> Ezt pedig így:>
> #define HwPwm1Reg (TIMbaseAddr.CCR2)>
> #define HwPwm2Reg (TIMbaseAddr.CCR3)>
> #define HwPwm3Reg (TIMbaseAddr.CCR1)>
> >
> >
> ----------------------------------------->
> elektro[-flame|-etc]>
>
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list