|
查看: 4163|回复: 2

Zigbee程序根据按键切换deviceid和modeid遇到问题

[复制链接]

22

主题

35

回帖

288

积分

华贵铂金

积分
288
发表于 2024-9-29 14:27:51 | 显示全部楼层 |阅读模式 来自 广东深圳
大家好,
       最近想做个功能,用按键切换endpoint的device id,和modeid,当我按键切换好后重启,重启会根据条件判断,讲device id 和modeid 重新赋值,当设备已经入网,使用按键调用zb_factoryReset()离网并重启,重启时给mode id重新赋值的时候,程序会跑飞,芯片会变砖,除非重新烧录程序,排除了很久没有发现问题,难道它不允许我这样操作么,以下相关代码:a是从nv中读取的值,当我将以下代码注释了,就不会出现这个问题,所以非常疑惑,希望得到你们的帮助,谢谢


u8 modeid1[6] = {5, 'a','a','a','a','a'};
u8 modeid2[6] = {5, 'b','b','b','b','b'};



void test{
switch(a)
{
        case 1:
                memcpy(g_zcl_basicAttrs.modelId,modeid1,sizeof(modeid1));
                break;

        case 2:
                memcpy(g_zcl_basicAttrs.modelId,modeid2,sizeof(modeid2));
                break;

}       


29

主题

364

回帖

1167

积分

版主

积分
1167
发表于 2024-9-29 19:07:55 | 显示全部楼层 来自 上海
你好,
g_zcl_basicAttrs是全局变量,从上面的伪代码来看只是往全局变量赋值,这种操作应该是没有问题的。
运行后变砖,说明存在异常操作修改到了固件区,可以将固件读出来和原始的固件进行比较,再着重检查flash操作时是否有非法地址的情况。

22

主题

35

回帖

288

积分

华贵铂金

积分
288
 楼主| 发表于 2024-9-30 08:48:36 | 显示全部楼层 来自 广东深圳
TL_YB 发表于 2024-9-29 19:07
你好,
g_zcl_basicAttrs是全局变量,从上面的伪代码来看只是往全局变量赋值,这种操作应该是没有问题的。
...

感谢您的回答,可以用BTD读取出来对吧,怎么知道flash地址是合法的

本版积分规则

关注公众号
隐私政策|Telink forum

相关侵权、举报、投诉及建议等,请发 E-mail:forum@telink-semi.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|沪ICP备17008231号-1 |沪公网安备31011502403548号

在本版发帖返回顶部