首页 > 其他分享 >运行TMOS系统的MCU复位/死机问题排查

运行TMOS系统的MCU复位/死机问题排查

时间:2024-04-22 11:56:39浏览次数:24  
标签:TMOS 中断 死机 ram 复位 MCU EVT 应用层

目录

TMOS是沁恒自主产权的轻量级操作系统,。

如果用户在使用TMOS系统时,出现复位问题,最常见原因是应用层代码的ram越界访问、操作flash没有4字节对齐。其他复位问题,可以参考下方博客,利用定时器中断、看门狗中断和硬件错误中断来定位复位前PC指针指向哪里:

CH582 CH592 CH573 PC指针打印(排查程序运行+死循环指示) - debugdabiaoge - 博客园 (cnblogs.com)

CH57x/CH58x/CH32V wch risc-v 芯片hardfault问题追踪&程序卡死追踪 - iot-fan - 博客园 (cnblogs.com)

 

如果应用层代码确实查不出问题了,以下结合TMOS系统的特性,提供一些排查建议及代码注意点:

Ⅰ.运行TMOS系统的代码,一定要严格遵循的代码逻辑:

①不要在中断服务函数中调用任何关于BLE库的接口函数,如开关广播的接口、安排TMOS事件执行的接口等。TMOS系统存在于BLE库中,中断服务函数中的处理是脱离TMOS的监控的,在中断服务函数中调用库接口,可能会导致出中断时被库覆写,导致未知问题,比如说按逻辑应该会被执行的事件,出中断后被协议栈覆写清掉了,连锁后果未知。

②应用层传参时一定要传递正确的、注册后的taskID。不可以反复注册同一个taskID即任务ID。taskID是8位数据,反复注册会导致同一个taskID不断+1,注册到255后溢出会导致复位等不可预期的影响。

③eventID即事件ID的定义一定要按位定义。可以用第n个eventID就”1左移n位“的方式来定义,n从0计起。出错后,事件没有按规划的逻辑运行,影响未知。

④ram的使用率不要卡的太极限,建议预留5K+的ram给局部变量/应用层堆栈使用(应根据应用层代码自行压缩/扩大余量,以实际运行不出问题为准)。可能会导致复位。

⑤使用到休眠时,中断服务函数必须加highcode修饰,放到ram里运行。若不加highcode修饰,休眠唤醒后,flash需要一定的时间来运行稳定,期间在flash中执行代码,可能会导致复位。

⑥(使用24年以前的早期版本EVT需要检查)安全寄存器的使能/失能,一定要成对使用。使用早期版本的EVT需要注意,最新EVT中已经加了处理,没有配对使用时会编译报错。

 

Ⅱ.运行TMOS系统的代码,建议遵循的注意点:

①taskID的注册,需要占用一定量的协议栈ram(由BLE_MEMHEAP_SIZE划分),数量较多时占用协议栈ram多,可能会影响TMOS系统的运行。协议栈ram不足会导致无线通信异常,比如说无法广播。

②如果没有使用到休眠,理论上中断服务函数可以不加highcode修饰(ram够用的话能加就加,中断尽量快进快出)。不加highcode修饰的缺点是中断服务函数的处理会慢一点,实际测试运行不出问题就行。

③(使用24年以前的早期版本EVT需要检查)clk.c公共文件,在24年后的EVT包中有更新,建议更新到与最新EVT一致,对32K频偏校准代码进行了优化。不更新的话可能会导致32K偏差大,不会导致32K不跑。

④(使用24年以前的早期版本EVT需要检查)标准C的内存管理函数是脱离TMOS系统监管的,在编译后ram的剩余量中申请,ram余量较小时可能会出问题。建议换用tmos开头的内存管理函数,是在TMOS系统监管下管理内存的,不会导致内存出错。最新EVT中在ld文件下加了应用层堆栈保护,不过还是建议用tmos开头的内存管理函数()。

标签:TMOS,中断,死机,ram,复位,MCU,EVT,应用层
From: https://www.cnblogs.com/JayWellsBlog/p/18130691

