看门狗忘记打开问题改善措施
看门狗忘记打开问题改善措施
前情提要
公司产品曾经有出货产品卡死而看门狗不作用的情况,原因是生产使用离线烧录器烧录程序,加上这是一款带电池供电的程序,烧录后一直处于调试模式,看门狗处于关闭状态。因此,后面程序都将调试模式下的看门狗打开。若需要调试时,通过定义宏来关闭看门狗。出货时需要将此宏注释
存在问题
在该产品工程中,调试时通常的做法时定义关闭调试看门狗的宏。调试完毕后,若对工程不熟悉,在编译正式文件程序的时候很容易忘记将此宏定义注释掉,从而打开调试看门狗。编译生成的程序文件也无法看出是否已打开了调试看门狗。这样的程序在生产经过离线烧录器烧录后,如果程序出现异常就无法进行复位,有严重的后果
改善措施
- 将工程区分为
Release
版和Debug
版,发布程序时在Release
版下编译,调试程序时在Debug
版下操作 - 关闭调试看门狗的宏仅在
Debug
版下定义,且不再通过手动注释的方式处理 - 编译的程序文件根据不同版本生成不同的文件,并对调试程序名称添加明显的调试字样
操作步骤
创建 Target
设置两个Target
,分别命名为Release
和Debug
。不同的Target就是不同的工程配置,如优化、定义、编译、链接等等。
以某个工程为例,在菜单栏中找到Manage Project Items
双击Project Targets
组下的目标名称,将工程名称修改为Release
,并点击虚线方框添加一项,命名为Debug
这时候菜单栏就有两个Target
可选了
Release Target 配置
选择Release
Target,然后菜单栏中找到 Options for Target
-> Output
-> Select Folder Objects...
创建release
和debug
文件夹,用于区分不同Target下编译的文件
因当前处于Release
Target,进入.\Object\release\
文件夹后确认
选择User
-> After Builed/Rebuild
-> 输入.\Output\Output_release.bat
Debug Target 设置
切换到Debug
Target,选择Options for Target
,操作同上release
类似。
进入.\Object\debug\
文件夹后确认
选择User
-> After Builed/Rebuild
-> 输入.\Output\Output_debug.bat
选择C/C++
,在Preprocessor Symbols
下添加预定义DEBUG_MODE
,注意使用英文逗号与其他宏分割
批处理文件修改
预付费表工程均通过批处理程序对生成的app与boot合成,并进行规范命名。刚刚对输出的路径进行了修改,还分别设置了运行文件Output_release.bat
和Output_debug.bat
,所以还需要处理一下这两个文件
在.\Prj\Output
路径下找到批处理文件,修改好命名
两处修改
- 修改文件路径
- Debug文件中修改生成的程序名:在前面添加
(调试程序)
提示
Output_release.bat
文件内容如下
1 | @echo off |
Output_debug.bat
文件内容如下
1 | @echo off |
文件添加到工程
为方便修改批处理文件,将其添加到工程中,注意文件类型为Text Documer file
删除代码中的宏,不在代码中显示。对调试输出宏添加DEBUG模式限制
上传到版本管理工具
将.uvprojx
后缀的工程文件上传到版本管理工具
最终效果
需要发布程序时在Release
Target中编译,需要调试程序时切换到Debug
Target即可。不再手动注释宏进行操作,避免忘记注释关闭看门狗宏的情况,保证看门狗是打开的。
Release
Target下,看门狗默认打开,生成的程序文件如下图
Debug
Target下,看门狗默认关闭,生成的程序文件如下图,带有明显字样,清晰表示这是一个调试程序