很多教程都是基于内存大的开发板,像手里只有最小系统板的,做不了相关实验,就把最近学习到的最小系统板的代码分享出来
main.c
#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "usart.h"
#include "FreeRTOS.h"
#include "task.h"
#include "oled.h"
//起始任务 优先级
#define START_TASK_PRIO 1
//任务堆栈大小
#define START_STK_SIZE 128
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);
//任务一 任务优先级
#define TASK1_PRIO 2
//任务堆栈区大小
#define TASK1_STK_SIZE 50
//任务句柄
TaskHandle_t TASK1_handler;
//任务函数
void task1(void *pvParameters);
//任务二 任务优先级
#define TASK2_PRIO 3
//任务堆栈区大小
#define TASK2_STK_SIZE 50
//任务句柄
TaskHandle_t TASK2_handler;
//任务函数
void task2(void *pvParameters);
//任务三 任务优先级
#define TASK3_PRIO 4
//任务堆栈区大小
#define TASK3_STK_SIZE 50
//任务句柄
TaskHandle_t TASK3_handler;
//任务函数
void task3(void *pvParameters);
//任务四 任务优先级
#define TASK4_PRIO 5
//任务堆栈区大小
#define TASK4_STK_SIZE 50
//任务句柄
TaskHandle_t TASK4_handler;
//任务函数
void task4(void *pvParameters);
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
int main()
{
SysTick_Init(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4
LED_Init();
GPIO_OUT_Init();
USART1_Init(115200);
//创建开始任务
xTaskCreate((TaskFunction_t )start_task,
(const char* )"start_task",
(u16 )START_STK_SIZE,
(void* )NULL,
(UBaseType_t )START_TASK_PRIO,
(TaskHandle_t* )&StartTask_Handler);
vTaskStartScheduler(); //开启任务调度
}
//开始任务任务函数
void start_task(void *pvParameters)
{
taskENTER_CRITICAL(); //进入临界区
//创建TASK1任务
xTaskCreate((TaskFunction_t )task1,
(const char* )"task1",
(u16 )TASK1_STK_SIZE,
(void* )NULL,
(UBaseType_t )TASK1_PRIO,
(TaskHandle_t* )&TASK1_handler);
xTaskCreate((TaskFunction_t )task2,
(const char* )"task2",
(u16 )TASK2_STK_SIZE,
(void* )NULL,
(UBaseType_t )TASK2_PRIO,
(TaskHandle_t* )&TASK2_handler);
xTaskCreate((TaskFunction_t )task3,
(const char* )"task3",
(u16 )TASK3_STK_SIZE,
(void* )NULL,
(UBaseType_t )TASK3_PRIO,
(TaskHandle_t* )&TASK3_handler);
xTaskCreate((TaskFunction_t )task4,
(const char* )"task4",
(u16 )TASK4_STK_SIZE,
(void* )NULL,
(UBaseType_t )TASK4_PRIO,
(TaskHandle_t* )&TASK4_handler);
vTaskDelete(StartTask_Handler); //删除开始任务
taskEXIT_CRITICAL(); //退出临界区
}
//任务1函数
void task1(void *pvParameters)
{
while(1)
{
PIN_1 = 1;
vTaskDelay(200);
PIN_1 = 0;
vTaskDelay(800);
}
}
//任务2函数
void task2(void *pvParameters)
{
while(1)
{
PIN_2 = 1;
vTaskDelay(400);
LED1 = ~LED1;
PIN_2 = 0;
vTaskDelay(600);
}
}
//任务3函数
void task3(void *pvParameters)
{
while(1)
{
PIN_3 = 1;
vTaskDelay(600);
PIN_3 = 0;
vTaskDelay(400);
}
}
//任务4函数
void task4(void *pvParameters)
{
while(1)
{
PIN_4 = 1;
vTaskDelay(800);
PIN_4 = 0;
vTaskDelay(200);
}
}