请问在c语言中如何实现arm/thumb状态切换呢?
现有a模块和b模块,a模块编译成arm模式,b模块编译成thumb模式.其中在编译b模块时,调用fromelf将其转成mod文件了.现在我需要在a模块中用c语言实现b模块的加载,但因为b模块是thumb模式,所以在调用b模块中的函数之前,需要切换到thumb状态,请问在c语言中如何实现arm/thumb状态切换呢?
补充:
b模块的编译:
tcc -c --apcs /ropi/interwork --littleend -Ospace -Otime -zo -O2 -I.testb.c
armlink -o testb.elf --reloc --entry LoadEntry testb.o --first LoadEntry
fromelf -output testb.bin -bin testb.elf
a模块的编译
armcc -c --apcs /ropi/interwork --littleend -Ospace -Otime -zo -O2 -I.testa.c
在a模块中:
int LoadTest()
{
typedef int (LoadEntryPtr)(int aParam);
unsigned char *data=0;
int datasize=0;
int ret = 0;
FILE *pf = fopen( "testb.bin", "rb" );
if(pf!=0)
{
fseek(pf, 0, SEEK_END);
datasize = ftell( pf );
if(datasize > 0)
{
data = (unsigned char*)malloc(datasize);
if(data != 0)
{
memset(data, 0, datasize);
fseek(pf, 0, SEEK_SET);
fread(data, 1, datasize, pf);
}
}
fclose(pf);
}
ret = ((LoadEntryPtr)(buf))(datasize);
free(buf);
return ret;
}
如果b模块用tcc编译,则调用 ret = ((LoadEntryPtr)(buf))(datasize);时死掉了,如果b模块也用armcc编译,则可以正常运行.
[[it] 本帖最后由 symbianfreshma 于 2008-4-1 14:25 编辑 [/it]]