前言
文章内容属于个人习惯,在开发中总结,目的是让代码更加清晰和统一。如果有更好的建议,希望不吝赐教。
一、外设的初始化
在中断上下文初始化所有要用到的外设。即关闭全局中断->初始化所有外设->开启全局中断。我相信这一定是个好习惯。
因由:在一次初始化串口时,会进入一次中断,默认接收一个字节数据。在中断上下文中初始化时正常。
二、线程的创建
线程函数定义在main.c,不同线程调用对应处理的handler或poll函数。
main.c
#define SYSTEM_MANAGER_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
#define LED_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
void BspInit(void)
{
INT_SYS_DisableIRQGlobal();
/* 初始化外设 */
INT_SYS_EnableIRQGlobal();
}
static void SystemManagerTask(void *pvParameters)
{
SystemManagerInit();
for( ;; )
{
SystemManagerHandler();
vTaskDelay(10);
}
}
static void LedTask(void *pvParameters)
{
LedInit();
for( ;; )
{
LedHandler();
vTaskDelay(10);
}
}
int main(int argc, void **argv)
{
BspInit();
xTaskCreate(SystemManagerTask, "system_manager_task", configMINIMAL_STACK_SIZE, NULL, SYSTEM_MANAGER_TASK_PRIORITY, NULL);
xTaskCreate(LedTask, "led_task", configMINIMAL_STACK_SIZE, NULL, LED_TASK_PRIORITY, NULL);
vTaskStartScheduler();
for( ;; );
}
前言
文章内容属于个人习惯,在开发中总结,目的是让代码更加清晰和统一。如果有更好的建议,希望不吝赐教。
一、外设的初始化
在中断上下文初始化所有要用到的外设。即关闭全局中断->初始化所有外设->开启全局中断。我相信这一定是个好习惯。
因由:在一次初始化串口时,会进入一次中断,默认接收一个字节数据。在中断上下文中初始化时正常。
二、线程的创建
线程函数定义在main.c,不同线程调用对应处理的handler或poll函数。
main.c
#define SYSTEM_MANAGER_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
#define LED_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
void BspInit(void)
{
INT_SYS_DisableIRQGlobal();
/* 初始化外设 */
INT_SYS_EnableIRQGlobal();
}
static void SystemManagerTask(void *pvParameters)
{
SystemManagerInit();
for( ;; )
{
SystemManagerHandler();
vTaskDelay(10);
}
}
static void LedTask(void *pvParameters)
{
LedInit();
for( ;; )
{
LedHandler();
vTaskDelay(10);
}
}
int main(int argc, void **argv)
{
BspInit();
xTaskCreate(SystemManagerTask, "system_manager_task", configMINIMAL_STACK_SIZE, NULL, SYSTEM_MANAGER_TASK_PRIORITY, NULL);
xTaskCreate(LedTask, "led_task", configMINIMAL_STACK_SIZE, NULL, LED_TASK_PRIORITY, NULL);
vTaskStartScheduler();
for( ;; );
}
举报