+----------------------------------+
+ Device Fujitsu MB90342 +
+ Compiler von Fujitsu (glaub ich) +
+----------------------------------+
Hi,
ich habe folgenden Code geschrieben (nur zu Compilierzwecken,
eigentlicher Code ist deutlich umfangreicher).
1 | #include <stdlib.h>
|
2 |
|
3 | typedef struct osTask
|
4 | {
|
5 | void (*Callback)(void);
|
6 | unsigned int uiActCount;
|
7 | unsigned int uiPeriod;
|
8 | unsigned char ucMode;
|
9 | unsigned int uiId;
|
10 | struct osTask *next;
|
11 | }tTasks;
|
12 |
|
13 | struct osTask *next = NULL;
|
14 | struct osTask *anfang = NULL;
|
15 |
|
16 | void add_data(unsigned char setMode, unsigned int setCounter,
|
17 | void (*setCallback)(void), unsigned int taskID );
|
18 | void dummy(void);
|
19 |
|
20 | void main(void)
|
21 | {
|
22 | add_data(1, 1000, dummy, 0);
|
23 | while(1){;}
|
24 | //return 0;
|
25 | }
|
26 |
|
27 | void add_data(unsigned char setMode, unsigned int setCounter,
|
28 | void (*setCallback)(void), unsigned int taskID )
|
29 | {
|
30 | /* Check if there's an element in the list */
|
31 | if(anfang == NULL)
|
32 | {
|
33 | /* Allocate storage space for the structur */
|
34 | /* for the first element in the list */
|
35 | if((anfang = (struct osTask *)malloc(sizeof(struct osTask))) == NULL)
|
36 | {
|
37 | //memoryerror
|
38 | return;
|
39 | }
|
40 | anfang->uiPeriod = setCounter;
|
41 | anfang->uiActCount = setCounter;
|
42 | anfang->ucMode = setMode;
|
43 | anfang->Callback = setCallback;
|
44 | anfang->uiId = taskID;
|
45 | anfang->next = NULL; //Mark this entry as the start of the list
|
46 | }
|
47 | }
|
48 | void dummy (void)
|
49 | {
|
50 | ; //tu was
|
51 | }
|
Beim Compilieren kommt folgende Fehlermeldung:
>>balloc.asm(154) E4305L: Unresolved external symbol (_sbrk)
Geplant ist dieses Konzept für die Speicherverwaltung (Dynamische
Datenstruktur) eines OS.
Erkennt jemand den Fehler??
Der Fehler liegt beim malloc, nur leider erkenne ich nicht warum??
1 | if((anfang = (struct osTask *)malloc(sizeof(struct osTask))) == NULL)
|
2 | {
|
3 | //memoryerror
|
4 | return;
|
5 | }
|
Definiert ist malloc in der stdlib.h so:
1 | extern void *malloc(size_t);
|
Ich habs auch mit dem in Dev-C++ integrierten Compiler compiliert, mit
Erfolg.
Dort ist es wie folg deklariert:
1 | _CRTIMP void* __cdecl malloc (size_t) __MINGW_ATTRIB_MALLOC;
|
Daraus werd ich zwar nicht 100% schlau, aber die Funktion gibt doch auch
einen void- Zeiger zurück,...
Warum will der Controller-Compiler das dann nicht machen??
Gruß