CH582M 蓝牙设备接入后 全局变量赋值异常

你好,最近项目中遇到一个问题:CH582M 蓝牙没有设备接入时(广播中)程序运行正常。只要有蓝牙设备接入后,有些全局BUF读出来的数值时异常的。这边有些疑问要请教下:

  1. HIGH CODE代码时赋值到RAM执行的,那蓝牙设备接入后是否有HIGH CODE 代码?

  2. CH582M RAM是32KB 我编译的时候是21K大概64%,那么编译完的21K是否有包括HIGH CODE代码?

  3. CH582M HIGH CODE 代码大概有多少KB ?是否可以修改???

蓝牙是有代码工作在RAM中的,编译完成后还剩余64%,RAM是够用的,不需要针对RAM进行修改。

蓝牙的广播与连接理论上不会造成BUF的值异常,建议将BUF值异常情况贴出来我们进行查看。

同时需要注意,在蓝牙的工程目录下,需要通过TMOS系统管理所有的任务,否则可能出现各种各样的问题。

WCH TMOS用法详解 - debugdabiaoge - 博客园 (cnblogs.com)


BUF值读出来都是2839~2841之间浮动(已转换成%d)。


就是使用官方给的示例(BackupUpgrade_OTA)做的修改。是用TMOS系统


  1. HIGH CODE代码时赋值到RAM执行的,那蓝牙设备接入后是否有HIGH CODE 代码?

  2. CH582M RAM是32KB 我编译的时候是21K大概64%,那么编译完的21K是否有包括HIGH CODE代码?

  3. CH582M HIGH CODE 代码大概有多少KB ?是否可以修改???

这3个问题可以帮忙解答下吗?



1、蓝牙连接前与连接后都会有HIGHCODE代码,如开启睡眠后,睡眠函数就是HIGHCODE修改,代表了放在RAM中运行。RAM总共32K,包括了蓝牙库使用,变量使用和HIGHCODE使用到;

2、包括有HIGHCODE代码;

3、HIGHCODE代码可以修改,找到函数名上面带有HIGHCODE修饰的将它删除就可以了,但是不建议这样做,因为默认的例程带有HIGHCODE代表对运行速度有要求的,需要快速运行(蓝牙对运行速度有要求),同时也没必要删除,因为你的RAM完全够用(占用64%)。如果以后RAM不够用了,也是应该从应用层的角度出发去删减RAM代码的占用。



哦,谢谢解答!之前我还以为是RAM问题。那你可以帮忙分析下这个问题吗?为什么无蓝牙设备接入都正常,蓝牙设备接入后有些BUF值读出来都在2839~2841之间跳动(已转换成10进制)。


BUF是做了什么处理的,具体功能描述一下,BUF的变化也截图贴出来看看。

或者可以发送邮件至邮箱lpc@wch.cn,程序贴出来我们帮忙看看情况。



OK。已发送至你的邮箱!


BLE_BUFF_MAX_LEN的取值范围是27~251。我本来填的是251,会出现我说的异常现象;现在改成27程序就都运行正常了。这是什么原理???image.png


主从机连接之后会进入交互MTU的回调打印exchange MTU的数值,检查一下是多少。

邮件已回复,请查看。


只有登录才能回复,可以选择微信账号登录