9691|8

20

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【已解决】求助:关于用keil uVision4编译器编译ARM9架构uCOS的问题 [复制链接]

 

先说明一下我的问题:

     我用的Keil uVision4编译器编译从uC官网上下的基于AT91SAM9263处理器的uC/OS-ii源代码的,编译的时候出现了问题,我先把源代码贴到下边:

我的问题是:在源代码中所有前面加了"_arm"的语句都会报下面的错误:

uC_SAM9263\..\uCOS_II\..\uC_SAM9263\os_cpu.h(185): error:  #169: expected a declaration

把“_arm”去掉之后再编译就没有这个问题了,想请教一下这样做有什么影响?会不会导致系统崩溃?或者说怎么解决这个问题?

是不是我用的编译器的问题?

     *********************************************************************************************************
*                                              PROTOTYPES
*********************************************************************************************************
*/

#if OS_CRITICAL_METHOD == 3
__arm             OS_CPU_SR  OS_CPU_SR_Save(void);           /* See OS_CPU_A.ASM                                  */
__arm  void       OS_CPU_SR_Restore(OS_CPU_SR cpu_sr);
#endif

__arm  void       OS_CPU_SR_INT_Dis(void);
__arm  void       OS_CPU_SR_INT_En(void);
__arm  void       OS_CPU_SR_FIQ_Dis(void);
__arm  void       OS_CPU_SR_FIQ_En(void);
__arm  void       OS_CPU_SR_IRQ_Dis(void);
__arm  void       OS_CPU_SR_IRQ_En(void);

#if OS_CPU_FPU_EN > 0
       void       OS_CPU_FP_Init(void);           /* See OS_CPU_C.C                                    */
__arm  void       OS_CPU_FP_Restore(void *pblk);
__arm  void       OS_CPU_FP_Save(void *pblk);
#endif

__arm  void       OSCtxSw(void);
__arm  void       OSIntCtxSw(void);
__arm  void       OSStartHighRdy(void);

       void       OS_CPU_InitExceptVect(void);

__arm  void       OS_CPU_ARM_ExceptResetHndlr(void);
__arm  void       OS_CPU_ARM_ExceptUndefInstrHndlr(void);
__arm  void       OS_CPU_ARM_ExceptSwiHndlr(void);
__arm  void       OS_CPU_ARM_ExceptPrefetchAbortHndlr(void);
__arm  void       OS_CPU_ARM_ExceptDataAbortHndlr(void);
__arm  void       OS_CPU_ARM_ExceptAddrAbortHndlr(void);
__arm  void       OS_CPU_ARM_ExceptIrqHndlr(void);
__arm  void       OS_CPU_ARM_ExceptFiqHndlr(void);

       void       OS_CPU_ExceptHndlr(INT32U  except_type);

#if OS_CPU_INT_DIS_MEAS_EN > 0
       void       OS_CPU_IntDisMeasInit(void);
       void       OS_CPU_IntDisMeasStart(void);
       void       OS_CPU_IntDisMeasStop(void);
       INT16U     OS_CPU_IntDisMeasTmrRd(void);
#endif

#if OS_CPU_ARM_DCC_EN > 0
       void       OSDCC_Handler(void);
#endif

#endif

[ 本帖最后由 ChinaLingBo 于 2011-12-22 14:37 编辑 ]

最新回复

受教了  详情 回复 发表于 2011-12-23 23:20
点赞 关注
 

回复
举报

20

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
肿么没有人回答啊?这里急用,谢谢了!
 
 
 

回复

1万

帖子

16

TA的资源

版主

板凳
 

这个最好加上,但试试别的写法如把-去掉,直到编译器认了就好

__main函数是C/C++运行时库的一个函数,嵌入式系统在进入应用主程序之前必须有一个初始化的过程,使用__main标号引导系统时必须将应用程序的入口定义为main()。
映像文件可以有两种地址:加载地址和执行地址。加载地址是映像文件在存储器中的存储地址;执行地址就是映像文件运行时的地址。
在结构比较简单的系统中,加载地址就是执行地址;而在复杂系统中,程序运行前,常常会把映像文件的一部分或全部从存储区域移出去,此时执行地址就不再是加载地址。
知道以上几个概念,__main函数对映像文件的初始操作就不难理解了。对于加载地址和执行地址不同的映像文件,__main函数会把加载地址的代码和数据复制到执行地址中,并且对被链接器指定为需要初始化为0的段,进行清零操作。
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 板凳 ddllxxrr 的帖子

谢谢,这里的__main是不是和__arm一个意思呢?如何解决这个问题呢?求更详细的解答!
 
 
 

回复

1万

帖子

16

TA的资源

版主

5
 

一样

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

6
 

从官方文档上找到问题所在了!

You should note that these prototypes are prefixed with the special keyword __arm. This is an IAR keyword that indicates that these functions will run in ARM mode and thus, when called, the compiler will generate the appropriate instructions

所以我干脆就把__arm 都删掉了!

这部分的编译已经没有问题了

期待下一个问题的出现!

【另外说明一下:我是从Micrium官网上下的源代码,它是用IAR编译器编译的,所以在Keil上编译有些关键字keil不认识,所以才导致了这一问题】

[ 本帖最后由 ChinaLingBo 于 2011-12-22 14:39 编辑 ]
 
 
 

回复

44

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 沙发 ChinaLingBo 的帖子

心有余而力不足,这个不太了解...
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

8
 

有心就好!谢谢~

 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

9
 
受教了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表