| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1400 人关注过本帖
标题:请问在c语言中如何实现arm/thumb状态切换呢?
只看楼主 加入收藏
symbianfreshma
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-4-1
收藏
 问题点数:0 回复次数:1 
请问在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]]
搜索更多相关主题的帖子: c语言中 thumb状态 arm 模块 testb 
2008-04-01 13:27
lzjd
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2008-4-2
收藏
得分:0 
不懂?你在做ARM开发吗?我只知道编译时可以。
2008-04-03 13:52
快速回复:请问在c语言中如何实现arm/thumb状态切换呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.073455 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved