当前位置: 首页 > news >正文

新乡营销型网站建设做视频网站投入要多少

新乡营销型网站建设,做视频网站投入要多少,网站用户体验分析怎么做,手机网站开发下拉刷新程序莫名死机跑飞#xff0c;不知道问题#xff0c;那么下面教你回溯错误源 回溯案发现场一、修改HardFault_Handler1. xx.s 在启动文件#xff0c;找到HardFault_Handler。并修改。2. 定义HardFault_Handler_C函数。#xff08;主要是打印信息并存储Flash#xff09;3. 根… 程序莫名死机跑飞不知道问题那么下面教你回溯错误源 回溯案发现场一、修改HardFault_Handler1. xx.s 在启动文件找到HardFault_Handler。并修改。2. 定义HardFault_Handler_C函数。主要是打印信息并存储Flash3. 根据回读PC和LR地址通过MAP文件找到对应位置判断引起硬件错误的原因。二、定义DefaultISR查看是否有中断未声明三、如果使用了RTX则需要重定义osRtxErrorNotify函数。四、读取错误信息举例jianqiang.xue 一、修改HardFault_Handler 1. xx.s 在启动文件找到HardFault_Handler。并修改。 HardFault_Handler\PROCEXPORT HardFault_Handler [WEAK]MOV R0, spIMPORT HardFault_Handler_CBL HardFault_Handler_CENDP2. 定义HardFault_Handler_C函数。主要是打印信息并存储Flash void HardFault_Handler_C(unsigned int* hardfault_args) {HardFault_t info;info.r0 ((unsigned long)hardfault_args[0]);info.r1 ((unsigned long)hardfault_args[1]);info.r2 ((unsigned long)hardfault_args[2]);info.r3 ((unsigned long)hardfault_args[3]);info.r12 ((unsigned long)hardfault_args[4]);info.lr ((unsigned long)hardfault_args[5]);info.pc ((unsigned long)hardfault_args[6]);info.psr ((unsigned long)hardfault_args[7]);info.BFAR (*((volatile unsigned long*)(0xE000ED38)));info.CFSR (*((volatile unsigned long*)(0xE000ED28)));info.HFSR (*((volatile unsigned long*)(0xE000ED2C)));info.DFSR (*((volatile unsigned long*)(0xE000ED30)));info.AFSR (*((volatile unsigned long*)(0xE000ED3C)));info.SCB_SHCSR SCB-SHCSR;uint8_t data[70], len 0;len snprintf((char *)data,70, \n[Hard fault handler - all num in hex] %x\r\n, *hardfault_args);McuUartWriteString(ble_uart, data, len);len snprintf((char *)data,70, R0 %x\r\nR1 %x\r\nR2 %x\r\nR3 %x\r\n, info.r0, info.r1, info.r2, info.r3);McuUartWriteString(ble_uart, data, len);len snprintf((char *)data,70, R12 %x\r\n, info.r12);McuUartWriteString(ble_uart, data, len);len snprintf((char *)data,70, LR [R14] %x,subroutine call return address\r\n, info.lr);McuUartWriteString(ble_uart, data, len);len snprintf((char *)data,70, PC [R15] %x,program counter\r\n, info.pc);McuUartWriteString(ble_uart, data, len);len snprintf((char *)data,70, PSR %x\r\nBFAR %lx\r\n, info.psr, (*((volatile unsigned long*)(0xE000ED38))));McuUartWriteString(ble_uart, data, len);len snprintf((char *)data,70, CFSR %lx\r\nHFSR %lx\r\nDFSR %lx\r\n,(*((volatile unsigned long*)(0xE000ED28))), (*((volatile unsigned long*)(0xE000ED2C))), (*((volatile unsigned long*)(0xE000ED30))));McuUartWriteString(ble_uart, data, len);len snprintf((char *)data,70, AFSR %lx\r\nSCB_SHCSR %x\r\n,(*((volatile unsigned long*)(0xE000ED3C))), SCB-SHCSR);McuUartWriteString(ble_uart, data, len);info.event 0;kv_set_env(0xFF00, info, sizeof(HardFault_t)); // 记录到Flashwhile (1); }3. 根据回读PC和LR地址通过MAP文件找到对应位置判断引起硬件错误的原因。 二、定义DefaultISR查看是否有中断未声明 #define VECTORNUM (*(volatile uint32_t*)(0xE000ED04)) void DefaultISR(void) {HardFault_t info;uint8_t data[50], len;len sprintf((char *)data, \n default_isr %d,%x \n, (uint8_t)VECTORNUM, (uint32_t)VECTORNUM);McuUartWriteString(ble_uart, data, len);info.event 1;info.VECTORNUM_ADDR VECTORNUM;kv_set_env(0xFF00, info, sizeof(HardFault_t)); // 记录到Flashwhile(1); }根据打印出来的数据判断VECTOR是怎么原因触发中断的。查对应芯片向量表得知导致原因。 三、如果使用了RTX则需要重定义osRtxErrorNotify函数。 uint32_t osRtxErrorNotify(uint32_t code, void* object_id) {HardFault_t info;(void)object_id;uint8_t data[100], len 0;switch (code) {case osRtxErrorStackOverflow:len sprintf((char *)data, \n Stack overflow detected for thread (thread_id0x%x)\n, (uint32_t)object_id);McuUartWriteString(ble_uart, data, len);// Stack overflow detected for thread (thread_idobject_id)break;case osRtxErrorISRQueueOverflow:len sprintf((char *)data, \n ISR Queue overflow detected when inserting object 0x%x\n, (uint32_t)object_id);McuUartWriteString(ble_uart, data, len);// ISR Queue overflow detected when inserting object (object_id)break;case osRtxErrorTimerQueueOverflow:len sprintf((char *)data, \n User Timer Callback Queue overflow detected for timer (timer_id0x%x)\n, (uint32_t)object_id);McuUartWriteString(ble_uart, data, len);// User Timer Callback Queue overflow detected for timer (timer_idobject_id)break;case osRtxErrorClibSpace:len sprintf((char *)data, \n Standard C/C library libspace not available: increase OS_THREAD_LIBSPACE_NUM 0x%x\n, (uint32_t)object_id);McuUartWriteString(ble_uart, data, len);// Standard C/C library libspace not available: increase OS_THREAD_LIBSPACE_NUMbreak;case osRtxErrorClibMutex:len sprintf((char *)data, \n Standard C/C library mutex initialization failed 0x%x\n, (uint32_t)object_id);McuUartWriteString(ble_uart, data, len);// Standard C/C library mutex initialization failedbreak;default:// Reservedbreak;}info.event 2;info.RTX_CODE code;info.RTX_OBJ_ID (uint32_t)object_id;kv_set_env(0xFF00, info, sizeof(HardFault_t)); // 记录到Flashfor (;;) {}// return 0U; }四、读取错误信息 采用ATCMD读取如下 #ifdef ATCMD_EN // 在功能模块中定义一个标准函数 static int atcmd_backtrack(atcmd_pack_t *pack) {HardFault_t *info NULL;uint8_t buff[100], len;info kv_get_env(0xFF00);if (info NULL) {strcat((char*)buff, AT_ERROR);} else {if (info-event 0) {len snprintf((char *)buff, 100, R0 %x\r\nR1 %x\r\nR2 %x\r\nR3 %x\r\nR12 %x\r\n, info-r0, info-r1, info-r2, info-r3, info-r12);pack-reply(buff, strlen((char*)buff));len snprintf((char *)buff, 100, LR [R14] %x,subroutine call return address\r\n, info-lr);pack-reply(buff, strlen((char*)buff));len snprintf((char *)buff, 100, PC [R15] %x,program counter\r\n, info-pc);pack-reply(buff, strlen((char*)buff));len snprintf((char *)buff, 100, PSR %x\r\nBFAR %lx\r\n, info-psr, (*((volatile unsigned long*)(0xE000ED38))));pack-reply(buff, strlen((char*)buff));len snprintf((char *)buff, 100, CFSR %lx\r\nHFSR %lx\r\nDFSR %lx\r\n,(*((volatile unsigned long*)(0xE000ED28))), (*((volatile unsigned long*)(0xE000ED2C))), (*((volatile unsigned long*)(0xE000ED30))));pack-reply(buff, strlen((char*)buff));len snprintf((char *)buff, 100, AFSR %lx\r\nSCB_SHCSR %x\r\n,(*((volatile unsigned long*)(0xE000ED3C))), SCB-SHCSR);pack-reply(buff, strlen((char*)buff));memset(buff, 0, 100);} else if (info-event 1) {len snprintf((char *)buff, 100, \n default_isr %d,%x \n, (uint8_t)info-VECTORNUM_ADDR, (uint32_t)info-VECTORNUM_ADDR);} else if (info-event 2) {len snprintf((char *)buff, 100, \n RTX_ERR CODE0x%x, OBJ_ID0x%x \n, (uint8_t)info-RTX_CODE, (uint32_t)info-RTX_OBJ_ID);}strcat((char*)buff, AT_OK);}pack-reply(buff, strlen((char*)buff));return 0; }// 注册AT指令传入标准函数 ATCMD_INIT(ATBACKTRACK?, atcmd_backtrack); #endif举例 /********************************************************************************* file backtrack.c* author jianqiang.xue* Version V1.0.0* Date 2023-02-10* brief 记录错误原因方便追溯问题源********************************************************************************/ #include stdio.h #include stdint.h #include stdbool.h #include string.h#include cmsis_os2.h #include os_api.h #include SKEAZ1284.h #include atcmd_slave.h // 自行添加[Module\atcmd\atcmd_slave.c]#include kv_sys.h #include mcu_uart.h #include ecu_cc2642.h #include edebug.htypedef struct __PACKED {uint32_t event; // 0--HardFault 1--DefaultISR 2--osRtxErrorNotify// HardFault_Handleruint32_t r0;uint32_t r1;uint32_t r2;uint32_t r3;uint32_t r12;uint32_t lr;uint32_t pc;uint32_t psr;uint64_t BFAR;uint64_t CFSR;uint64_t HFSR;uint64_t DFSR;uint64_t AFSR;uint64_t SCB_SHCSR;// DefaultISRuint32_t VECTORNUM_ADDR;// osRtxErrorNotifyuint32_t RTX_CODE;uint32_t RTX_OBJ_ID; } HardFault_t;void HardFault_Handler_C(unsigned int* hardfault_args) {HardFault_t info;info.r0 ((unsigned long)hardfault_args[0]);info.r1 ((unsigned long)hardfault_args[1]);info.r2 ((unsigned long)hardfault_args[2]);info.r3 ((unsigned long)hardfault_args[3]);info.r12 ((unsigned long)hardfault_args[4]);info.lr ((unsigned long)hardfault_args[5]);info.pc ((unsigned long)hardfault_args[6]);info.psr ((unsigned long)hardfault_args[7]);info.BFAR (*((volatile unsigned long*)(0xE000ED38)));info.CFSR (*((volatile unsigned long*)(0xE000ED28)));info.HFSR (*((volatile unsigned long*)(0xE000ED2C)));info.DFSR (*((volatile unsigned long*)(0xE000ED30)));info.AFSR (*((volatile unsigned long*)(0xE000ED3C)));info.SCB_SHCSR SCB-SHCSR;uint8_t data[70], len 0;len snprintf((char *)data,70, \n[Hard fault handler - all num in hex] %x\r\n, *hardfault_args);McuUartWriteString(ble_uart, data, len);len snprintf((char *)data,70, R0 %x\r\nR1 %x\r\nR2 %x\r\nR3 %x\r\n, info.r0, info.r1, info.r2, info.r3);McuUartWriteString(ble_uart, data, len);len snprintf((char *)data,70, R12 %x\r\n, info.r12);McuUartWriteString(ble_uart, data, len);len snprintf((char *)data,70, LR [R14] %x,subroutine call return address\r\n, info.lr);McuUartWriteString(ble_uart, data, len);len snprintf((char *)data,70, PC [R15] %x,program counter\r\n, info.pc);McuUartWriteString(ble_uart, data, len);len snprintf((char *)data,70, PSR %x\r\nBFAR %lx\r\n, info.psr, (*((volatile unsigned long*)(0xE000ED38))));McuUartWriteString(ble_uart, data, len);len snprintf((char *)data,70, CFSR %lx\r\nHFSR %lx\r\nDFSR %lx\r\n,(*((volatile unsigned long*)(0xE000ED28))), (*((volatile unsigned long*)(0xE000ED2C))), (*((volatile unsigned long*)(0xE000ED30))));McuUartWriteString(ble_uart, data, len);len snprintf((char *)data,70, AFSR %lx\r\nSCB_SHCSR %x\r\n,(*((volatile unsigned long*)(0xE000ED3C))), SCB-SHCSR);McuUartWriteString(ble_uart, data, len);info.event 0;kv_set_env(0xFF00, info, sizeof(HardFault_t)); // 记录到Flashwhile (1); }#define VECTORNUM (*(volatile uint32_t*)(0xE000ED04)) void DefaultISR(void) {HardFault_t info;uint8_t data[50], len;len sprintf((char *)data, \n default_isr %d,%x \n, (uint8_t)VECTORNUM, (uint32_t)VECTORNUM);McuUartWriteString(ble_uart, data, len);info.event 1;info.VECTORNUM_ADDR VECTORNUM;kv_set_env(0xFF00, info, sizeof(HardFault_t)); // 记录到Flashwhile(1); }uint32_t osRtxErrorNotify(uint32_t code, void* object_id) {HardFault_t info;(void)object_id;uint8_t data[100], len 0;switch (code) {case osRtxErrorStackOverflow:len sprintf((char *)data, \n Stack overflow detected for thread (thread_id0x%x)\n, (uint32_t)object_id);McuUartWriteString(ble_uart, data, len);// Stack overflow detected for thread (thread_idobject_id)break;case osRtxErrorISRQueueOverflow:len sprintf((char *)data, \n ISR Queue overflow detected when inserting object 0x%x\n, (uint32_t)object_id);McuUartWriteString(ble_uart, data, len);// ISR Queue overflow detected when inserting object (object_id)break;case osRtxErrorTimerQueueOverflow:len sprintf((char *)data, \n User Timer Callback Queue overflow detected for timer (timer_id0x%x)\n, (uint32_t)object_id);McuUartWriteString(ble_uart, data, len);// User Timer Callback Queue overflow detected for timer (timer_idobject_id)break;case osRtxErrorClibSpace:len sprintf((char *)data, \n Standard C/C library libspace not available: increase OS_THREAD_LIBSPACE_NUM 0x%x\n, (uint32_t)object_id);McuUartWriteString(ble_uart, data, len);// Standard C/C library libspace not available: increase OS_THREAD_LIBSPACE_NUMbreak;case osRtxErrorClibMutex:len sprintf((char *)data, \n Standard C/C library mutex initialization failed 0x%x\n, (uint32_t)object_id);McuUartWriteString(ble_uart, data, len);// Standard C/C library mutex initialization failedbreak;default:// Reservedbreak;}info.event 2;info.RTX_CODE code;info.RTX_OBJ_ID (uint32_t)object_id;kv_set_env(0xFF00, info, sizeof(HardFault_t)); // 记录到Flashfor (;;) {}// return 0U; }#ifdef ATCMD_EN // 在功能模块中定义一个标准函数 static int atcmd_backtrack(atcmd_pack_t *pack) {HardFault_t *info NULL;uint8_t buff[100], len;info kv_get_env(0xFF00);if (info NULL) {strcat((char*)buff, AT_ERROR);} else {if (info-event 0) {len snprintf((char *)buff, 100, R0 %x\r\nR1 %x\r\nR2 %x\r\nR3 %x\r\nR12 %x\r\n, info-r0, info-r1, info-r2, info-r3, info-r12);pack-reply(buff, strlen((char*)buff));len snprintf((char *)buff, 100, LR [R14] %x,subroutine call return address\r\n, info-lr);pack-reply(buff, strlen((char*)buff));len snprintf((char *)buff, 100, PC [R15] %x,program counter\r\n, info-pc);pack-reply(buff, strlen((char*)buff));len snprintf((char *)buff, 100, PSR %x\r\nBFAR %lx\r\n, info-psr, (*((volatile unsigned long*)(0xE000ED38))));pack-reply(buff, strlen((char*)buff));len snprintf((char *)buff, 100, CFSR %lx\r\nHFSR %lx\r\nDFSR %lx\r\n,(*((volatile unsigned long*)(0xE000ED28))), (*((volatile unsigned long*)(0xE000ED2C))), (*((volatile unsigned long*)(0xE000ED30))));pack-reply(buff, strlen((char*)buff));len snprintf((char *)buff, 100, AFSR %lx\r\nSCB_SHCSR %x\r\n,(*((volatile unsigned long*)(0xE000ED3C))), SCB-SHCSR);pack-reply(buff, strlen((char*)buff));memset(buff, 0, 100);} else if (info-event 1) {len snprintf((char *)buff, 100, \n default_isr %d,%x \n, (uint8_t)info-VECTORNUM_ADDR, (uint32_t)info-VECTORNUM_ADDR);} else if (info-event 2) {len snprintf((char *)buff, 100, \n RTX_ERR CODE0x%x, OBJ_ID0x%x \n, (uint8_t)info-RTX_CODE, (uint32_t)info-RTX_OBJ_ID);}strcat((char*)buff, AT_OK);}pack-reply(buff, strlen((char*)buff));return 0; }// 注册AT指令传入标准函数 ATCMD_INIT(ATBACKTRACK?, atcmd_backtrack); #endif
http://www.hkea.cn/news/14360261/

