嵌入式开发常用的几招调试方法

news/2025/1/16 5:17:46/

嵌入式系统调试时相对比较麻烦一些,特别是在定位一些疑难问题时,调试手段就显得非常重要。废话不多说,直接上方法。

 方法一:利用特殊文件名字的文件存在与否来触发调试代码是否运行。比如有些特殊状况下,我们需要保存一帧数据图像,那保存数据图图像的代码不能时时刻刻都运行,那样不光flash受不了,系统怕也受不了,那就需要严格控制他的数量和频率。示例如下:

      需要执行调试代码的时候,在SD卡创建一个临时文件,系统access判定文件是否存在,存在了就进去执行,为了减少次数,在执行完调试动作后就直接删除了这个临时文件,防止重入,减少系统负担。

/*****************************************************************************************************/
声明:本博内容均由http://blog.csdn.net/edsam49原创,转载请注明出处,谢谢!
/*****************************************************************************************************/
————————————————
版权声明:本文为CSDN博主「coding码场」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/edsam49/article/details/64439643

     这个方法还是很好用的,在实际项目中可以灵活运用,达到调试的目的。

方法二:取系统时间,打印到毫秒级,在判断一些程序模块函数执行时间、效率上很有用。

int get_time_ms(char *buff, int len)
{
struct timeval tv;
struct tm* ptm;
char time_string[40];
long milliseconds;if(buff == NULL)
{
printf("%s buff is NULL.\n", __func__);
return -1;
}gettimeofday(&tv, NULL);ptm = localtime (&(tv.tv_sec));strftime (time_string, sizeof(time_string), "%Y-%m-%d %H:%M:%S", ptm); //输出格式为: 2022-03-30 20:38:37
milliseconds = tv.tv_usec / 1000;
snprintf (buff, len, "%s.%03ld", time_string, milliseconds); //输出格式为: 2022-03-30 20:38:37.182
return 0;
}

这样就可以在需要的地方前后调用一下,再分析打印就可以比较准确的判断出执行的效率、耗时,统计出来还可以采用一些统计手段取一些平均值。

方法三:保存文件。比如需要把中间过程的某些重要数据保存下来,我们可以采用保存文件后,再分析文件。

static void save2file_render(void * buf, int len, char *fileName){
int fd = -1;
unsigned long bytes;if (-1 == fd){
fd = open(fileName, O_WRONLY | O_CREAT | O_TRUNC,
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
if (fd < 0){
APP_PRT("unable to create debug file.");
fd = -2;
}
}if (fd > 0){
bytes = write(fd, buf, len);
// APP_PRT(" file %s write bytes %ld image file closed .",fileName, bytes);
close(fd);
fd = -2;
}}

 以上几个方法可以同时上,都是比较常用惯用的手段,调试手段越丰富,调试效率也就会越高。特别是遇到一些不容易出现的现象,又不能临时把自己调试想法运行出来,就可以采用前面说的办法,先把想法埋到流程中去,有需要的时候打开一下就行了,这样既能保障系统平时的执行效率不受影响,也能在关键时刻挺身而出,为你披荆斩刺!


http://www.ppmy.cn/news/188776.html

相关文章

daphne启动django静态文件

daphne 启动django处理静态文件 p起步 线上部署时因设置了 settings.DEBUG False 会导致静态文件都是 404 的情况。主要原因是应为关闭DEBUG模式后&#xff0c;Django 便不提供静态文件服务了。 runserver 的启动 如果运行是通过 runserver 命令的方式&#xff0c;那简单&…

vpro键盘灯怎么调

一 概述 由于键盘被压了一下&#xff0c;导致之前调试的灯光都不见了&#xff0c;当准备再将灯光调试出来的时候竟然忘记了调试灯光的快捷键&#xff0c;经过多种尝试最后得出结论&#xff1a; 组合键为【F1,F2,F3,F4】 Fn; 我的键盘目前是这几种组合键的调试。

尚硅谷的 ediary 笔记_【华硕灵耀X纵横(i71165G7/16GB/512GB/集显)评测】助力笔记本创新!英特尔Evo平台制定十大体验目标...

阅读本文之前&#xff0c;如果对于英特尔 Evo平台不了解&#xff0c;请先阅读&#xff1a;《引领笔记本非凡体验 关于英特尔 Evo平台你该了解这些事 》。以便快速了解英特尔 Evo平台的相关概念。 随着英特尔十一代酷睿落地&#xff0c;作为雅典娜计划的英特尔 Evo平台也正式亮相…

多彩m618plus评测_将来的你 ,一定会感谢现在换鼠标的自己--多彩M618Plus垂直鼠标...

原标题&#xff1a;将来的你 ,一定会感谢现在换鼠标的自己--多彩M618Plus垂直鼠标 至1964年以来&#xff0c;鼠标的发展历程可谓是变幻多端&#xff0c;但时至今日&#xff0c;仍然有厂商在不断的研发着新的鼠标&#xff0c;而多彩公司可以算是一个致力于研发人体工学的公司&am…

mysql_dc.ncf_my live PC / ThinkCentre M920x Tiny / ThinkStation P330 Tiny

s Thinkpad Mluti Connect Bluttooth Keyboard with Trackpoint / KT-1525 / 4x30k12182 / Thinkpad 蓝牙键盘驱动下载 https://download.lenovo.com/pccbbs/options/tp_compact_keyboard_1491.exe https://download.lenovo.com/pccbbs/options/tp_compact_keyboard_1.5.6.0.e…

电源管理——电源检测及低功耗

控制功耗—>电源管理 1.1电源监视器 在stm32芯片内部&#xff0c;用于检测VDD的电压&#xff0c;以实现复位功能和紧急掉电功能 1.上电复位和掉电复位&#xff08;POR与PDR&#xff09;当检测到VDD的电压低于阈值VPOR及VPDR时&#xff0c; 芯片自动保持在复位状态&#x…

VPRO 机械键盘灯亮

请搜微信公众号&#xff1a; 程序员崛起 键盘信息&#xff1a;v500s 先按一下 SRCLk &#xff08;按不按无所谓&#xff09; 然后按 FN SRCLK

Springboot事件监听

Springboot事件监听中主要有以下对象&#xff1a; 1、事件&#xff08;event&#xff09;可以封装和传递监听器中要处理的参数&#xff0c;如对象或字符串&#xff0c;并作为监听器中监听的目标。 2、监听器&#xff08;listener&#xff09;具体根据事件发生的业务处理模块&am…