为何main函数明明没有循环体,主程序会自动执行3次
今天,我在正点原子的探索者开发板(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/2014/07/library-21-read-sd-card-fatfs-stm32f4xx-devices/
都是按他写的文档移植的,不知道会不会有影响,如果有兴趣的可以去看一下。
执行了3次说明是重启了。建议在main中加while,这样容易跑飞。 只有3次? boboo-23776 发表于 2017-4-21 11:31
只有3次?
确实只有三次,本来我固执地认为是只有一次的,后来才发现嵌入裸机代码是不能退出MAIN函数的,如果退出了就会出现未知的错误,循环三次可能只是一个巧合,不过从现象来看,确实只有三次。理解了,嵌入式软件中不能退出main 今天去国外论坛提问一下,看看国外友人的见解,他的意思大概是,嵌入式软件不同于PC机下编程,PC下写C语言从main函数返回的话,是会返回操作系统的,所以不会出错。而对于裸机不应该退出MAIN函数,不然会出现错误,这种错误叫with no expectation of returning。
谢谢大家的解答了!
页:
[1]