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

为何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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版