
今天,我在正点原子的探索者开发板(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/ 都是按他写的文档移植的,不知道会不会有影响,如果有兴趣的可以去看一下。 |
确实只有三次,本来我固执地认为是只有一次的,后来才发现嵌入裸机代码是不能退出MAIN函数的,如果退出了就会出现未知的错误,循环三次可能只是一个巧合,不过从现象来看,确实只有三次。理解了,嵌入式软件中不能退出main
谢谢大家的解答了!