你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

eclipse+ac6下stm32开发,出现make: Interrupt/Exception caught错误。

[复制链接]
any012 提问时间:2017-6-27 08:45 /
悬赏10ST金币已解决
用了一段时间eclipse+ac6,感觉挺好用的。
可上周突然发现编译不了工程了,有如下提示:

00:35:52 **** Incremental Build of configuration Debug for project 4PTV1_1_1 ****
make all
Building target: 4PTV1_1_1.elf
Invoking: MCU GCC Linker
make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4227d3)
00:35:52 Build Finished (took 375ms)

使用的是默认的external builder,并且没有产生.elf文件。
网上搜了下,有的说是环境变量里有其他path变量影响了,我试着将都删除了只保留java相关的一个,结果仍是不行。

如果改成internal builder的话,可以通过编译。
但有新的问题出现了,我是通过增加_write(), _read()函数实现printf()重定向的。结果通过printf函数无法向串口输出数据了。

最佳答案

查看完整内容

如果在win 下,用编译器编译的话,makefile是每次编译都实时更新的,你可能需要其他方式(比如cmake?)来编译文件
收藏 评论9 发布时间:2017-6-27 08:45

举报

9个回答
arenas 回答时间:2017-6-27 08:45:24
any012 发表于 2017-6-27 09:50
试过这个,一点编译就自动把makefile文件更新了,也许是我的操作不对。

如果在win 下,用编译器编译的话,makefile是每次编译都实时更新的,你可能需要其他方式(比如cmake?)来编译文件
arenas 回答时间:2017-6-27 09:19:48


如果使用其他方法定义一个printStr函数如何?重定向必然是有各类限制的。
MrJiu 回答时间:2017-6-27 09:24:24
eclipse开发ST,没搞成功过 ,只能帮顶!!!
arenas 回答时间:2017-6-27 09:26:15
试试这个方法,在makefile文件加入这一行

SHELL=C:/Windows/System32/cmd.exe


参考:http://superuser.com/questions/3 ... pt-exception-caught
any012 回答时间:2017-6-27 09:50:23
SInzo 发表于 2017-6-27 09:26
试试这个方法,在makefile文件加入这一行

SHELL=C:/Windows/System32/cmd.exe

试过这个,一点编译就自动把makefile文件更新了,也许是我的操作不对。
any012 回答时间:2017-6-27 09:50:40
SInzo 发表于 2017-6-27 09:26
试试这个方法,在makefile文件加入这一行

SHELL=C:/Windows/System32/cmd.exe

试过这个,一点编译就自动把makefile文件更新了,也许是我的操作不对。
any012 回答时间:2017-6-27 09:56:03
SInzo 发表于 2017-6-27 09:53
如果在win 下,用编译器编译的话,makefile是每次编译都实时更新的,你可能需要其他方式(比如cmake?) ...

不懂那么多啊...
any012 回答时间:2017-6-27 11:29:33
本帖最后由 any012 于 2017-6-27 11:31 编辑

make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4227d3)
这个问题,通过重新安装eclipse+ac6插件,解决了,现在可以用external builder编译了。

printf()函数这里还是有问题,
int _write(int fd, char *ptr, int len)
{
    HAL_UART_Transmit(&huart1, (uint8_t *) ptr, len, 0xFFFF);
    return len;
}
用stlink调试,发现执行到HAL_UART_Transmit(&huart1, (uint8_t *) ptr, len, 0xFFFF)时,ptr指向的是:

Name : ptr
Details:0x20002e60 "\r\nBð\b\002\232a\232i\002ð\b\002\002\222\002\232\232iBð@\002\232a\233i\003ð@\003\003\223\003\233&L\001\"°! Fý÷îüßø\230\200"


而实际printf函数是想这样输出的:
printf("\r\n the Version of XXX: V1.1.2");

any012 回答时间:2017-6-28 16:37:06
printf函数的问题,有点进展了。
新建了个简单的工程,printf()函数还是通过_write()重定向到串口1输出。
增加了个printf()语句,结果第一个printf( )语句能正常输出了。
又试了变为连续3各printf( )语句,仍是最后一个printf( )语句丢失。

    printf("\r\n project name: 4PTtest1");
    printf("\r\n one second past.");
    printf("\r\n hahaha.");


[08:34:41.265]收←◆
project name: 4PTtest1

[08:35:14.506]收←◆
project name: 4PTtest1
one second past.


所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版