查看: 876|回复: 9

modbus从站库导出keill编译错误

[复制链接]

2

主题

9

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2022-4-9 10:37:01 | 显示全部楼层 |阅读模式
直接用天问编译没有问题,导出后编译出错
回复

使用道具 举报

2

主题

9

帖子

52

积分

注册会员

Rank: 2

积分
52
 楼主| 发表于 2022-4-9 10:38:44 | 显示全部楼层
mylib/MB_Slave.h(79): error C141: syntax error near '0x0400', expected 'bit'
Target not created.
回复

使用道具 举报

2

主题

9

帖子

52

积分

注册会员

Rank: 2

积分
52
 楼主| 发表于 2022-4-9 10:39:54 | 显示全部楼层
__at(0x0400) xdata uint16 usSRegInBuf[S_REG_INPUT_NREGS]; //输入寄存器缓存
__at(0x0500) xdata uint16 usSRegHoldBuf[S_REG_HOLDING_NREGS];   //保持寄存器缓存
__at(0x0600) xdata uint8 ucSCoilBuf[(S_COIL_NCOILS % 8) ? ((S_COIL_NCOILS / 8) + 1) : (S_COIL_NCOILS / 8)];//线圈缓存
__at(0x0700) xdata uint8 ucSDiscInBuf[(S_DISCRETE_INPUT_NDISCRETES % 8) ? ((S_DISCRETE_INPUT_NDISCRETES / 8) + 1) : (S_DISCRETE_INPUT_NDISCRETES / 8)];//从机离散量

__at(0x0200) xdata uint8 ModBus_temp[256];      //串口临时接收数组
__at(0x0300) xdata uint8 ModBus_data[256];      //校验成功接收到数组
__at(0x0000) xdata uint8 ModBus_Send_data[256]; //发送数组
__at(0x0100) xdata uint8 data_temp[256];        //大数组不能跨页,固定地址
报错的是这几句
回复

使用道具 举报

2

主题

9

帖子

52

积分

注册会员

Rank: 2

积分
52
 楼主| 发表于 2022-4-9 10:52:44 | 显示全部楼层
用网页版的好好搭搭编译也不行
回复

使用道具 举报

1

主题

4

帖子

51

积分

注册会员

Rank: 2

积分
51
发表于 2022-4-9 15:31:08 | 显示全部楼层
本帖最后由 ylp92155 于 2022-4-9 15:45 编辑

uint16 usSRegInBuf[S_REG_INPUT_NREGS]; //输入寄存器缓存
这么改,编译通过
哪位大侠能解释一下
这样跟原来有什么区别?

程序是stc8的,编译使用在stc32
回复

使用道具 举报

2

主题

9

帖子

52

积分

注册会员

Rank: 2

积分
52
 楼主| 发表于 2022-4-14 17:41:17 | 显示全部楼层
你好,我的删掉还有其他的报错。能把你的MB_Slave.h分享出来吗,谢谢
回复

使用道具 举报

2

主题

9

帖子

52

积分

注册会员

Rank: 2

积分
52
 楼主| 发表于 2022-4-29 10:31:19 | 显示全部楼层
__at(0x0400) xdata 删掉之后编译是通过了,但是下载到单片机用不了modbus,不通讯时是正常的,一通讯就程序错乱了
回复

使用道具 举报

8

主题

46

帖子

901

积分

版主

Rank: 7Rank: 7Rank: 7

积分
901
发表于 2022-5-3 13:06:47 | 显示全部楼层
是这样的,天问STC8H基于SDCC编译器语法,用于KEIL,当然有很多语法差异。这些差异就包括__at这些细节,天问Modbus数组内存是强行指定Xdata地址,KEIL如果强行指定数组地址,详见KEIL编程手册或百度。
如果是使用STC32G,因天问Block也用了KEIL编译器,因此代码可以兼容。STC32G的MODBUS,见STC手册最新版,虽然仅实现了03H和10H两个指令,但示范意义很强,因32G都是用的KEIL编译器,可以直接拷贝到天问Block中使用。使用KEIL编译器,别忘了购买正版。
SDCC和GCC是免费的。KEIL评估版免费,但会限制ROM编译不能超过2K
回复

使用道具 举报

2

主题

9

帖子

52

积分

注册会员

Rank: 2

积分
52
 楼主| 发表于 2022-5-21 13:06:28 | 显示全部楼层
好的,明白了,谢谢
回复

使用道具 举报

0

主题

6

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2023-3-3 13:35:06 | 显示全部楼层
manzunzu 发表于 2022-4-9 10:39
__at(0x0400) xdata uint16 usSRegInBuf[S_REG_INPUT_NREGS]; //输入寄存器缓存
__at(0x0500) xdata uint16 ...

从站文件能共享下吗?  我的跑不起来
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2024-3-28 17:01 , Processed in 0.361270 second(s), 22 queries .

Powered by Discuz!

© 2001-2024 Comsenz Inc.

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