开发环境准备:
一般平台都有自己的开发环境。 例如nxp 有mcu xpresso 开发工具。 这里我们推荐linux 上的freertos模拟器。 感谢 GitHub - crazyskady/FreeRTOS_study: Study for FreeRTOShttps://github.com/crazyskady/FreeRTOS_study 贡献的代码, 我们把代码拉到本地 , 增加一个tmp 目录, 就可以顺利编译通过。
下面就可以开启 freertos 之旅了。
1.任务管理
2.队列管理
#include <stdio.h>
#include <stdlib.h>
#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》