您尚未登录。

楼主 # 2023-07-17 14:37:18

耳东陈
会员
注册时间: 2023-05-06
已发帖子: 10
积分: 11

pikabinding后args数据被改变

运行环境:pikapython+rtthread,keil5.38,测试目的:串口1接收数据后送去做CRC验证。
运行pikaRTFunctionModule.DEVICE.CRCCheck模块后,总是报硬件错误,跟踪调试发现,经过pika预编译后,args的值总会被莫名改变,请大神赐教。
py代码如下:

num_list = PikaStdData.List()
list1 = PikaStdData.List()
while True:       
    time_out = pikaRTFunctionModule.INTTIME.timer_check_flag()     # 定时2S
    if time_out == 1: 
        time_out = 0
        com1_comd = pikaRTFunctionModule.DEVICE.SerialOut('com1',cmd1)     #发送串口查询命令
        del com1_comd
    list1 = pikaRTFunctionModule.DEVICE.SerialIn('com1',13,num_list)    # 串口接收,接收数据存到list1列表里边
    if len(list1) >0 :
        num_list = []        
        crc_data = pikaRTFunctionModule.DEVICE.CRCCheck(list1)   #将list1数据送去做CRC校验
        print(crc_data)
        if crc_data == list1[-1]+(list1[-2]*256):
            print('ok')
                 
    thread.mdelay(100)

C程序代码如下:

#ifndef PIKA_MODULE_PIKARTFUNCTIONMODULE_DISABLE
void pikaRTFunctionModule_DEVICE_CRCCheckMethod(PikaObj *self, Args *args){
    PikaObj* da = args_getPtr(args, "da");                 //  刚进入时,args=0x20004248,args->firstNode =0x20004390
    int res = pikaRTFunctionModule_DEVICE_CRCCheck(self, da); //  该条执行结束时,args=0x3aa58503,args->firstNode =0xaaaaaaaa
    method_returnInt(args, res);      // 出现错误报警   hard fault on thread: main                      
}
method_typedef(
    pikaRTFunctionModule_DEVICE_CRCCheck,
    "CRCCheck", "da"
);

当全速运行metho_returnInt(args,res);后,出现报错:
psr: 0x21000000
pc: 0x000201ec
lr: 0x00014d2b
r12: 0x00000003
r03: 0x00000074
r02: 0x0b87d24b
r01: 0x20004494
r00: 0x3aa58503
hard fault on thread: main
根据lr查找程序代码,发现发生错误前入口函数是

PIKA_RES args_pushArg(Args* self, Arg* arg) {
    Arg* new_arg = NULL;
    if (!arg_isSerialized(arg)) {
        new_arg = arg_copy(arg);
        arg_deinit(arg);
    } else {
        new_arg = arg;
    }
    link_addNode(self, new_arg);
    return PIKA_RES_OK;                  //  发生报错前地址
}

请各位高手指教,该问题是如何导致的,如何排查,多谢。

离线

#1 2023-07-17 15:05:56

lyon1998
Moderator
注册时间: 2021-12-01
已发帖子: 108
积分: 55

Re: pikabinding后args数据被改变

看起来pikaRTFunctionModule_DEVICE_CRCCheck有可能把内存搞坏了,建议调试时,把pikaRTFunctionModule_DEVICE_CRCCheck的内部操作留空,试试还会不会有这样的现象

离线

楼主 #2 2023-07-17 16:16:06

耳东陈
会员
注册时间: 2023-05-06
已发帖子: 10
积分: 11

Re: pikabinding后args数据被改变

lyon1998 说:

看起来pikaRTFunctionModule_DEVICE_CRCCheck有可能把内存搞坏了,建议调试时,把pikaRTFunctionModule_DEVICE_CRCCheck的内部操作留空,试试还会不会有这样的现象

谢谢,问题已经找到,确实出现在pikaRTFunctionModule_DEVICE_CRCCheck里边,是一个数组越界了,没影响到CRC的计算,却影响了皮卡的指针。
另外如何在pikapython里边添加Python库?比如我想实现四字节数据转换成一个int数据,用struct库,那如何去添加这个库?有没有相关例程呢

离线

#3 2023-07-18 01:37:12

lyon1998
Moderator
注册时间: 2021-12-01
已发帖子: 108
积分: 55

Re: pikabinding后args数据被改变

@耳东陈
struct库目前已经在开发了,还没有完成,完成会作为标准库放出来,暂时的解决方案是自己做一个简易的c模块,例如 bytes2int4(b: bytes) -> int

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn