你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
IAR全速运行进入死循环,是什么原因
[复制链接]
lucky1022
提问时间:2018-8-8 17:01 /
è¿å ¥è¿åè¡ä»£ç éé¢åºä¸æ¥
进入这四行代码里面出不来。
赞
0
收藏
0
评论
5
分享
发布时间:2018-8-8 17:01
举报
请先
登录
后回复
5个回答
huangyanga
回答时间:2018-8-8 17:34:31
a0a.1 32b0c
设个断点仿真运行吧,这个机器语言看不懂
赞
0
评论
回复
支持
反对
七哥
回答时间:2018-8-8 19:52:09
a0a.1 32b0c
本帖最后由 toofree 于 2018-8-8 19:53 编辑
没有程序代码,你想得到个什么结果?
请参考这篇帖子
http://www.cnblogs.com/afeibfp/archive/2013/01/12/2857877.html
问题1(与编译软件无关):在程序中加入printf语句实现串口输出,但未写重定向函数fputc,出现编译无任何警号和错误直接下载无法运行,软件仿真可以运行至MAIN函数,硬件仿真在汇编窗口看到停留在“0x0800XXXX BEAB BKPT 0xAB //进入调试模式”处无法继续运行。
解决办法:编写fputc函数如下:
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{}
return ch;
}
复制代码
问题2(与编译软件有关):重定向函数fputc编写无误,使用的是MDK4.22-3.40之间的编译环境,未使用微库,即MiclroLIB,因printf()之类的函数,使用了半主机模式。使用微库的话,不会使用半主机模式,所以就没有问题。
解决办法:在option for target->target 对话框中,选择Use MiclroLIB,重新编译程序即可。
问题3:重定向函数fputc编写无误,不用微库,即MiclroLIB,依然可以使用printf
解决办法:
在程序中加入如下语句:
#pragma import(__use_no_semihosting)
_sys_exit(int x)
{
x = x;
}
struct __FILE
{
int handle;
/* Whatever you require here. If the only file you are using is */
/* standard output using printf() for debugging, no file handling */
/* is required. */
};
/* FILE is typedef’ d in stdio.h. */
FILE __stdout;
复制代码
此代码功能用于避免使用semhosting(半主机模式)
问题4:使用的是MDK4.22-3.40之间的编译环境,不想使用微库,也不想加入问题三语句。
解决办法:
更换低版本的MDK,3.4以下吧,本人试验使用mdk3.24不勾选MiclroLIB,也不加入问题三语句,能够正常使用printf,无任何问题。
这是我遇到问题后找到的解决办法。如有问题请大家指正。还有一个问题没有解决就是选择Use MiclroLIB后编译出错,提示如下:
.\Obj\XXXX.axf: Error: L6218E: Undefined symbol __use_two_region_memory (referred from stm32f10x_startup.o).
.\Obj\XXXX.axf: Error: L6218E: Undefined symbol __initial_sp (referred from entry2.o).
的错误不知道为什么,希望有知道的能解决一下。
评分
参与人数
1
蝴蝶豆
+5
收起
理由
zero99
+ 5
查看全部评分
赞
0
评论
回复
支持
反对
wenyangzeng
回答时间:2018-8-8 19:52:44
a0a.1 32b0c
可能优化等级太高了,降低等级试看看。有时就不死循环了。
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
feixiang20
回答时间:2018-8-9 00:06:21
a0a.1 32b0c
可能是变量问题,慢慢跟踪了看看。当全速运行的时候,调试器不管用了,直接由CPU接管,这个时候将函数地址加载给PC的值的LSB为偶数,当然导致程序跑飞了。
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
MrJiu
回答时间:2018-8-9 10:05:49
a0a.1 32b0c
看了一下,好像是函数名叫exit的。。。贴C语言,汇编看起来费劲!!!
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
没有程序代码,你想得到个什么结果?
请参考这篇帖子
http://www.cnblogs.com/afeibfp/archive/2013/01/12/2857877.html
解决办法:编写fputc函数如下:
解决办法:在option for target->target 对话框中,选择Use MiclroLIB,重新编译程序即可。
问题3:重定向函数fputc编写无误,不用微库,即MiclroLIB,依然可以使用printf
解决办法:
在程序中加入如下语句:
问题4:使用的是MDK4.22-3.40之间的编译环境,不想使用微库,也不想加入问题三语句。
解决办法:
更换低版本的MDK,3.4以下吧,本人试验使用mdk3.24不勾选MiclroLIB,也不加入问题三语句,能够正常使用printf,无任何问题。
这是我遇到问题后找到的解决办法。如有问题请大家指正。还有一个问题没有解决就是选择Use MiclroLIB后编译出错,提示如下:
.\Obj\XXXX.axf: Error: L6218E: Undefined symbol __use_two_region_memory (referred from stm32f10x_startup.o).
.\Obj\XXXX.axf: Error: L6218E: Undefined symbol __initial_sp (referred from entry2.o).
的错误不知道为什么,希望有知道的能解决一下。
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分