相关文章

  • centos6.5重启docker容器死机问题
      概述近期在整理服务问题,使用docker容器重新部署服务。过程中有不少坑,主要是系统配置和系统版本的问题。环境CentOSrelease6.5(Final)dockerversion1.7.1问题现象使用restart命令重启docker容器,系统突然卡死,并不断重启,重启3次后恢复。检查系统日志“/var/log/......
  • Linux 桌面系统死机解决方案
    系统环境:openSUSETW常规的方法是切tty然后终止kill掉占用过多的程序这里只介绍最狠最有效的办法,使用sysrq关机步骤如果你电脑现在死机了,请现在常按电源键强制关机如果你的电脑正常,请打开终端,在/etc/sysctl.conf或/etc/sysctl.d/70-yast.conf添加或修改为kern......
  • 点阵数显驱动IC/抗干扰数显驱动VK1650 SOP16/DIP16,内部集成有MCU数字接口、数据锁存
    产品品牌:永嘉微电/VINKA产品型号:VK1650封装形式:SOP16/DIP16概述VK1650是一种带键盘扫描电路接口的LED驱动控制专用芯片,内部集成有数据锁存器、LED驱动、键盘扫描等电路。SEG脚接LED阳极,GRID脚接LED阴极,可支持8SEGx4GRID的点阵LED显示。最大支持7x4按键。本芯片性能稳定质量......
  • 域控软件安全隔离关键技术剖析:MCU域 VS SOC域
    安全隔离的需求    功能安全开发中,软件阶段由软件V模型左边的软件安全需求SSR开始。SSR是从技术安全需求TSR中提取出软件的功能安全需求,大多数情况下具有不同的ASIL等级。图1 功能安全软件开发V模型    随后,软件安全需求会被分配到软件架构中的软件组件中。......
  • CPU、DSP、MPU、MCU、SOC、FPGA、ARM等概念
    CPU、DSP、MPU、MCU、SOC、FPGA、ARM等概念参考资料:百度知道“stm32和cortexm3是什么关系”:https://zhidao.baidu.com/question/178510430.html知乎“DSP与MCU与ARM与FPGA有什么区别?”:https://www.zhihu.com/question/278500219/answer/405183375CSDN“MCU和SOC的区别”:ht......
  • 高性价比国产安全MCU-LKT6850
    LKT6850是一款以32位ARMCortexTM-M0处理器内核为基础的高性价比安全MCU。LKT6850具有最高64KBFlash、4KBRAM、48MHZ工作频率,具有丰富的外设资源供开发人员使用。芯片可实现DES/3DES/AES/SM4等对称算法,可实现多种安全身份认证、数据加解密等功能。该产品广泛应用于各种产品和行业......
  • 神奇!autoTrimCurve(curve,parameter1)中参数parameter1的意义
    autoTrimCurve命令解释使用python进行ABAQUS二次开发时,建立草图用到自动裁剪命令,rpy文件中记录的是s.autoTrimCurve(curve1=g[4],point1=(-12.5237464904785,0.153462409973145))关键词 point1需要输入曲线上某点的坐标值,即一对浮点数由于我的需求大量参数化建模,每次生......
  • STM32串行通信驱动LCD12864(使用5V电源,驱动信号用5VFT的引脚(3.3V MCU))
    #include"spi.h"voidSPI_GPIO_Init(void){//hardwaremakePSBlowtoenableserialcommunicationGPIO_InitTypeDefGPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStruct.GPIO_Mode=GPIO_Mo......
  • ERROR: No matching distribution found for pymcubes
    (pytorch3drecgan)ubuntu@ubuntu:~/lcx/3D-RecGAN-pytorch-masterv3$pipinstallpymcubesWARNING:Keyringisskippedduetoanexception:Failedtounlockthecollection!WARNING:Retrying(Retry(total=4,connect=None,read=None,redirect=None,status=None))......
  • 【NodeMcu-ESP8266】引脚使用参考指南——推荐收藏
    目录概述     一、ESP826612—E/F模组引脚图二、ESP826612-E/FNodeMCU引脚图三、ESP8266coreforArduino源码关于NodeMCU引脚设置的定义四、ESP8266-NodeMCU引脚特性及使用建议五、需要特别提醒和强调的几个具体问题参考文档概述         ......