从硬盘中找了一份freertos,拷贝到me32g03xxxxx lib 20240710\middlewares\freertos下
以之前使用的ME32例程做模板,开始配置freertos
建立一个middlewares组,将freertos下的c文件都加上
将上面两个路径加入到include路径中。
从rtos中找到FreeRTOSConfig.h和portmacro.h复制到例程inc
修改FreeRTOSConfig.h配置文件
<pre>//配置以下3个hook函数不用实现
//vApplicationStackOverflowHook
//vApplicationTickHook
//vApplicationMallocFailedHook
#define configUSE_MALLOC_FAILED_HOOK 0
#define configCHECK_FOR_STACK_OVERFLOW 0
#define configUSE_TICK_HOOK 0
//配置主频24Mhz
#define configCPU_CLOCK_HZ ( 24000000 )
//HEAP_SIZE配置3k,大概可以支持3个task
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 )
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 3*1024 ) )
//为了节约空间,设为0
#define configUSE_TIMERS 0
//SysTick中断函数由freertos接管
#define xPortSysTickHandler SysTick_Handler</pre>
复制代码ME32G030缺省运行在24Mhz,要注意HEAP的大小,每个task大约占用780个字节。
main.c
int main(void)
{
一定要保证3个TASK的优先级小于uart中断,uart中断的优先级小于SysTick中断。(数值越大优先级越小)
建立3个task函数
<pre>void vLED1Task( void *pvParameters )
{
for( ;; )
{
printf("1 Free Heap: %d\n", xPortGetFreeHeapSize());
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
void vLED2Task( void *pvParameters )
{
for( ;; )
{
//翻转PB12
GPIO_InvertOutPin(PB,IO_PIN12);
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
void vLED3Task( void *pvParameters )
{
for( ;; )
{
printf("vLED3Task\r\n");
vTaskDelay(pdMS_TO_TICKS(1000));
}
}</pre>
复制代码运行