#include #include #include /************* 用户模块引入部分 ************/ #include // TODO /**************** 测试部分 ***************/ // TODO /************ FreeRtos 任务定义区 ************/ [[noreturn]] void vLedTask(void *pvParameters) { while (true) { Led::on(LED0); vTaskDelay(pdMS_TO_TICKS(500)); // 每500毫秒切换一次LED状态 Led::off(LED0); vTaskDelay(pdMS_TO_TICKS(500)); // 每500毫秒切换一次LE+D状态 } } // TODO /***************** 主函数 ******************/ int main() { /*** SysConfig 初始化 ***/ SYSCFG_DL_init(); /*** 模块初始化 ***/ /*** FreeRtos 任务初始化 ***/ xTaskCreate(vLedTask, "TestLedTask", 32, nullptr, 1, nullptr); /*** 启动 FreeRtos ***/ vTaskStartScheduler(); return 0; } /************ FreeRtos 错误处理部分 ************/ #ifdef __cplusplus extern "C" { #endif void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName) { /* 栈溢出时的处理代码 */ /* 例如,打印错误信息并重置系统 */ /* 参数: * xTask - 发生栈溢出的任务句柄 * pcTaskName - 发生栈溢出的任务名称 */ /* 通常在这里添加一些错误处理和系统恢复的代码 */ while (1) { /* 可以在此处添加错误处理代码,如闪烁LED或输出调试信息 */ } } /* 在全局范围内定义存储空间 */ static StaticTask_t xIdleTaskTCB; static StackType_t uxIdleTaskStack[configMINIMAL_STACK_SIZE]; /* 实现所需的函数 */ void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize) { /* 传递静态分配的空闲任务数据结构的地址 */ *ppxIdleTaskTCBBuffer = &xIdleTaskTCB; /* 传递静态分配的空闲任务堆栈的地址 */ *ppxIdleTaskStackBuffer = uxIdleTaskStack; /* 传递堆栈大小 */ *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE; } /* 为定时器任务定义静态内存 */ static StaticTask_t xTimerTaskTCB; static StackType_t uxTimerTaskStack[configTIMER_TASK_STACK_DEPTH]; void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize) { /* 传递静态分配的定时器任务数据结构的地址 */ *ppxTimerTaskTCBBuffer = &xTimerTaskTCB; /* 传递静态分配的定时器任务堆栈的地址 */ *ppxTimerTaskStackBuffer = uxTimerTaskStack; /* 传递堆栈大小 */ *pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH; } #ifdef __cplusplus } #endif