目录
1 在基础工程 中 新建 FreeRTOS 文件夹 并且把源码添加到这文件夹
编辑 2 在 portable 文件中保留keil MemMang 和 RVDS 其他删除
3 在基础工程 中新建 分组 FreeRTOS_Code 和 FreeRTOS_POPTABLE 并且添加 .c(源文件)添加h文件 路径
编辑 5.移植SYSTEM文件,里面包括sys.c usart.c delay.c
- 1.在基础工程种新建Freertos文件夹,并且将源码添加到这个文件夹中。
- 2.在poertable文件夹中保留keil、MemMang 、和RVDS,其他删除
- 3.在基础工程中新建分组 FreeRTOS CODE 和 FreeRTOS PORTTABLE,并目
- 添加.c文件添加头文件h路径。
- 4.从demo中复制FreeRTOSConfig.h文件
- 5.移植SYSTEM文件,里面包括sys.c usart.c delay.c

2 在 portable 文件中保留keil MemMang 和 RVDS 其他删除






找到ARM内核相关的,stm32f103是Contex-M3内核


hope1-4 都是内存管理办法 ,就是堆栈大小的一个方式



5.移植SYSTEM文件,里面包括sys.c usart.c delay.c 

代码
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "FreeRTOS.h"
- #include "task.h"
-
-
- //ÈÎÎñÓÅÏȼ¶
- #define START_TASK_PRIO 1
- //ÈÎÎñ¶ÑÕ»´óС
- #define START_STK_SIZE 128
- //ÈÎÎñ¾ä±ú
- TaskHandle_t StartTask_Handler;
- //ÈÎÎñº¯Êý
- void start_task(void *pvParameters);
-
- //ÈÎÎñÓÅÏȼ¶
- #define LED0_TASK_PRIO 2
- //ÈÎÎñ¶ÑÕ»´óС
- #define LED0_STK_SIZE 50
- //ÈÎÎñ¾ä±ú
- TaskHandle_t LED0Task_Handler;
- //ÈÎÎñº¯Êý
- void led0_task(void *pvParameters);
-
- //ÈÎÎñÓÅÏȼ¶
- #define LED1_TASK_PRIO 3
- //ÈÎÎñ¶ÑÕ»´óС
- #define LED1_STK_SIZE 50
- //ÈÎÎñ¾ä±ú
- TaskHandle_t LED1Task_Handler;
- //ÈÎÎñº¯Êý
- void led1_task(void *pvParameters);
-
- int main(void)
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//ÉèÖÃϵͳÖжÏÓÅÏȼ¶·Ö×é4
- delay_init(); //ÑÓʱº¯Êý³õʼ»¯
- uart_init(115200); //³õʼ»¯´®¿Ú
- LED_Init(); //³õʼ»¯LED
-
- //´´½¨¿ªÊ¼ÈÎÎñ
- xTaskCreate((TaskFunction_t )start_task, //ÈÎÎñº¯Êý
- (const char* )"start_task", //ÈÎÎñÃû³Æ
- (uint16_t )START_STK_SIZE, //ÈÎÎñ¶ÑÕ»´óС
- (void* )NULL, //´«µÝ¸øÈÎÎñº¯ÊýµÄ²ÎÊý
- (UBaseType_t )START_TASK_PRIO, //ÈÎÎñÓÅÏȼ¶
- (TaskHandle_t* )&StartTask_Handler); //ÈÎÎñ¾ä±ú
- vTaskStartScheduler(); //¿ªÆôÈÎÎñµ÷¶È
- }
-
- //¿ªÊ¼ÈÎÎñÈÎÎñº¯Êý
- void start_task(void *pvParameters)
- {
- taskENTER_CRITICAL(); //½øÈëÁÙ½çÇø
- //´´½¨LED0ÈÎÎñ
- xTaskCreate((TaskFunction_t )led0_task,
- (const char* )"led0_task",
- (uint16_t )LED0_STK_SIZE,
- (void* )NULL,
- (UBaseType_t )LED0_TASK_PRIO,
- (TaskHandle_t* )&LED0Task_Handler);
- //´´½¨LED1ÈÎÎñ
- xTaskCreate((TaskFunction_t )led1_task,
- (const char* )"led1_task",
- (uint16_t )LED1_STK_SIZE,
- (void* )NULL,
- (UBaseType_t )LED1_TASK_PRIO,
- (TaskHandle_t* )&LED1Task_Handler);
- vTaskDelete(StartTask_Handler); //ɾ³ý¿ªÊ¼ÈÎÎñ
- taskEXIT_CRITICAL(); //Í˳öÁÙ½çÇø
- }
-
- //LED0ÈÎÎñº¯Êý
- void led0_task(void *pvParameters)
- {
- while(1)
- {
- LED0=~LED0;
- vTaskDelay(500);
- }
- }
-
- //LED1ÈÎÎñº¯Êý
- void led1_task(void *pvParameters)
- {
- while(1)
- {
- LED1=0;
- vTaskDelay(200);
- LED1=1;
- vTaskDelay(800);
- }
- }