FreeRTOS入坑指南

开发环境准备:

一般平台都有自己的开发环境。 例如nxp 有mcu xpresso 开发工具。 这里我们推荐linux 上的freertos模拟器。 感谢 GitHub - crazyskady/FreeRTOS_study: Study for FreeRTOShttps://github.com/crazyskady/FreeRTOS_study 贡献的代码, 我们把代码拉到本地 , 增加一个tmp 目录, 就可以顺利编译通过。

下面就可以开启 freertos 之旅了。

1.任务管理

2.队列管理

#include 
#include 
#include "main.h"

#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"

typedef struct
{
    int ID;
    portCHAR Data[ 20 ];
} Message, *pMessage;

//xQueueHandle MsgQueue;
xQueueHandle MsgQueue;
void TaskA( void *pvParameters );
void TaskB( void *pvParameters );
static void vSenderTask(void *pvParameters){
    printf("创建发送TASK \n");
    Message message;
    message.ID=1;
    strcpy(message.Data, "hello");
    portBASE_TYPE  xStatus;

    for (;  ;) {
//        vTaskDelay( 2000/portTICK_RATE_MS );

        xStatus = xQueueSend( MsgQueue, (void *)&message, 0 );
        if(xStatus != pdPASS ){
            printf("could not send to the queue \r\n");

        }else{
            printf("send ID =%d , DATA =%s\r\n", message.ID, message.Data );
        }
        taskYIELD();
        message.ID++;
    }

}
static void vReceiverTask(void *pvParamters){
    printf("创建接收TASK \n");

    Message message;
    portBASE_TYPE  xStatus;
    const portTickType xTicksToWait = 100/portTICK_RATE_MS;

    for (;  ;) {
        if (uxQueueMessagesWaiting(MsgQueue) != 0) {
            printf("queue should have been empty ! \r\n");
        }

        xStatus = xQueueReceive(MsgQueue, &message, xTicksToWait);
        if (xStatus == pdPASS) {
            printf("received ID = %d, DATA= %s \r\n", message.ID, message.Data);
        } else {
            printf("could not receive from the queue \r\n");
        }
    }
}

int main(void ){

    MsgQueue = xQueueCreate( 5 , sizeof( Message ) );


    if(MsgQueue != NULL ){
        printf("创建两个TASK \n");
        xTaskCreate( vSenderTask, "Sender1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY+1 ,NULL);
        xTaskCreate( vReceiverTask, "Receiver", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY+1 ,NULL);

        vTaskStartScheduler();
        printf("start task \r\n");
        return  0;
    }else{
        printf("Error \n");
    }
    return  0;
}


void vMainQueueSendPassed( void )
{
    return;
}

/* This is a stub function for FreeRTOS_Kernel */
void vApplicationIdleHook( void )
{
    return;
}

 替换 main.c, 既是一个简单的队列管理模型。

3.中断管理

4.资源管理

5.内存管理

6.文件管理

7.网络编程

目录是参考linux等平台,和项目开发过程中用到的知识点,总结列举出的。 逐步把代码模型补充完整。

参考:

在Linux下实现FreeRTOS的简单模拟器_crazyskady的博客-CSDN博客_freertos linux模拟器

《freeRTOS操作系统中文版手册.pdf》

欢迎阅读韦东山百问网freeRTOS教程! — 韦东山百问网freeRTOS教程 文档

你可能感兴趣的:(freertos,stm32,linux,freertos)