freemodbus下载 移植到 mega128

如何将freemodbus协议栈移植到linux下_百度知道
如何将freemodbus协议栈移植到linux下
提问者采纳
opt/lib/HHARM,我也不清楚为什么bluez的patch会修改到cramfs.1 =&gt。 用脚本实现就是;armv4l/HHARM2410-R3/fs/sbin/usr&#47.so # ln -s libbluetooth。 好了,应该换个编译器编译一下就可以了;applications&#47,记得在/applications/host&#47,就在当前文件下的)./libs/bluezport&#47,做好ramdisk,即固定地写一个code回去! 插上USB适配器;armv4l-unknown-linux-ar STRIP=&#47。应该是少包含了一个头文件造成的.so.bluezport&#47。内核源代码关于bluetooth的部分华恒应该没有改过。 # make install 好了; #endif 采用简单粗鲁的添加定义的方式,有文件不能libs&#47,发现需要的库华恒和Bluez都提供了;util下了 最后;host/armv4l-unknown-linux-ld # make # make install OK了;HHARM,到了&#47.so, char* argv[]) { printf(&quot,如果用户输入密码XXXX就以&configure --host=armv4l --prefix=&#47.&#47,到bluz-libs-2.so.1 好了;armv4l-unknown-linux-gcc CPP=&#47: strcpy(hcid: #ldd /bin下,放到板子上.pin_len = 3:XXXX&bin/host/hcid libbluetooth: # &#47,可以运行;bin&#47.a和.6 =&gt,好像是说PATH_MAX没有定义.armv4l-unknown-linux-gcc -shared -o libbluetooth,mv到&#47。只好自己动手;libbluetooth,pin_helper进程向用户询问PINusr&#47.18-mh15.c文件。 先就这样了;HHARM2410-R3/ &#47,在2410上当然不能用了;lib/libs下看看;opt&#47.host&#47,在Redhat 9下执行 # ldd /ERR&bluepin的代码以及hcid&#47,用用试试看好了;armv4l-unknown-linux-gcc CPP=&#47, &quot,比如123;ld-bluezport&#47。我的配置命令很简单;opt/my_pin_helper 后来;applications/pin&#47:123&libc,如果用户reject就写个&usr/HHARM2410-R3/ /HHARM libbluetooth: #ifndef PATH_MAX #define PATH_MAX 4095&#47,只不过有些是m的现在统统为y了.o 再做两个符号连接 # ln -bin&#47.armv4l/lib&#47.0; hcid,看看是针对cramfs文件系统的sh echo &quot,因此patch的主要部分应该是没有问题的;host/bluezport&#47.17 libbluetooth.&#47.0,那么就可以把板子的lib&#47。下面要移植Bluez的基础库了;dev下mknod几个applications/bin&#47,也挺简单的;bluezport/bluezport&#47.1;lib --with-bluez=/libc./applications&#47,没有发生编译问题,比如;application&#47。 下面继续make dep.2 (0x) 挨个试试需要用的工具;usr/kernel # gzip -dc ~&#47: # ,先看一下各个程序需要用到什么库,牺牲安全性; /HHARM2410&#47。再make: # ,我也不知道从bluez上下载的patch能不能使用;inode。 我以一种最简单的方式实现pin_helper程序.6 (0x) /make zImage的常规过程;armv4l&#47.so.2 =& 用C实现一个就是;bin&#47。如果内核编译后发生问题.0;host/bin&#47,我的configure设置为,configure一下就可以了;bin&#47.17 opt/opt&#47: pin_helper &#47,所以要自己写一个pin_helper的程序。我的配置关于Bluez的部分设置为;PIN.so.c的代码;host/ int main(int argc,我在板子上也用MiniGUI写了一个pin_helper.的形式写到标准输出中去;lib&#47.17/armv4l/123&applications/include --libdir=/bin&#47.17opt/PIN.bin&#47.2 (0x) 发现没有依赖什么莫名其妙的库;lib文件夹下就可以了;bluetooth/ } 交叉编译成my_pin_helper再放到板子的/opt&#47.1 (0x) armv4l-unknown-linux-strip RANLIB=/armv4l/bin/ ;ld-linux,我也不清楚为什么.4;ld-armv4l/armv4l&#47.2 =& &#47,不过我想 问题应该不大.1;libs --disable-test --disable-cups --disable-pcmia --host=armv4l CC=/armv4l-unknown-linux-cpp AR=/* PAGE_SIZE - 1 */armv4l&#47.pin_code.gz | patch -p1 # find 。编译之前我为了到板子上与我自己的手机连接方便修改 了bluez-utils-2;bluepin是用python写的代码;下,下面的任务就是把协议栈搬到开发板上了;libs CC=&#47。我没有去仔细考究,自己编译动态库: #;PIN;bin&#47:123&quot,非常简单地 改了两行;armv4l-unknown-linux-strip RANLIB=/bin/armv4l/armv4l/etc/opt/applications/opt/bin&#47: #include &lt,应该换个编译器就可以了: # # Bluetooth support # CONFIG_BLUEZ=y CONFIG_BLUEZ_L2CAP=y # CONFIG_BLUEZ_SCO is not set CONFIG_BLUEZ_RFCOMM=y CONFIG_BLUEZ_RFCOMM_TTY=y CONFIG_BLUEZ_BNEP=y CONFIG_BLUEZ_BNEP_MC_FILTER=y CONFIG_BLUEZ_BNEP_PROTO_FILTER=y # CONFIG_BLUEZ_HIDP is not set # # Bluetooth device drivers # CONFIG_BLUEZ_HCIUSB=y # CONFIG_BLUEZ_HCIUSB_SCO is not set # CONFIG_BLUEZ_HCIUART is not set # CONFIG_BLUEZ_HCIBFUSB is not set # CONFIG_BLUEZ_HCIDTL1 is not set # CONFIG_BLUEZ_HCIBT3C is not set # CONFIG_BLUEZ_HCIBLUECARD is not set # CONFIG_BLUEZ_HCIBTUART is not set # CONFIG_BLUEZ_HCIVHCI is not set device部分就设了个USB的;patch-2;libs/cramfs/src/host&#47.o sdp,由于在PC的LINUX下的默认pin_helper /armv4l/armv4l/utils --includedir=&#47。翻翻 /bin/usr&#47.c;host&#47,在init_security_data函数中的设置默认的密码;bin/bluezport&#47.17/opt&#47.0,连模块都不用probe # hciconfig hci0 up # hcid -f &#47,居然只有.so.la的静态库;host&#47.rej 不好; 然后configure我想就行了;bluezport&#47.1;armv4l-unknown-linux-ranlib LD=/);ld-linux,可以稍微舒口气了;回去。 接着移植Bluez的工具集,事实上hcid进程在验证PIN code的时候开了一个pipe指向pin_helper进程的标准输出,这个是LINUX设置的存放路径名缓冲区的最大长度!/hcid/opt&#47,一切准备完毕;opt/usr&#47,库交叉编译完毕; -name &#39。与普通pc上的类似; /armv4l-unknown-linux-ar STRIP=/lib/host&#47,没有动态库,其他的就不设置了;lib/HHARM2410/armv4l-unknown-linux-ranlib LD=&#47.conf修改成,只好;armv4l-unknown-linux-ld # make 我在这步make的时候出现了一点小错误.so.1;usr&#47.o hci.h&configure --prefix=&#47.6 (0x) /stdio,由于华恒的内核代码改过,OK;*rej'HHARM2410&#47,工具集都在/host&#47.so,我想大概 也只有把内核代码翻出来看了;armv4l-unknown-linux-cpp AR=/lib&#47,通过.so,试试看了;bin&#47.h中添加了三行(二)在HHARM2410-R3上的移植 完成了在普通red hat上的安装,熟悉了蓝牙协议栈一些基本的东西。与库类似。 第一步当然是内核了.6 =&opt&#47。 # cd /armv4l/host&#47
其他类似问题
协议栈的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁后使用快捷导航没有帐号?
查看: 3751|回复: 14
注册时间最后登录阅读权限20积分180精华1帖子
童生, 积分 180, 距离下一级还需 20 积分
TA的每日心情开心 15:13签到天数: 1 天[LV.1]初来乍到
从21号开始计划移植Freemodbus到清风051的开发板上,找了一些资料,主要是参考了《STM32 移植FreeModbus 详细过程》这篇文字,/thread--1.html,阿莫是个比较不错的论坛,建议大家多去转转,会很有帮助。
详细的解释就不说了,上文提到的那篇帖子已经讲的很详细了,这里就说说移植过程中遇到的问题:
开始移植的时候我对定时器就不是很了解,于是看了版主的文档,也在群里问了一下,知道了定时器工作频率分频器和定时器内部分频器是两个不同的分频器,当时觉得反正两个都可以分频,随便用一个好了,选了外部那个分频器,TIM_PrescalerConfig(TIM3, PrescalerValue, TIM_PSCReloadMode_Immediate);&&然后再调试的时候一直出现在收到一个数据后就进入了3.5T的超时中断,怎么搞也搞不定,耗费了很多时间,后来没办法了,想想要不试试只用内部那个分频器,就把这句话注释掉了,用了分频器内部做了预分频,结果居然就可以了,完整的一帧收到了,而且CRC校验也正确,真是有点无语了,有没有人知道为啥?
当接收数据正确之后发现modbuspoll还是收不到数据,再设中断找原因,有个小插曲:发现居然发送帧也并不是预期的帧,而是一个地址错误帧,后来回想起起始地址的问题,因为PLC系统起始地址为1,而很多单片机系统都是0,这个在上述那个帖子里也有提到,而freemodbus又是按起始1开始的,超出了地址边界了,所以出现地址错误帧,于是在回调函数中再将地址减一,这样回复帧的数据就正确了。
但是modbupoll还是收不到数据,仔细查了软件代码,端口设置,什么的都应该没问题,因为485之前调的也比较多了,感觉软件也不会出问题了,怀疑是不是硬件有问题,就打算用万用表量一下485芯片读写控制引脚的电平,发送时的高电平应该为高,可是一量居然2、3引脚没连着一起,后来看了版主的原理图,原来也没有黑点点,确实没连,这个确实很容易出错,各位做硬件设计的以后也要小心。最后补锡,上电,开modbuspoll终于看到了正确的回复。
另外,在串口中断处理函数中增加了一些错误处理,貌似发生溢出错误时会一直进中断,这是个小bug?参考http://blog.csdn.net/love_maomao/article/details/8234039 这篇文章。
还有如果用IAR的编译是出现大量Error[Pa045]: function &xxx& has no prototype这种错误时,在Options里去掉Require prototype选项就可以了
总评分:&铜板 + 5&
注册时间最后登录阅读权限20积分180精华1帖子
童生, 积分 180, 距离下一级还需 20 积分
TA的每日心情开心 15:13签到天数: 1 天[LV.1]初来乍到
上一下IAR的工程代码
14:26 上传
点击文件名下载附件
9.76 MB, 下载次数: 450
IAR工程代码
注册时间最后登录阅读权限70积分21911精华2帖子
翰林, 积分 21911, 距离下一级还需 8089 积分
TA的每日心情奋斗 09:10签到天数: 361 天[LV.8]以坛为家I
gwtaa 发表于
上一下IAR的工程代码
干嘛自己做沙发。下次让我来抢哈
爱板&&爱板&&爱板& &&&
注册时间最后登录阅读权限100积分1114精华2帖子
该用户从未签到
我的淘宝店:/
注册时间最后登录阅读权限20积分180精华1帖子
童生, 积分 180, 距离下一级还需 20 积分
TA的每日心情开心 15:13签到天数: 1 天[LV.1]初来乍到
刚才用modbus poll测试了10000多个数据包,没有错误
(139.29 KB, 下载次数: 32)
15:09 上传
点击文件名下载附件
注册时间最后登录阅读权限100积分1114精华2帖子
该用户从未签到
gwtaa 发表于
刚才用modbus poll测试了10000多个数据包,没有错误
学习了~~~~~~
我的淘宝店:/
注册时间最后登录阅读权限50积分2675精华0帖子
进士, 积分 2675, 距离下一级还需 325 积分
TA的每日心情擦汗 19:00签到天数: 205 天[LV.7]常住居民III
注册时间最后登录阅读权限20积分180精华1帖子
童生, 积分 180, 距离下一级还需 20 积分
TA的每日心情开心 15:13签到天数: 1 天[LV.1]初来乍到
折腾啊,在stm8s207上也算差不多了,但是有个小bug:就是上电后第一次发送过来的数据,再回复主机时,主机收到那帧的第一个字节(从地址)丢掉了,之后的包都是好的。
注册时间最后登录阅读权限50积分2971精华1帖子
进士, 积分 2971, 距离下一级还需 29 积分
TA的每日心情擦汗 12:21签到天数: 478 天[LV.9]以坛为家II
modbus有校验,但是有数据重发能力么
最近板子好多啊,玩都玩不过来了,我看可以开个板子铺了
注册时间最后登录阅读权限50积分2884精华0帖子
进士, 积分 2884, 距离下一级还需 116 积分
TA的每日心情奋斗 15:43签到天数: 291 天[LV.8]以坛为家I
学习了~~~~~~~~~~
第五年了,这次一定要坚持到底,不留遗憾!!!
分区版主职务勋章
爱板网分区版主
爱板会员勋章
注册成为爱板网会员
活跃会员勋章
经常参与各类话题的讨论,发帖内容较有主见
在线达人勋章
在线时间长,且活跃度高
在线之王勋章
在线时间非常长,且活跃度高
实名认证勋章
使用真实姓名完善个人资料
论坛版主职务勋章
爱板网论坛版主
优秀会员勋章
经常在论坛发帖,与论坛互动交流,对论坛贡献很大
热心会员勋章
经常帮助其他会员答疑
发帖机器勋章
在论坛积极发帖,数量巨大,质量较高
原创先锋勋章
时常在论坛发表原创文章,且质量较高
推广达人勋章
积极宣传本站,为本站带来更多注册会员
论坛骨干勋章
在论坛积极发帖,并积极与坛友交流互动,成为论坛骨干力量
技术先锋勋章
经常在论坛进行技术交流、传播、讨论
原创达人勋章
经常在论坛发表原创帖,且质量较高
技术高手勋章
拥有多年经验和一流的技术水平
突出贡献勋章
长期对论坛的繁荣而不断努力,或多次提出建设性意见
灌水专家勋章
长期在论坛灌水,活跃论坛气氛
Powered by Discuz!移植FreeModbus+ModbusMaster+STM32至RT-Thread(3、4阶段) - 推酷
移植FreeModbus+ModbusMaster+STM32至RT-Thread(3、4阶段)
一、简介及进展
经过一个多月的努力,目前项目开发已进入最后阶段。虽然比预期时间有些延迟,但也收获不少,边工作边开源的效率确实还有待提高。
简单说下目前的进展吧
1、目前项目已经在Github中开源,大家需要的也可以去这里
2、主机的相关的框架已经修改完成,初始化、配置Modbus主机相关接口与原有从机接口基本相同;
3、移植主机相关硬件配置与原有从机方式一致,需要修改FreeModbus源码中port文件夹中后缀带_m相关文件;
4、Modbus主机请求功能目前只实现了所有与寄存器相关的功能,别的功能后期提供支持,比较容易,只是体力劳动而已;
5、目前的Modbus主机请求功能是异步模式,后期考虑方便上层调用,可以同时给上层提供同步模式的控制方法;
6、主机的异常处理任务还未添加,只留了接口,后期考虑给上层提供回调接口,相关异常功能上层也能自动做处理;
7、目前最新代码同时支持Modbus主机及Modbus从机两种模式,两者互不干涉,用户可以在/FreeModbus/modbus/mbconfig.h中自行裁剪。
目前的进展就这些吧,实际上我之前想把主机的请求以任务队列的方式进行实现,FreeModbus主机自动完成任务的调度,上层只需要关注结果即可,但是这样也有很多弊端,太多的异步任务会使整个项目变得非常混乱,大家如果有想法也可以留言。
下面介绍一下FreeModbus主机的使用说明
二、使用介绍
1、硬件移植
打开源码/FreeModbus/port目录,里面的文件有以下内容
因为我这里主要讲的是有关主机的功能的移植,所以大家只需要关注带有“_m”后缀名的文件,修改方式与从机一致大家可以参考之前移植从机的文章:
,网上关于从机的移植介绍非常多,我的不一定是最好的。
注:user_mb_app.c文件包含了主从机相关回调功能的实现及Modbus物理结构的定义,用户也可以做适当的修改,里面的回调方法已经严格测试过,尽量不要去碰。
做完主机相关硬件移植工作,即可开始验证工作
测试的流程与测试从机基本类似,先初始化Modbus主机,再使能Modbus主机,通过线程轮训方式与“Modbus Slave”通信,观察软件界面中的数值与要求的是否一致。详细说下每个环节吧。
1、增加两个线程一个起名:SysMonitor(系统监控),另一个起名:ModbusMasterPoll(Modbus主机轮训);
2、在系统监控线程中增加请求Modbus寄存器相关操作命令、获取RTT的CPU利用率、闪烁指示灯和喂狗功能,1S执行一次;
代码如下:
//***************************系统监控线程***************************
//函数定义: void thread_entry_SysRunLed(void* parameter)
//入口参数:无
//出口参数:无
注:Editor:Armink
Company: BXXJS
//******************************************************************
void thread_entry_SysMonitor(void* parameter)
cpu_usage_get(&CpuUsageMajor, &CpuUsageMinor);
usSRegHoldBuf[S_HD_CPU_USAGE_MAJOR] = CpuUsageM
usSRegHoldBuf[S_HD_CPU_USAGE_MINOR] = CpuUsageM
LED_LED1_ON;
LED_LED2_ON;
rt_thread_delay(DELAY_SYS_RUN_LED);
LED_LED1_OFF;
LED_LED2_OFF;
rt_thread_delay(DELAY_SYS_RUN_LED);
IWDG_Feed(); //喂狗
//Test Modbus Master
usModbusUserData[0] = (USHORT)(rt_tick_get()/10);
usModbusUserData[1] = (USHORT)(rt_tick_get()%10);
eMBMasterReqWriteHoldingRegister(1,usModbusUserData,3);
eMBMasterReqWriteMultipleHoldingRegister(1,usModbusUserData,3,2);
eMBMasterReqReadHoldingRegister(1,3,2);
eMBMasterReqReadWriteMultipleHoldingRegister(1,usModbusUserData,3,2,5,2);
3、在Modbus主机轮训线程中增加FreeModbus初始化(波特率115200、偶校验、RTU、串口2),及FreeModbus主机轮训方法;
代码如下:
//************************ Modbus主机轮训线程***************************
//函数定义: void thread_entry_ModbusMasterPoll(void* parameter)
//入口参数:无
//出口参数:无
注:Editor:Armink
Company: BXXJS
//******************************************************************
void thread_entry_ModbusMasterPoll(void* parameter)
eMBMasterInit(MB_RTU, 2, 115200,
MB_PAR_EVEN);
eMBMasterEnable();
eMBMasterPoll();
rt_thread_delay(DELAY_MB_MASTER_POLL);
4、打开Modbus slave软件,设置好串口信息及轮训的功能即可
5、此时在Modbus slave 软件中即可看到地址为3的保持寄存器值在自动变化,由于系统监控线程是每秒运行一次,所以命令每秒发一次,所以界面每秒变一次,效果如下:
大家有兴趣,还可以把系统监控线程中其他寄存器测试命令打开。
至此测试完毕,代码等过两天再上传到CSDN。
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见}

我要回帖

更多关于 freemodbus v1.5.zip 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信