标题: MCU回调函数3个参数的坑 [打印本页]

作者: gongzhu    时间: 2020-6-14 17:04
标题: MCU回调函数3个参数的坑
玩stc15的4串口通信,down了个单串口通信的案例,改成4串口。里面有个串口发送处理的回调函数,参数是字符串指针和字符串长度。

typedef uchar(*MB_SendDatas)(uchar *,uchar) ;

现在4串口需增加个串口号参数:
typedef uchar(*MB_SendDatas)(uchar *,uchar,uchar) ;

编译报错:error C212: indirect call: parameters do not fit within registers

定义增加了重入 reentrant 编译能通过,运行发送完正常数据后总会跟一串的0x00,调试发现字符串长度在调用 MB_SendDatas 之前是正常的,但调用之后就改变了。

不得已改回原本的两个参数,把串口号改成全局变量测试正常。

作者: 神出没    时间: 2020-6-15 08:38
感觉用51的话,太高级的C语言特性估计支持不太好,有没有大神看看是什么问题
作者: shushikuan    时间: 2020-6-16 13:12
本帖最后由 shushikuan 于 2020-6-16 13:41 编辑

使用reentrant 关键字,需要在startup.a51中指定参数堆栈首地址。比如STC15W408AS 的XRAM是 256字节,在"Large variables in XDATA" 模式时,要写成  [  XBPSTACKTOP   EQU    0FFH+1; 将堆栈顶设置为最高地址+1. ]
            
作者: 2207825975    时间: 2020-6-16 15:12
是的,我也经常遇到这种问题
作者: 2207825975    时间: 2020-6-16 15:12
是的,我也经常遇到这种问题
作者: 淡定120    时间: 2020-8-20 14:19
一样的问题
作者: jjwangxu2008    时间: 2020-8-21 13:09
是的,我也经常遇到这种问题




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1