Hallo,
also ich weiß nicht mehr recht weiter. Ich glaube ich habe Probleme mit
meinen externen Variablen. Irgendwie überschreibe ich dem Prozessor
immer was im Speicher. Hier einfach mal ein paar Codeschnippsel:
1 | /*in main.c*/
|
2 | //globale variablen
|
3 | can_messageblock_struct *repeat_blocks = 0;
|
4 | can_messageblock_struct *shot_blocks = 0;
|
5 |
|
6 | /*in canmessages.h*/
|
7 | typedef struct{
|
8 | uint16_t time;
|
9 | uint16_t address;
|
10 | uint8_t datalength;
|
11 | uint8_t *data;
|
12 | }can_message_struct;
|
13 |
|
14 | typedef struct{
|
15 | can_message_struct *message;
|
16 | uint16_t blockposition;
|
17 | uint16_t blocklength;
|
18 | uint16_t prevtime;
|
19 | }can_messageblock_struct;
|
20 |
|
21 | extern can_messageblock_struct *repeat_blocks;
|
22 | extern can_messageblock_struct *shot_blocks;
|
23 |
|
24 | /*in canmessages.c*/
|
25 | //irgendwo in ner Funktion (mit Beispiel 10)
|
26 | repeat_blocks = malloc(10 * sizeof(can_messageblock_struct));
|
27 | //... Speicher reservieren für jede Nachricht
|
28 | repeat_blocks[repeatindex].message = malloc(sizeof(can_message_struct)*20);
|
29 | //... Zugreifen tue ich dann in etwa so:
|
30 | repeat_blocks[repeatindex].blockposition= 0;
|
31 | //... die Messages lasse ich von einer Funktion eintragen
|
32 | can_create_message(msgbuff, &repeat_blocks[repeatindex]);
|
33 |
|
34 | //die Funktion can_create_message
|
35 | int can_create_message_block(unsigned char *msgbuff, can_messageblock_struct *message_block)
|
36 | //... soetwas scheint noch zu funktionieren
|
37 | message_block->message[blockposition].time = num16buff;
|
38 | message_block->message[blockposition].datalength = num16buff;
|
39 | //... aber hier kann kein Speicher mehr reserviert werden
|
40 | message_block->message[blockposition].data = malloc(sizeof(uint8_t) * message_block->message[blockposition].datalength);
|
Irgendwas ist da doch faul, oder? Als µC nutze ich eien AT90CAN128.
Evtl noch nützliche Infos zur Speichernutzung:
.data size 1264
.text size 67046
.bss size 1433