Hi all,

I´ve been trying to implement TDC(time delay close) and TDO (time delay open) 
contact relays into pic program and I am facing some trouble that I need to 
clarify. I am working with pic 16f877a and SDCC 3.6. I´m not an assembler 
programmer only C programmer.

What my program need to do.
It need to charge datas asynchronous event time into an array of timer event 
structures, sequences it, and order fastest event to slowest and change output 
relay into right time. I plan to use only one  pic timer to do this and I can 
have until 6 time contact relays.

1st) About struct
I created a typedef struct tmrevent that holds 5 int members to hold TMR1H, 
TMR1L, overflowtimertimes and another int datas. Into Gcc this array could be 
done like this:

Typedef struct tmrevent {
int member1;
int member2;
...
int member;
};

tmrevent  tv[4];

this code in Gcc works fine and I have an array of tmrevent struct with 4 
structs. But in SDCC this code compiles but doesn't link. Why?
Is there another way to define an array of structs in SDCC? Could you tell me 
pls?

2nd) If I address only one struct my code works but I must declare it like an 
array like below and only one array element is possible to use. My sdcc 
installation doesn´t have MALLOC.H header file to declare a space to hold many 
struct in a pointer.

__at(0x0020) tmrevent tv[]; // compiles and linker but only one element works

3rd) I read sdcc 3.6.1 manual item 3.1.1 (only this item talk about structures 
in manual ) but I can´t clarify much about how structs could be declare with 
sdcc. Could you inform some book or tutorial that cover this subject. I will 
appreciate a lot.

4th) I did a test declaring many separate timer event structs addressing 
directly all of them respecting GPIO addressable memory. I try to use more than 
a memory bank and another problem occurs. It seems bank 1 is mirrored of bank 
0. I found some posts that tell about this condition but none explain how to 
use direct address to write member structs in the correct bank. For example if 
I declare a struct in address 0x0020 (first gpio in bank 0 ) the code works 
fine. If I declare this struct into address 0x00A0 (first gpio in bank 1) 
sometimes the code works sometimes don´t. What could be? It seems when program 
counter is on bank 1 or bank 2 or 3 and interrupt overflow time occurs data 
that will be record in bank 0 isn´t correctly write. But in SDCC I didn´t find 
any example to solve this doubt.

I will appreciate a lot some answer.

Thank you all

Ubirajara Marques da Cruz
Email: birac...@cemig.com.br<mailto:birac...@cemig.com.br>

As informações contidas nesta mensagem e nos arquivos anexados são para uso 
exclusivo do destinatário aqui indicado e podem conter assuntos comerciais, de 
propriedade intelectual ou outras informações confidenciais, protegidas pelas 
leis aplicáveis. É expressamente proibido o uso não autorizado ou a 
disseminação desta mensagem ou parte dela. Caso não seja o destinatário 
correto, por favor, notifique o remetente.
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to