多打几个断点,调试一下。看看程序运行到哪里出错的。找找问题。
顺序不一样时有时硬件未初始化就先进入某个中断当然死机了。
我的理解顺序不一样,只是编译的时候顺序不同,但是最终链接的hex或者bin文件应该没差别才对。按您说的硬件未初始化这个说法不太合适,比如写代码时,谁也不会刻意把初始化的文件放在最上面吧。
工程太大了,也不适合发出来,所以只是描述一下问题表象,看大家有没有思路提供
对,就是工程里两个文件调换一下顺序,编译也能通过,只是运行时,调换后的工程就Hardfault。我用的c++,调换的是两个cpp文件。
另外一个论坛里找到一个类似的情况,跟我遇到的很像,不知道是不是同一个问题,我在研究一下。连接这个
http://bbs.21ic.com/icview-1197474-1-1.html
http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
我觉得跟文件顺序无关,因为编译的时候编译器会自动把个个函数按照程序流程编译,最主要的原因可能是有个函数出了问题,而之前运行的时候,没有运行到这个函数,所以问题没有暴露,
AB两个文件里面有什么全局的东西是一样的?是AB两个文件交换才出问题,还是任意两个文件交换都会出问题?
工程用了很久也没发现有什么大的bug,所以感觉应该不会存在某个函数运行不到的情况
C++的话,可能涉及到构造函数的执行顺序吧。。构造函数的执行顺序不同,硬件初始化的就有先后了。。
比如全局的对象,初始化对象的时候,调用的构造函数顺序可能会不一样的。。
可以最先初始化一个串口,用来跟踪每个对象的构造函数调用情况,就知道顺序有没有差异了。。
单纯说现象,不一定一下子就定位到,具体和工程,代码有关,,
提供不了,大家就只有一个思路了,你自己去看看,,
很大可能就是和构造函数执行顺序有关了,,这个需要你自己判断两个文件用到对象是不是需要保证一定的顺序,
他说的这个问题我之前遇到类似的。。
刚看的时候,感觉C语言的可能行不大,觉得应该是C++。下边他确实说的是C++
我之前搞过一次,类代码不变,对象初始化的位置不一样,会有问题。