externe variablen richtig angelegt

OP #1398572
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.