移植keil到IAR
2016-09-21 17:02
381 查看
IAR 6.3中intrinsics.h与core_cm3.h 中的兼容错误解决方法
标签: IARarmintrinsics.hcore_cm3.h2016-01-26 09:52 166人阅读 评论(0) 收藏 举报
解决办法1:
用IAR6.3打开IAR6.0 的工程,编译的时候出现提示错误:
extern uint32_t __get_PSP(void); 已经在C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\inc\c\intrinsics.h文件中定义
extern uint32_t __get_MSP(void);已经在C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\inc\c\intrinsics.h文件中定义
。。。。。。
这是由于IAR6.3已经加入了CM3的内核定义,就不需要ST库中的core_cm3.c 和 core_cm3.h 这两个文件的定义了
解决办法从ST网站找到:
直接删除core_cm3.c 和 core_cm3.h 这两个文件,然后在工程设置里面勾选 "Use CMSIS"
解决办法2:
把core_cm3.h里面这句给注释掉,然后加上一句
#if defined (__ICCARM__)
//#include <intrinsics.h> /* IAR Intrinsics */
__intrinsic void __DSB(void);
#endif
完全没有任何警告和错误。
我的是IAR6.3+STM32F10x_StdPeriph_Driver V3.5.0
解决办法3:
直接用IAR6.3安装文件下的core_cm3.h
转载自:http://www.openedv.com/thread-73960-1-1.html
网友:烟花绽放 |
出错内容:
usart.c中出错部分
//////////////////////////////////////////////////////////////////
//加入以下代码,支持printf函数,而不需要选择use MicroLIB
#if 1
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
int handle;
};
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
_sys_exit(int x)
{
x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (u8) ch;
return ch;
}
#endif
sys.c中出错部分
//THUMB指令不支持汇编内联
//采用如下方法实现执行汇编指令WFI
__asm void WFI_SET(void)
{
WFI;
}
//关闭所有中断
__asm void INTX_DISABLE(void)
{
CPSID I;
}
//开启所有中断
__asm void INTX_ENABLE(void)
{
CPSIE I;
}
//设置栈顶地址
//addr:栈顶地址
__asm void MSR_MSP(u32 addr)
{
MSR MSP, r0 //set Main Stack value
BX r14
}
解决后的程序如下:
usart.c
//////////////////////////////////////////////////////////////////
//加入以下代码,支持printf函数,而不需要选择use MicroLIB
#if defined ( __ICCARM__ ) //IAR下使用
//重定义fputc函数
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (u8) ch;
return ch;
}
#else //非IAR下使用
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
int handle;
};
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
_sys_exit(int x)
{
x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (u8) ch;
return ch;
}
#endif
sys.c
//THUMB指令不支持汇编内联
//采用如下方法实现执行汇编指令WFI
void WFI_SET(void)
{
asm("WFI");
}
//关闭所有中断(但是不包括fault和NMI中断)
void INTX_DISABLE(void)
{
asm("CPSID I");
asm("BX LR");
}
//开启所有中断
void INTX_ENABLE(void)
{
asm("CPSIE I");
asm("BX LR");
}
//设置栈顶地址
//addr:栈顶地址
void MSR_MSP(u32 addr)
{
asm("MSR MSP, r0"); //set Main Stack value
asm("BX r14");
}
大家也可以去原博客地址查看:http://blog.csdn.net/wang_shuai_ww/article/details/47003381
再次也感谢这位网友提供的解决方法哦,,
相关文章推荐
- 关于把keil上的工程移植到IAR上
- keil工程移植到IAR历程
- Keil工程到IAR工程的移植
- 从iar移植到Keil,keil编译错误,.a文件
- uboot移植到Keil(mdk-arm)笔记
- IAR移植uCOS-II到STM32开发板(STM32F107VCT6)
- Keil和IAR下查看占用Flash和SRAM空间大小的方法
- contiki for CC2530的IAR移植
- RTThread的finsh在IAR 430上移植的可行性
- uC/OS - III 移植 IAR平台
- Protues 与 Keil 或 IAR 远程调试
- 用Eclipse替代Keil&IAR来开发ARM应用(升级版)
- zstack协议栈移植过程中IAR不能编译的问题
- 在IAR For ARM和Keil Realiew MDK中建立工程的步骤
- freakz移植到IAR的CC2530工程
- IAR环境下ucosii在STM32上的移植
- ADS与IAR的相互移植
- 基于IAR Embedded WorkBench的PX4原生固件移植与优化
- ADS1.2 到 keil Realview MDK,IAR
- keil环境下移植cJSON