OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9613|回复: 10

关于原子哥战舰例程移植到IAR中usart.c和sys.c出错的解决方法

[复制链接]

9

主题

125

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2014-5-7
在线时间
325 小时
发表于 2016-5-6 13:03:31 | 显示全部楼层 |阅读模式
今天闲着没事,移植了原子哥的工程模板例程,之前都在用自己做的例程,这次也是现来无事,也是为了更方便以后学习,移植之后发现有15个错误和一个警告,然后就各种找原因,在论坛里也找了,但是都是没有解决方法,无意中一百度,竟然发现了一个网友的博客,上面是清楚的解决方法
出错内容:
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
再次也感谢这位网友提供的解决方法哦,,


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

125

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2014-5-7
在线时间
325 小时
 楼主| 发表于 2016-5-6 13:06:21 | 显示全部楼层
本帖最后由 烟花绽放 于 2016-5-6 13:09 编辑

STM32工程模板IAR.zip (5.52 MB, 下载次数: 2051)
回复 支持 1 反对 0

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-5-6 14:48:03 | 显示全部楼层
不错,多谢分享,用IAR的有福了
开往春天的手扶拖拉机
回复 支持 反对

使用道具 举报

2

主题

394

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2085
金钱
2085
注册时间
2012-5-8
在线时间
312 小时
发表于 2016-7-5 16:23:29 | 显示全部楼层
谢谢楼主的分享!
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-8-11
在线时间
1 小时
发表于 2016-8-11 14:42:09 | 显示全部楼层
遇到了同样的问题。还是比较习惯用IAR。感谢分享!
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2018-7-6
在线时间
22 小时
发表于 2016-11-29 17:31:57 | 显示全部楼层
今天我也在移植,,,,正好看看
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-7-24
在线时间
13 小时
发表于 2017-2-26 14:05:04 | 显示全部楼层
哈哈 我也在移植到iar上 遇到了同样的问题 谢谢楼主
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-7-24
在线时间
1 小时
发表于 2017-8-17 12:01:43 | 显示全部楼层
谢谢分享,解决了问题。
回复 支持 反对

使用道具 举报

2

主题

394

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2085
金钱
2085
注册时间
2012-5-8
在线时间
312 小时
发表于 2019-4-2 09:12:43 | 显示全部楼层
赞一个!
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-11-4
在线时间
17 小时
发表于 2020-6-17 13:49:39 | 显示全部楼层
多谢分享,正在弄这个
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2020-10-7
在线时间
1 小时
发表于 2020-10-7 16:55:48 | 显示全部楼层
终于找到解决方法 谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 05:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表