移植FreeModbus不运行,哪位高手遇到过

2019-07-20 01:22发布

本帖最后由 八度空间 于 2016-1-31 22:07 编辑

最近移植FreeModbus-V1.5版本到探索者开发板,发现下载后不运行,仿真发现一直在这汇编中循环,main函数都进不了 modbus仿真截图1.png

如果在main函数中将eMBInit()函数注释掉之后,就能跑了
modbus仿真截图2.png
找了一下午没找到问题在哪里,目前用的编译环境是MDK5.17,以为是编译环境的问题,换MDK4.72也不行,有高招破解么?下载的是官网上的源码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
Bula
1楼-- · 2019-07-21 00:32
八度空间 发表于 2016-2-2 08:17
有招???

我刚才试验了一下,楼主的现象的确会出现,我采取如下的方式,可以达成单步进入到main()中:

1、在system_stm32f4xx.c中的void SystemInit(void)里面的  RCC->CR |= (uint32_t)0x00000001;语句一行设置断点
2、在main()主函数的第一行        delay_init();设置断点
3、进入DEBUG Session后,系统会停在第1个断点处,然后单步执行,直至汇编代码中的BX R0处
                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP
4、再按F5连续运行,此时,系统会停在main()的第1行语句断点处。

原因尚不清楚,怀疑是否要align 4bytes
八度空间
2楼-- · 2019-07-21 04:41
 精彩回答 2  元偷偷看……
Bula
3楼-- · 2019-07-21 10:30
八度空间 发表于 2016-2-2 12:42
这样就没法用了

是的。继续研究......
Bula
4楼-- · 2019-07-21 12:27
Bula 发表于 2016-2-2 12:45
是的。继续研究......

基本搞定:

1、Options for Target对话框,Target页面中,勾选Use MicroLib
2、main.c的最后增加如下代码:
#ifdef  USE_FULL_ASSERT  
   
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */  
void assert_failed(uint8_t* file, uint32_t line)  
{  
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d ", file, line) */  
   
  /* Infinite loop */  
  while (1)  
  {  
  }  
}

void __aeabi_assert(const char * x1, const char * x2, int x3)
{
}
#endif  
ofourme
5楼-- · 2019-07-21 14:15
 精彩回答 2  元偷偷看……
八度空间
6楼-- · 2019-07-21 15:04
Bula 发表于 2016-2-2 13:14
基本搞定:

1、Options for Target对话框,Target页面中,勾选Use MicroLib

昨天猜估计也是这问题,不过还没折腾,搞其他的去了,呵呵,等会折腾一下

一周热门 更多>