OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13215|回复: 21

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

[复制链接]

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-1-31 20:09:19 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 八度空间 于 2016-1-31 22:07 编辑

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

如果在main函数中将eMBInit()函数注释掉之后,就能跑了
modbus仿真截图2.png
找了一下午没找到问题在哪里,目前用的编译环境是MDK5.17,以为是编译环境的问题,换MDK4.72也不行,有高招破解么?下载的是官网上的源码

FreeModbus_M4.zip

1.03 MB, 下载次数: 1328

最佳答案

查看完整内容[请看2#楼]

搞定收工,可以跑了,定义这个函数就可以了,void __aeabi_assert(const char * x1, const char * x2, int x3){},其他日后研究
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2016-1-31 20:09:20 | 显示全部楼层
本帖最后由 八度空间 于 2016-3-1 08:00 编辑

搞定收工,可以跑了,定义这个函数就可以了,void __aeabi_assert(const char * x1, const char * x2, int x3){},其他日后研究
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

6

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2014-11-15
在线时间
91 小时
发表于 2016-1-31 20:25:52 | 显示全部楼层
初始化部分主要是端口、定时器和协议栈所需要的数据结构,单步跟进去,看是否有初始化不成功的

参考http://www.openedv.com/forum.php ... ighlight=freemodbus
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2016-1-31 21:20:41 | 显示全部楼层
Bula 发表于 2016-1-31 20:25
初始化部分主要是端口、定时器和协议栈所需要的数据结构,单步跟进去,看是否有初始化不成功的

参考http ...

都进不了main函数,怎么单步???
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

6

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2014-11-15
在线时间
91 小时
发表于 2016-1-31 22:02:07 | 显示全部楼层
八度空间 发表于 2016-1-31 21:20
都进不了main函数,怎么单步???

把代码打包发过来呢
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2016-1-31 22:07:46 | 显示全部楼层
Bula 发表于 2016-1-31 22:02
把代码打包发过来呢

楼主位
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2016-2-2 08:17:16 | 显示全部楼层
Bula 发表于 2016-1-31 22:02
把代码打包发过来呢

有招???
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

6

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2014-11-15
在线时间
91 小时
发表于 2016-2-2 12:39:20 | 显示全部楼层

我刚才试验了一下,楼主的现象的确会出现,我采取如下的方式,可以达成单步进入到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
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2016-2-2 12:42:14 | 显示全部楼层
Bula 发表于 2016-2-2 12:39
我刚才试验了一下,楼主的现象的确会出现,我采取如下的方式,可以达成单步进入到main()中:

1、在sys ...

这样就没法用了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

6

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2014-11-15
在线时间
91 小时
发表于 2016-2-2 12:45:16 | 显示全部楼层

是的。继续研究......
回复

使用道具 举报

6

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2014-11-15
在线时间
91 小时
发表于 2016-2-2 13:14:26 | 显示全部楼层
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\r\n", file, line) */  
   
  /* Infinite loop */  
  while (1)  
  {  
  }  
}

void __aeabi_assert(const char * x1, const char * x2, int x3)
{
}
#endif  
回复

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2016-2-2 13:20:34 来自手机 | 显示全部楼层
进去不了main函数,但是把main里面的代码删掉一些就可以进去到main?感觉是比较底层的错误,比如堆栈溢出代码对齐之类的。
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2016-2-3 08:42:59 | 显示全部楼层
Bula 发表于 2016-2-2 13:14
基本搞定:

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

昨天猜估计也是这问题,不过还没折腾,搞其他的去了,呵呵,等会折腾一下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2016-2-3 08:43:48 | 显示全部楼层
ofourme 发表于 2016-2-2 13:20
进去不了main函数,但是把main里面的代码删掉一些就可以进去到main?感觉是比较底层的错误,比如堆栈溢出代 ...

是啊,注释掉modbus初始化函数即可,坑爹,官方用了assert这货
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2016-2-14 11:47:47 | 显示全部楼层
Bula 发表于 2016-2-2 13:14
基本搞定:

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

按这样也是不行
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

11

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
492
金钱
492
注册时间
2015-3-3
在线时间
114 小时
发表于 2016-7-3 16:21:06 | 显示全部楼层
过来学习一下
回复

使用道具 举报

42

主题

297

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2016-7-22
在线时间
318 小时
发表于 2017-1-18 15:33:48 | 显示全部楼层
学习学习
回复

使用道具 举报

zzzzhi 该用户已被删除
发表于 2017-3-22 11:23:27 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2017-3-23 16:48:47 | 显示全部楼层
zzzzhi 发表于 2017-3-22 11:23
我也遇到了这种情况,请问您解决了吗?

请移步2楼
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2017-7-31
在线时间
9 小时
发表于 2017-11-2 16:07:41 | 显示全部楼层
mark一下,
回复

使用道具 举报

7

主题

88

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
276
金钱
276
注册时间
2015-1-10
在线时间
70 小时
发表于 2019-6-12 11:59:41 | 显示全部楼层
学习了,感谢分享经验
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2019-10-21
在线时间
20 小时
发表于 2020-4-22 14:15:49 | 显示全部楼层
可以不用加void __aeabi_assert,把工程默认的串口1的重定义函数fputc那块的地方去掉就行了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-2 09:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表