对CallGraph文件信息重布局
CallGraph文件信息重整前言在 RTT 系统下我们通常可以动态地查看剩余栈空间去约算最大栈空间,最近了解到可以通过查看 CallGraph 文件从静态角度分析,尝试结合 CallGraph 文件从另一个角度分析栈大小分配是否合理,实现动静结合。在查看CallGraph 文件时发现了一些不便的地方,然后对文件进行了一些重整理。 文件分析浏览文件检查Callgraph是否勾选,勾选后编译一次就可以看到Callgraph的htm文件生成了 MaximumStackUsage页面最上方给出了计算出最大栈深的一个函数,nrt_rms_entry函数最大使用2116字节的栈空间,那就先检查nrt_rms_entry所在线程分配的栈大小。 nrt_rms_entry是nrt_rms线程的入口函数,该线程当前分配了2600字节栈空间,仍有20%的冗余。 MutuallyRecursiveFunctions然后下面是递归函数 SVC_Handler和 ADC_IRQHandler,通过全局搜索,这两个函数都没有使用到。 FunctionPoints往下的内容是函数指针,文件列出了很长的函数列表 ...
看门狗忘记打开问题改善措施
看门狗忘记打开问题改善措施前情提要公司产品曾经有出货产品卡死而看门狗不作用的情况,原因是生产使用离线烧录器烧录程序,加上这是一款带电池供电的程序,烧录后一直处于调试模式,看门狗处于关闭状态。因此,后面程序都将调试模式下的看门狗打开。若需要调试时,通过定义宏来关闭看门狗。出货时需要将此宏注释 存在问题在该产品工程中,调试时通常的做法时定义关闭调试看门狗的宏。调试完毕后,若对工程不熟悉,在编译正式文件程序的时候很容易忘记将此宏定义注释掉,从而打开调试看门狗。编译生成的程序文件也无法看出是否已打开了调试看门狗。这样的程序在生产经过离线烧录器烧录后,如果程序出现异常就无法进行复位,有严重的后果 改善措施 将工程区分为Release版和Debug版,发布程序时在Release版下编译,调试程序时在Debug版下操作 关闭调试看门狗的宏仅在Debug版下定义,且不再通过手动注释的方式处理 编译的程序文件根据不同版本生成不同的文件,并对调试程序名称添加明显的调试字样 操作步骤创建 Target设置两个Target ,分别命名为Release和Debug 。不同的Target就是不同的工程配置,如 ...
ModbusPoll数据记录功能的一点注意事项
ModbusPoll数据记录功能的一点注意事项[toc] 前言为了不影响编码调试,通常下班后开始运行这些逻辑进行测试,一直到第二天早上再来看测试结果。像预付费表,不同时刻对应不同时区、方案、电价,使用ModbusPoll数据记录功能可以将每时刻的重要寄存器参数保存,如果发现结果异常时,可以从这些数据中回溯到出现问题的时刻,更快定位问题 之前有个仪表怀疑它有零漂,后面用ModbusPoll数据记录保存了一长时间的电流值,然后用EXCEL筛选过滤一下非0值,很快得到结果 做空调识别的时候也常用到这个功能去做数据分析,将空调运行时的有功无功数据读取下来,使用EXCEL绘制图形,功率的变化趋势就出来了 Modbus poll 数据记录功能可以将数据保存到 txt 文本或者Microsoft Excel 表格中,每个Modbus窗口单独保存为一个文件 保存为 TXT 文本文件 设置数据记录的速率、选择分隔符(固定宽度、逗号、制表符) 当数据变化时才记录 记录错误的报文 记录日期、毫秒 记录地址 在已有文件末尾追加记录 在凌晨12.00时创建新的文件来记录数据 保存为 Micro ...
使用CH341备份存储器数据
使用CH341备份存储器数据[toc] 前言仪表出现异常时,我们可能需要结合仪表当前的存储的数据进行分析异常,但是某些数据并不能直接获取,如备份区数据或者一些未映射的参数。这时候我们可能需要在这个发生异常的表上进行烧录一个调试程序,或者是进行一些测试操作。如果异常的仪表只有一台,这样的操作风险是很大的,很容易把原有的数据给覆盖或者修改,破坏了仪表异常环境 所以我们可以对这些存储器先进行一个备份,然后再对异常的仪表进行调试和测试操作。又或者备份后将数据写入到另一台仪表,在另一台仪表上调试测试,保证原表环境百分百不受影响(在另一台表调试时需要自行判断异常是否受外围影响,如电路或其他器件,计量芯片、外部时钟等,避免在新表上无法找到异常原因)。出现问题时,可以使用备份数据进行恢复 备份与写入操作仍有一定风险,一定要保证操作正确! CH341工具简介USB总线转接芯片 CH341 - 南京沁恒) CH341是一个USB总线转换芯片,可以实现USB转串口、打印口、并口、同步串口等功能,多个平台均有驱动。 支持同步串口也就说可以使用IIC或者SPI协议操作大部分存储芯片。 某宝上就有成品套装,关键词 ...
Profibus以及Profitrace简单介绍
PROFIBUS简介1987年,德国SIEMENS公司等13家企业和5家研究机构联合开发出了PROFIBUS,1989年,成为德国工业现场总线协议标准,1999年,PROFIBUS成为国际工业现场总线协议标准IEC61158的组成部分 (TYPEIII)。 PROFIBUS 是一种国际化、开放式、不依赖于设备生产商的现场总线标准。广泛适用于制造业自动化、流程工业 自动化和楼宇、交通、电力等其他领域自动化。 PROFIBUS是一种工业现场总线,它是一种串行通信协议,用于连接自动化系统中的数字设备。PROFIBUS的主要优点是它可以在工业环境中使用,具有高可靠性和抗干扰性。PROFIBUS的速度可以达到12Mbps。 PROFIBUS由三个兼容部分组成,即PROFIBUS-DP(Decentralized Periphery)、PROFIBUS-PA(Process Automation)、PROFIBUS-FMS(Fieldbus Message Specification)。 PROFIBUS-DP:用于传感器和执行器级的高速数据传输,它以DIN19245的第一部分为基础,根据其所需 ...
常用符号对应单词
符号 中 英 ? 疑问号 question ! 感叹号 exclamation . 点号 dot & 和 and / ampersand # 升音号 sharp / hash / hash tag $ 美元符号 dollar % 百分号 percent sign () 圆括号 open / close parenthesis [] 中括号 open / close bracket <> 尖括号 angle bracket {} 大括号 open / close brace / 斜杠与反斜杠 slash | forward slash / backslash ; 分号 semicolon : 冒号 colon , 逗号 comma “ “ 引号 quotation mark * 星号 asterisk ^ 脱字符号 caret ~ 波浪符号 tilde - 破折号 hyphen _ 下划线 undersc ...
Keil Breakpoints 窗口功能
前言前段时间有工程师分享了在 Keil MDK5 中 Breakpoints 断点设置窗口勾选 Write 功能以实现快速定位变量何时何处被修改,另外还提及到勾选 Read 、 Write 以及设置 Count 数值进行调试的方法。这实际上是给断点触发添加了一定的条件,减少程序不必要的中止。但仅仅设置 Read 、 Write 、 Coun 并不能完全满足我们日常开发调试的需求,下面将举例 引入情景1在 i==666 的时候触发断点 1234for(i=567; i<1234556; i++){//...} 情景2i 为 int 类型,在 i>60 的时候均触发断点,但 i 的值在 0-100 之间无规律变化 情景3i、j 为 int 类型,在第2次 i=1、j=10 的时候才触发断点 12345678910while(1){ for(i=0; i<100; i++) { for(j=0; j<100; j++) { //... } }} 上述3种情景或许可以计算 ...
软考中级嵌入式系统设计师-个人笔记
1. 计算机基础1.1 数值转换1.1.1 进制 概念 示例 数制 x进制 数码 如十六进制,有0123456789ABCDEF 基数 r=x,如 10 进制 r=10 位权 如十六进制,16^n,n是权重,从右往左就是0/1/2/3… 形式表示符 十六进制H/0x…、10进制D、8进制O/0…、二进制B 1.1.2 进制转换任意进制转换:R进制 -> 10进制 -> X进制① R进制 -> 10进制 按权展开法 如二进制,10100.01 = 1x2^4 + 0x2^3 + 1x2^2 + 1x2^0 + 0x2^(-1) + 1x2^(-2) = 16 + 4 + 1/4 = 20.25 ② 10进制 -> X进制 短除法:一直短除至 商比左边小 特殊:2进制 < - > 8进制每 3 位转 10 进制 如 10001110 -> 010 001 11 ...