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

为何main函数明明没有循环体,主程序会自动执行3次

[复制链接]
nnnnate 提问时间:2017-4-21 00:36 /
     今天,我在正点原子的探索者开发板(stm32f407),移植了SDIO驱动还有FAT文件系统,之后,我的板子便出现一个怪异现象(至少是在移植完之后才出的问题):main函数里我并没有写while(1),但程序会自动执行三次,我可以通过串口观察出来,真的很奇怪。
    为了简单地重现问题,我直接新建了一个空工程,只写了如下代码:
#include "stm32f4xx.h"
int main(void)
{
        LED_GPIO_Config();
        uart_init(115200);
        printf("求你别再循环三次了\r\n");

        return 0;
}

    很遗憾,最后通过串口还是看到了三句“求你别再循环三次了”(我把printf重定向到串口输出了),不知道这到底是什么问题。
    网上有说,要在结尾加一个while(1),但我可以打保票,我前几天写的测试代码都是没有用到while循环的,但根本不会执行3次,今天出问题后,我重新烧写了前几天写的代码,还真的就执行了三次,真的是很奇怪,我有两块板子,在移植sdio和fat文件系统过后,都出现了同样怪异的问题,请高手赐教,真的十分困惑!!!!
   我移植的fat文件系统是从一个国外大神的个人主页上下载的:
   http://stm32f4-discovery.net/201 ... -stm32f4xx-devices/
   都是按他写的文档移植的,不知道会不会有影响,如果有兴趣的可以去看一下。
赞 收藏 1 评论4 发布时间:2017-4-21 00:36

举报

4个回答
废鱼 回答时间:2017-4-21 10:30:22
执行了3次说明是重启了。建议在main中加while,这样容易跑飞。
yb0121 回答时间:2017-4-21 11:31:42
只有3次?
nnnnate 回答时间:2017-4-21 20:56:33

确实只有三次,本来我固执地认为是只有一次的,后来才发现嵌入裸机代码是不能退出MAIN函数的,如果退出了就会出现未知的错误,循环三次可能只是一个巧合,不过从现象来看,确实只有三次。理解了,嵌入式软件中不能退出main
nnnnate 回答时间:2017-4-21 21:02:38
今天去国外论坛提问一下,看看国外友人的见解,他的意思大概是,嵌入式软件不同于PC机下编程,PC下写C语言从main函数返回的话,是会返回操作系统的,所以不会出错。而对于裸机不应该退出MAIN函数,不然会出现错误,这种错误叫with no expectation of returning。
谢谢大家的解答了!

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版