Hey hol
Jeg har i kedsomhed kastet mig over at skrive noget indlejret software til en mikroprocessor. Jeg har skaffet mig et demoboard til en Renesas RL78 og bruger IAR Embedded Workbench + E1 debugger til at lege med det :)
Jeg har hentet noget demo-kode, som kan få LEDerne på boardet til at blinke. Det, der nu undrer mig, er hvordan timeren fungerer.
I r_globals.c er der defineret:
uint32_t loop_counter;
volatile __saddr uint16_t tick_10ms;
volatile __saddr struct {
uint16_t extP0_flag:1;
uint16_t TM00_flag:1; ...
Hvorefter der i main.c findes:
if ((tick_10ms % PERIOD_1SEC) == 0x00 ){
LED01 = ~LED01; // toggle LED01
}
Det lader til, at tick_10ms tæller op 100 gange i sekundet. Men hvordan hulen er bindingen mellem prædikatet tick_10ms og det register, der tæller op?
Betyder "__saddr" et bestemt register, og hvordan finder man ud af, hvilket register, der bliver snakket om?
Og hvad er betydningen af, at der er to linjer:
volatile __saddr uint16_t tick_10ms;
volatile __saddr struct {....
Først benævner man __saddr med "tick_10ms" og bagefter laver en struct?
Jeg er en smule forvirret. Nogen, der er skarpe i embedded C ? :)
--