FREERTOS学习笔记,开发者支持

configASSERT()

在C函数中有assert()来判断括号内表达式是否正确,若不正确则永远卡死在该函数,FREERTOS系统里,我们为了方便调试,可以定义一个类似于assert()功能的宏configASSERT()来判断问题出在哪里,当然这会导致代码量增大,且花费更多时间,故在调试完成后尽量关闭该功能。
下面提供了一个可选的configASSERT()的实现方法:

/* This function must be defined in a C source file, not the FreeRTOSConfig.h header
file. */
void vAssertCalled( const char *pcFile, uint32_t ulLine )
{
   
	/* Inside this function, pcFile holds the name of the source file that contains
	the line that detected the error, and ulLine holds the line number in the source
	file. The pcFile and ulLine values can be printed out, or otherwise recorded,
	before the following infinite loop is entered. */
	RecordErrorInformationHere( pcFile, ulLine );
	/* Disable interrupts so the tick interrupt stops executing, then sit in a loop
	so execution does not move past the line that failed the assertion. */
	taskDISABLE_INTERRUPTS();
	for( ;; );
}
/*-----------------------------------------------------------*/
/* These following two lines must be placed in FreeRTOSConfig.h. */
extern void vAssertCalled( const char *pcFile, uint32_t ulLine );
#define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled( __FILE__, __LINE__ )

__FILE__表示当前函数所在文件的名称,LINE 表当前行。由此即可知道哪里出了问题。

通过回调函数查错

类似于之间讲解分配内存空间时的回调函数,我们可以将相关可能出错地方的回调函数都写上,即可容易发现哪一步出错。

FreeRTOS+Trace工具

可直接百度,此处不在详述

观察运行时间与任务状态信息

任务运行时间统计

任务运行时间同时提供了从系统开始运行,一个任务在运行态的时间统计。任务运行时间主要用于在系统开发过程中统计与调试帮助。该信息只有在时钟计数值未溢出前有效。手记运行时间统计会增加任务切换时间。可通过调用uxTaskGetSystemState()来获取运行时间统计。也可调用vTaskGetRunTimeStats() 来获取便于人们阅读的ASCII 表。

运行时间统计时钟

运行时间统计需要测量心跳的小数部分。因此RTOS的心跳数并不作为运行时间统计时钟,该时钟会通过应用层提供。这里推荐运行时间统计时钟的频率是心跳的十到一百倍。频率越高越精确,但计数溢出也就越快。
理想情况下,该时钟可通过一个32位计数的外设提供,并且内部进程可读取该外设的计数值,如果没有有效的外设来实现这个功能,下面为一些可选但低效的方法。
例如,配置一个定时器外设来周期产生中断,然后在中断函数中计数,当然,若该定时器仅用于计数的话效率很低,若已经有一个正在运行的周期性定时器,则可以考虑在该定时器中断中加入计数功能。
如果可能的话可以采用使用滴答定时器的方式产生心跳并作为运行时间统计时钟。

运行时间统计的相关配置

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值