用cube生成了freertos工程,想用串口输出调试信息,参考的安富莱和硬石的教程。
新建工程后,有些相关宏定义需要在freertosconfig.h文件里使能,安富莱教程里是这么说的:
-----------------------------------------------------------------------------
需要在FreeRTOSConfig.h文件中使能如下宏定义:
/* Ensure stdint is only used by the compiler, and not assembler. */
#if defined(__ICCARM__) || CC_ARM) GNUC__)
#include
extern vola
tile uint32_t ulHighFrequencyTimerTicks;
#endif
/* Run time and task stats gathering r elated definitions. */
#define configUSE_TRACE_FACILITY 1
#define configGENERATE_RUN_TIME_STATS 1
#define configUSE_STATS_FORMATTING_FUNCTIONS 1
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() (ulHighFrequencyTim erTicks = 0ul)
#define portGET_RUN_TIME_COUNTER_VALUE() ulHighFrequencyTimerTicks
-------------------------------------------------------------------------------
以上部分中的变量ulHighFrequencyTimerTicks,生成工程时自带了。
5个宏定义里,configUSE_TRACE_FACILITY 也是自动生成的;
configGENERATE_RUN_TIME_STATS是配置cube选相时,有个选项勾选后会生成的;
configUSE_STATS_FORMATTING_FUNCTIONS是自己手动添加进去的;
后两个宏定义,cube生成时是这样的:
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS configureTimerForRunTimeStats
#define portGET_RUN_TIME_COUNTER_VALUE getRunTimeCounterValue
而configureTimerForRunTimeStats()和getRunTimeCounterValue()对应两个weak函数,我修改成这样了:
__weak void configureTimerForRunTimeStats(void)
{
ulHighFrequencyTimerTicks = 0ul;
}
__weak unsigned long getRunTimeCounterValue(void)
{
return ulHighFrequencyTimerTicks;
// return 0;
}
教程里说还要定义个定时器,定时值要比freertos系统定时器要小。
我就用TIM4定义了个基本定时器,在其回调函数里,使ulHighFrequencyTimerTicks自加一。
任务共定义了三个,其中一个是让LED一秒反转一次。一个是一秒调用一次void vTaskList( char * pcWriteBuffer )函数并用串口1输出出来。第三个任务空。
结果LED灯不闪。屏蔽调void vTaskList( char * pcWriteBuffer )这个函数调用,就正常了。
求教:是不是有哪些地方遗漏了?望指出来。