Det verkar som att kompilatorn optimerar bort kod som inte används. Tyvärr använder jag koden genom att kalla på funktionspekare och vet inte riktigt hur jag ska göra för att kompilatorn inte ska göra denna optimering.
exempel:
Kod: Markera allt
#include <typedef.h>
#include <BufferObjRam.h>
uint8 buffer[100];
BufferObjRamT mainObj;
uint8 disableInt(void)
{
return 1;
}
void RestoreInt(uint8 dat)
{
return;
}
void main(void)
{
uint8 (*foo)(void) = NULL;
foo = disableInt;
/* Detta fungerar utmärkt */
foo();
/* Detta ger felmeddelande 800, hittar inte "RestoreInt
Error [800] ; 0. undefined symbol "_RestoreInt" */
BufferInitBuffer( &mainObj,
buffer,
100,
1,
disableInt,
RestoreInt );
}
Lägger jag till ett funktionsanrop till "RestoreInt" så försvinner felet. Det hela verkar som att kompilatorn inte fattar att jag faktiskt använder funktionerna.
Mitt problem är att jag inte riktigt vet hur jag ska få kompilatorn att låta mina funktioner vara kvar och länka in dem i huvudprogrammet på ett vettigt sätt. Har tittat i manualen och försökt använda kommandot "GLOBAL" för att den ska nås från alla ställen. Men detta verkar bara kunna göras i assembler. Har även testat att stänga av optimeringen och även sätta den på level 1 och 9.
Någon som vet hur jag ska göra?
Mvh/
Daniel