标题:
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