[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