FreeRTOS嵌入式操作系统常用API总结

本文介绍嵌入式实时操作系统FreeRTO的常用API,freertos基本功能包括 任务调度、内存管理、中断管理、定时器管理、消息队列、信号量、互斥锁等。

1. FreeRTOS 任务相关API:

     1.1  任务结构  void  Task (void *pvParameters)

       void  Task (void *pvParameters)
       {
                for (; ;)
                {

                }
        }

    1.2 任务创建   xTaskCreate()

      xTaskCreate(  Task,        //任务函数指针

                             "testtask" , //任务文本名字

                               1000,       //任务堆栈深度

                               NULL,      //任务参数 (void *类型)

                                 1,               //任务优先级(freertos  优先级数据越大,优先级越高)

                                 NULL); //任务句柄(xTaskHandle *类型)

      1.3 任务延时  vTaskDelay()、vTaskDelayUntil()   用于周期行任务的精准延时

       vTaskDelay(250/portTICK_RATE_MS) ; //延时250ms            

       void Task(void *pvParameters)
      {
             portTickType xLastWakeTime;

             xLastWakeTime = xTaskGetTickCount();    //获取当前心跳计数值void 
                //周期行任务
               vTaskDelayUntil(&xLastWakeTime,250/portTICK_RATE_MS);
          } 
      }

     1.3 空闲任务回调函数   void vApplicationIdleHook(void)

      1.4 心跳回调函数   void vApplicationTickHook(void)

      1.5 任务优先级获取&&设置  vTaskPrioritySet() 、uxTaskPriorityGet()

       unsigned portBASE_TYPE   priority;

       priority = uxTaskPriorityGet(NULL);    //NULL 表示获取当前任务优先级

       vTaskPrioritySet(NULL, priority-2);      //NULL 表示设置当前任务优先级

       1.6 删除任务  vTaskDelete()

        vTaskDelete(NULL); //表示删除任务自身

        1.7 立即进行任务切换   taskYIELD()

2. FreeRTOS 消息队列相关API

         2.1 创建队列   xQueueCreate()

          xQueueHandle  xQueue;

          xQueue = xQueueCreate(5, sizeof(long));     //参数分别表示队列存储单元数量、队列单元数据长度

           2.2 队列发送  xQueueSendToBack() 、xQueueSendToFront()  //发送到队列尾和队列头

           portBASE_TYPE xStatus;  

           long   int    msg;

            xStatus = xQueueSendToBack(xQueue,     //队列句柄

                                                               &msg,        //队列消息指针

                                                                 0);           //队列发送超时时间,超时以系统心跳为单位,设置为0表示不等待立即返回,

                                                                   //设置为portMAX_DELAY 表示一直等待。

         2.3 队列接收   xQueueReceive ()  、xQueuePeek()  //前者读取消息后,删除消息,后者读取消息后,不删除消息

          long int msg;

          port_BASE_TYPE    xStatus;

          const  portTickType xTicksToWait = 100/portTICK_RATE_MS;

          xStatus  =  xQueueReceive(xQueue,

                                                      &msg,

                                                        xTickToWait);

          2.4 队列查询  uxQueueMessageWaiting()  //查询队列种有效数据单元个数

          返回值 = 0 表示队列为空

          2.5 在中断中使用队列 xQueueSendToFrontFromISR()、xQueueSendToBackFromISR() 、xQueueReceiveFromISR()

    3.  FreeRTOS 信号量相关API

          3.1   二值信号量创建 vSemaphoreCreateBinary()

          xSemphoreHandle  xSemaphore;

          vSemphoreCreateBinary(xSemaphore);

          

         3.2 计数信号量创建 xSemphoreCreateCounting()

         xSemphoreHandle   xSemphore;

          xSemphore = xSemphoreCreateCounting(10,    //计数信号量最大值为10

                                                                              0);    计数信号量初始值为 0 

          

          3.3 互斥信号量创建  xSemphoreCreateMutex()    

             xSemphoreHandle  xMutex = xSemphoreCreateMutex();

          3.4 信号量获取   xSemphoreTake()   //适用于所有信号量类型

           xSemphoreTake(xSemphore,              // 二值信号量句柄

                                      portMAX_DELAY);     //获取信号量超时时间,此处表示一直等待

         3.5 信号量给与  xSemphoreGive() 、xSemphoreGiveFromISR()   //使用与所有信号量类型

         xSemphoreGive(xSemphore,              //二值信号量句柄

                                       0);        //超时时间,此处0表示立即返回   

  4. FreeRTOS 临界区相关API

        4.1  taskENTER_CRITICAL()   taskEXIT_CRITICAL()  //进入、退出临界区

  5.  FreeRTOS 调度器相关API

        5.1  xTaskSuspendAll() 、xTaskResumeAll()   //挂起、唤醒 调度器

   6.  FreeRTOS 内存分配相关API

        6.1 pvPortMalloc ()  、vPortFree()

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeRTOS(Real-Time Operating System)是一个专门为嵌入式系统设计的免费实时操作系统内核,特别适合资源受限的设备。它专注于提供高度可靠、高效的实时任务调度,适用于物联网(IoT)、工业控制、消费电子等应用。 在FreeRTOS项目中,主要包括以下几个关键组件: 1. **任务管理**:FreeRTOS的核心功能是管理多个并发执行的任务,每个任务都有自己的堆栈和优先级。任务可以根据特定的需求进行创建、调度和同步。 2. **中断管理**:FreeRTOS能够正确处理硬件中断,确保系统在外部事件发生时能迅速响应并恢复任务执行。 3. **同步机制**:包括互斥锁、信号量、条件变量等,用于保护共享资源,防止数据竞争。 4. **队列和消息传递**:提供了一种高效的数据通信机制,让任务之间能够安全地传递信息。 5. **内存管理**:FreeRTOS支持内存分配和回收,确保在有限的内存资源下运行。 6. **低级硬件抽象**:通过API接口,使得FreeRTOS可以适应多种微处理器架构和外设。 7. **示例代码**:提供了丰富的示例代码,帮助开发者快速上手和理解如何使用该操作系统。 如果你对FreeRTOS感兴趣,可能会问到以下问题: 1. 怎样在FreeRTOS中设置任务优先级? 2. 如何使用信号量来同步多任务? 3. FreeRTOS是否支持嵌入式图形用户界面GUI开发? 4. 对于资源非常有限的设备,如何优化FreeRTOS性能? 5. 如何移植FreeRTOS到新的微控制器平台?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值