• 2-FreeRTOS 创建任务


    创建任务:

    void vTask1( void * pvParameters );//Task1
    TaskHandle_t task1TaskHandle= NULL; //句柄
    
    
    int main(void)
    {
        BaseType_t os=0;
        LED_init();
        delay_init();
       
    taskENTER_CRITICAL();
    //进入临界区,临界保护 //任务的创建 os= xTaskCreate( (TaskFunction_t ) vTask1, //任务函数 (const char * ) "task1", //任务名字 (configSTACK_DEPTH_TYPE) 128, //任务内存大小 (void * ) NULL, //传递给任务函数的参数 (UBaseType_t ) 1, //数字越小 优先级越高 (TaskHandle_t * ) task1TaskHandle //句柄 ); if(os==pdPASS)//创建成功 GPIO_ResetBits(GPIOA, GPIO_Pin_8); taskEXIT_CRITICAL();//退出临界区 临界区是为了防止初始化被其他任务打断(一般在重要的地方加入) vTaskStartScheduler(); //开启任务调度 while(1) {} } //任务1 void vTask1( void * pvParameters ) { while(1) { GPIO_SetBits(GPIOA, GPIO_Pin_8); delay_ms(500); GPIO_ResetBits(GPIOA, GPIO_Pin_8); delay_ms(500); // Task code goes here. } }

    创建任务后,程序卡在调度函数里:

    进一步定位:发现卡到触发SVC中断的地方,由于工程中没有SVC_Handle()函数,导致第一个任务无法在SVC中开启

     

    解决办法:在FreeRTOSConfig.h文件中加入这两个宏定义,和FreeRTOS里面对应的函数进行关联,就可以了

    1 #define xPortPendSVHandler     PendSV_Handler
    2 #define vPortSVCHandler     SVC_Handler

    任务调度:

    参考链接:

    https://blog.csdn.net/tao475824827/article/details/105622087

  • 相关阅读:
    异步文档树解决方案
    兼容IE低版本的文件上传解决方案
    CentOS-常用命令(版本:7.x)
    搭建Nexus3私服(含使用说明,支持CentOS、Windows)
    CentOS-搭建MinIO集群
    GitLab升级(yum安装版v11.11.8~12.0.12)
    yum安装GitLab-v11.11.8(git私服)
    Docker中容器的备份和恢复(可迁移)
    Nexus3配置yum私服
    局域网连接数据慢的方法汇总
  • 原文地址:https://www.cnblogs.com/darren-pty/p/14106175.html
Copyright © 2020-2023  润新知