超详细的FreeRTOS移植全教程——基于srm32 - 杰杰IoT - 博客园 (cnblogs.com)
源码下载
FreeRTOS - Free RTOS Source Code Downloads, the official FreeRTOS zip file release download
复制源文件
在工程文件夹下新建文件夹命名为freeRTOS,在FreeRTOSv202112.00\FreeRTOS\Source文件夹中复制 .c 文件到src中,复制include文件夹到freeRTOS文件夹下。
portable文件夹主要存放不同架构特定的代码。这里使用keil,因此复制RVDS文件夹及其中的ARM_CM4F文件夹。MemMang是内存管理,也要复制进去。
完成后文件架构如下。
└───freeRTOS
├───include
├───port
│ ├───MemMang
│ └───RVDS
│ ├───ARM_CM4F
└───src
新建工程
如图,将.c文件加入工程,这里使用heap_4管理内存。相关文件在MemMang中。
FreeRTOSConfig.h是自己新建的配置文件,可以从demo里复制。这里是我使用的相关配置
FreeRTOSConfig.h
然后引入相关文件
修改中断
freeRTOS接管了如下三个关键中断
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
然后新建一个任务,在主函数中启动
/* 创建任务句柄 */
static TaskHandle_t 测试rtos = NULL;
static void 测试rtos(void* pvParameters)
{
while (1)
{
DEBUG("测试RTOS\r\n");
vTaskDelay(1000);
// vTaskDelete(AppTask2_Handle);
}
}
/**
*******************************************************************************
** \brief Main function of project
**
** \param None
**
** \retval int32_t return value, if needed
**
******************************************************************************/
int32_t main(void)
{
ClkInit();
CLK_GetClockFreq(&stcClkFreq);
UsartInit();
SysvarInit();
/* Initialize Clock */
BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */
/* 创建AppTaskCreate任务 */
xReturn = xTaskCreate((TaskFunction_t )测试rtos, /* 任务入口函数 */
(const char* )"测试rtos",/* 任务名字 */
(uint16_t )512, /* 任务栈大小 */
(void* )NULL,/* 任务入口函数参数 */
(UBaseType_t )1, /* 任务的优先级 */
(TaskHandle_t* )&AppTask_Handle);/* 任务控制块指针 */
if(pdPASS == xReturn)
vTaskStartScheduler(); /* 启动任务,开启调度 */
else
return -1;
while (1)
{
}
}
- 本文作者: USTHzhanglu
- 本文链接: https://www.cnblogs.com/USTHzhanglu/p/16179944.html
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
评论(0)
您还未登录,请登录后发表或查看评论