跳至主要內容

02.移植freertos

约 436 字大约 1 分钟

导入文件

导入 FreeRTOS/Source 目录下的文件

FreeRTOS/Source/portable 目录只保留
Keil
MemMang
RVDS

FreeRTOS/Source/portable/RVDS 目录只保留
ARM_CM3

导入

img.png

img_1.png

img_2.png

添加 FreeRTOSConfig.h 并修改配置

FreeRTOSConfig.h 文件在 FreeRTOS/Demo/CORTEX_STM32F103_Keil 目录下

#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler

img_4.png

img_3.png

编写测试程序

#include "delay.h"
#include "sys.h"
#include "led.h"
#include "lcd_init.h"
#include "lcd.h"
#include "pic.h"
#include "FreeRTOS.h"
#include "task.h"


void start_task(void *param);
void lcd_task(void *param);

#define START_TASK_PRIO		1           //任务优先级
#define START_STK_SIZE 		128         //任务堆栈大小
#define LCD_TASK_PRIO		2
#define LCD_STK_SIZE 		50 



TaskHandle_t StartTask_Handler;
TaskHandle_t LCDTask_Handler;




int main(void)
{
	delay_init();
	LED_Init();//LED初始化
	LCD_Init();//LCD初始化
	LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
	LED=0;
	
	xTaskCreate(
		start_task,                 //任务函数
		"start_task",        				 //任务名称
		START_STK_SIZE,     			 //任务堆栈大小
		NULL, 							       //传递给任务函数的参数
		START_TASK_PRIO,          //任务优先级
		&StartTask_Handler         //任务句柄     
	);
	vTaskStartScheduler();          //开启任务调度
}



void start_task(void *param)
{
    taskENTER_CRITICAL();       //进入临界区
    
    //创建LED0任务
    xTaskCreate(lcd_task, "lcd0_task", LCD_STK_SIZE, NULL, LCD_TASK_PRIO, &LCDTask_Handler);

    vTaskDelete(StartTask_Handler);
    taskEXIT_CRITICAL();        //退出临界区
}



void lcd_task(void *param)
{
	u8 i,j;
	float t=0;
	while(1)
	{
		LCD_ShowChinese(0,0,"中景园电子",RED,WHITE,32,0);
		LCD_ShowString(0,40,"LCD_W:",RED,WHITE,16,0);
		LCD_ShowIntNum(48,40,LCD_W,3,RED,WHITE,16);
		LCD_ShowString(80,40,"LCD_H:",RED,WHITE,16,0);
		LCD_ShowIntNum(128,40,LCD_H,3,RED,WHITE,16);
		LCD_ShowString(80,40,"LCD_H:",RED,WHITE,16,0);
		LCD_ShowString(0,70,"Increaseing Nun:",RED,WHITE,16,0);
		LCD_ShowFloatNum1(128,70,t,4,RED,WHITE,16);
		t+=0.11;
		for(j=0;j<3;j++)
		{
			for(i=0;i<6;i++)
			{
				LCD_ShowPicture(40*i,120+j*40,40,40,gImage_1);
			}
		}
	}
}


 第二章 FreeRTOS创建任务

 第三章  FreeRTOS任务管理

第四章  FreeRTOS消息队列

第五章  FreeRTOS信号量

第六章  FreeRTOS互斥量

第七章  FreeRTOS事件组

第八章  FreeRTOS任务通知

第九章  FreeRTOS软件定时器

第十章  FreeRTOS内存管理

第十一章  FreeRTOS中断管理