相关文章:

  • 黄冈网站推广软件下载做最最优秀的视频网站有哪些
  • 只做正品的网站海南省海口市网站建设
  • 导购类网站怎么做的烫画图案设计网站
  • 建站平台工具制作公司宣传册
  • 找兼职工作在家做正规网站网络游戏美术设计专业
  • 西宁高端网站制作公司wordpress 砍价插件
  • 成都 网站设计wordpress 两个数据库 互通
  • 站长之家0廊坊网站制作官网
  • 股票交易网站建设攻略网站的建设
  • 红色网站呢西安做网站的公司维护
  • 江苏网站建设费用宁夏建设教育协会网站
  • 如何在网站中做内部链接做婚庆网站
  • 做药的常用网站大型网站运营步骤
  • 网站小图标素材邯郸建设网站制作
  • 做网站如何获取收益一个网站做app
  • 北京模板建站软件建设网站的推广的软文
  • 网站建设提成微信自动加好友软件
  • 做商务楼房型图网站阿里巴巴国际站可以做网站吗
  • 网站建设顺德外包公司和劳务派遣哪个好一点
  • 奢华网站模板防wordpress花园
  • 网站建设推广ppt个人网页在线制作app
  • 泾川县建设局网站html5的优点
  • 连云港网站建设多少钱贵州省建设局八大员报名网站
  • 网站分析工具有哪些都昌网站建设
  • 网站开发前端好还是后端好福建seo搜索引擎优化
  • 做网站的网站源码wordpress 音频
  • 原创网站源码化工企业网站建设
  • 网站建设与管理自考本手机建设网站自适应的好处
  • 网站-网站建设定制成都市建设局官网
  • 公司网站建设成都wordpress 多站点教程