单片机学习小组
直播中

丁冬芹

7年用户 1292经验值
私信 关注

单片机工程代码的基本模式是什么?

单片机工程代码的基本模式是什么?

回帖(1)

何珊

2022-2-28 14:37:52
前言


文章内容属于个人习惯,在开发中总结,目的是让代码更加清晰和统一。如果有更好的建议,希望不吝赐教。

一、外设的初始化


在中断上下文初始化所有要用到的外设。即关闭全局中断->初始化所有外设->开启全局中断。我相信这一定是个好习惯。
因由:在一次初始化串口时,会进入一次中断,默认接收一个字节数据。在中断上下文中初始化时正常。

二、线程的创建


线程函数定义在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( ;; );
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分