c语言程序开始时进入自检,如何实现C言程序内容自检?

本文介绍了在C语言程序中实现自检的方法,通过计算ROM区的校验码来确保程序内容的完整性和一致性。在上电时运行自检,如果校验码匹配则正常执行,不匹配则报警,防止错误程序流入市场。此外,还提到校验码可以用于检查芯片ROM空间的坏点,提高系统的可靠性。
摘要由CSDN通过智能技术生成

程序设计最头疼的就是出现BUG,按理说程序出错是常态,就像天下没有无缝的蛋一样,再怎么严谨、再怎么经验丰富都没用。最典型的就是我们的Windows操作系统了,经常补丁来补丁去,更新极快,更新的目的无非就是被人发现了BUG。

在我个人认为,虽然BUG一定会有,但决不是你解释的理由,经过我多年软件设计的总结来看,BUG通常80%的原因不是程序本身设计时出现,而是在于修改、版本管理、文件存档等等低级失误。

比如程序初次完成后升级功能,升级完后测试、试产都没有问题,到正式生产时,发现程序版本还是以前的旧版本,文件发错了.....不知道说什么好呢?又比如程序完成后已量产数月,客户要求更改更改程序,并且改了好几个版本,同时也就存档了好些个文件夹,时间一长,尽然忘记是从哪个版本上变更了?

所以说软件设计是一个反复修改的东西,修改自然就会存在混淆、忘记的情况,那么在企业里也会增加许多的版本控制,但是版本都在在程序文件以外来做的,也就是程序本身内容变动后,品质人员或自动化测试工装能否检出才是关键,我的做法就是在程序内部做校验码计算,只要程序内容有变化,校验码就不一样,而这个校验码是可以通过自动化工装测出,只要文件一下发,就不会存在程序使用错误。具体C语言程序做法如下:

首先自己计算出整个ROM区的校验码,每次上电就运行一次,并上传给测试工装,工装根据下发的文件校验码进行比对,若是正确则进行测试,不正确直接报警,防止程序流出市场。

// 程序ROM空间校验码计算子函数

下面是一段ucos系统下的看门狗自检程序C语言代码: ```c #include "includes.h" #define WDT_TASK_PRIORITY 6 #define WDT_TASK_STACK_SIZE 256 static OS_TCB wdtTaskTCB; static CPU_STK wdtTaskStack[256]; void WDT_Init(void) { BSP_WDT_Init(); // 初始化看门狗硬件 } void WDT_Start(void) { BSP_WDT_Enable(); // 启动看门狗 } void WDT_Feed(void) { BSP_WDT_Feed(); // 喂狗 } void WDT_Task(void *p_arg) { while (1) { WDT_Feed(); // 定喂狗 OSTimeDly(1000); // 延1s } } void WDT_SelfTest(void) { INT8U err; WDT_Init(); // 初始化看门狗 OSTaskCreate(&wdtTaskTCB, "WDT Task", WDT_Task, NULL, WDT_TASK_PRIORITY, wdtTaskStack, WDT_TASK_STACK_SIZE / 10, WDT_TASK_STACK_SIZE, 0); WDT_Start(); // 启动看门狗 while (1) { OSTimeDlyHMSM(0, 0, 10, 0); // 延10s,等待看门狗重启系统 err = OSTaskCreate(&wdtTaskTCB, "WDT Task", WDT_Task, NULL, WDT_TASK_PRIORITY, wdtTaskStack, WDT_TASK_STACK_SIZE / 10, WDT_TASK_STACK_SIZE, 0); if (err != OS_ERR_NONE) { printf("Create wdt task failed!\n"); return; } } } ``` 上述代码中,`WDT_Init()`函数用于初始化看门狗硬件,`WDT_Start()`函数用于启动看门狗,`WDT_Feed()`函数用于喂狗。`WDT_Task()`函数是看门狗任务函数,责任是定喂狗。`WDT_SelfTest()`函数是看门狗自检函数,在该函数中,我们首先初始化看门狗,然后创建看门狗任务,并启动看门狗。接着,我们延10秒,等待看门狗重启系统。如果看门狗重启系统后,我们创建看门狗任务失败,则说明看门狗没有正常工作,自检失败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值