打印
[应用相关]

RTOS-主任务及开始函数

[复制链接]
279|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 中国龙芯CDX 于 2025-3-28 20:49 编辑

main函数


int main()
{
        //在前面这里放所使用模块的初始化,将所有用到的外设驱动起来
        //下面就是开始任务函数的定义
        StartTask_Handler=xTaskCreateStatic((TaskFunction_t        )start_task,
                                                                                                        //任务函数               
                                                                                (const char*         )"start_task",
                                                                                                        //任务名称               
                                                                                (uint32_t                 )START_STK_SIZE,       
                                                                                                        //任务堆栈大小
                                                                                (void*                           )NULL,               
                                                                                                        //传递给任务函数的参数               
                                                                                (UBaseType_t         )START_TASK_PRIO,
                                                                                                        //任务优先级       
                                                                                (StackType_t*   )StartTaskStack,       
                                                                                                        //任务堆栈
                                                                                (StaticTask_t*  )&StartTaskTCB);                
                                                                                                        //任务控制块
    vTaskStartScheduler();//开启任务调度
}

使用特权

评论回复
沙发
中国龙芯CDX|  楼主 | 2025-3-28 20:50 | 只看该作者
开始任务函数
在FreeRtos进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断
一般我们都会使用这个临界区,进入和退出是配套使用的,我们在使用的时候要尽量保持临时段耗时短
//开始任务函数
void start_task(void *pvParameters)
{
    taskENTER_CRITICAL();         //进入临界区
    //创建task1任务
        Task1Task_Handler=xTaskCreateStatic((TaskFunction_t        )task1_task,               
                                                                                (const char*         )"task1_task",               
                                                                                (uint32_t                 )TASK1_STK_SIZE,        
                                                                                (void*                           )NULL,                                
                                                                                (UBaseType_t         )TASK1_TASK_PRIO,         
                                                                                (StackType_t*   )Task1TaskStack,        
                                                                                (StaticTask_t*  )&Task1TaskTCB);        
    //创建task2任务
        Task2Task_Handler=xTaskCreateStatic((TaskFunction_t        )task2_task,               
                                                                                (const char*         )"task2_task",               
                                                                                (uint32_t                 )TASK2_STK_SIZE,        
                                                                                (void*                           )NULL,                                
                                                                                (UBaseType_t         )TASK2_TASK_PRIO,         
                                                                                (StackType_t*   )Task2TaskStack,        
                                                                                (StaticTask_t*  )&Task2TaskTCB);
                                                                                                                                                        
    vTaskDelete(StartTask_Handler); //删除开始任务
    taskEXIT_CRITICAL();            //退出临界区
}

掌握Rtos下的多任务多优先级的实现方式,掌握FreeRtos的基本用法,打造一个实时性系统

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

314

主题

2345

帖子

4

粉丝