STM32 移植Freertos
来源:互联网 发布:电线电缆报价软件 编辑:程序博客网 时间:2024/05/17 06:03
STM32 移植Freertos
前言:操作系统在嵌入式开发中可能是无论如何也绕不过去的,原来的工作中一直在“裸奔”,对操作系统不是很了解,借助freertos/ucos对操作系统的相关功能和机制进行研究和总结。
一、准备与分析
1.1 下载源码
到Freertos官网下载最新源码,我下载的是8.2.0版本,下载FreeRTOSV8.2.0.exe应用程序,将源码解压至工作目录。
1.2 目录结构
Freertos的源码目录是以编译器为大类,然后以平台为小类,比如在Freertos/Source/portable目录下包括很多编译器的子文件夹,IAR/GCC等等,根据自己的编译器进行选择,例如我使用的是IAR,IAR文件夹下则包括了很多硬件平台的子文件夹,ARM_CM3/MSP430等,这里使用的是ARM_CM3。可以看出Freertos对很对不同平台的支持很好,可以很方便的移植到不同的硬件平台。
1.3 所需文件
与操作系统相关的文件只有三个:queue.c/list.c/tasks.c 位于FreeRTOS\Source目录下
与平台相关的文件包括:port.c/portasm.s/poatmacro.h三个文件,位于FreeRTOS\Source\portable\IAR\ARM_CM3目录下
与内存分配相关的文件位于FreeRTOS\Source\portable\MemMang目录下,这里使用heap_2.c
相关头文件在FreeRTOS\Source\include目录下
操作系统的相关配置文件FreeRTOSConfig.h在FreeRTOS\Demo\CORTEX_STM32F103_IAR目录下
二、建立工程并配置环境
建立IAR工程文件,添加相关文件,这里使用的固件V3.5,添加Freertos相关文件到工程,进行硬件型号与配置头文件路径等配置工作,这里不要忘记汇编头文件的路径,与平台相关的代码中包含了一个汇编文件。
C头文件路径:
$PROJ_DIR$\CMSIS
$PROJ_DIR$\STM32F10x_StdPeriph_Driver\src
$PROJ_DIR$\STM32F10x_StdPeriph_Driver\inc
$PROJ_DIR$\Freertos\include
$PROJ_DIR$\Freertos\portable
$PROJ_DIR$\Freertos
$PROJ_DIR$\StartUp
$PROJ_DIR$\BSP
$PROJ_DIR$\APP
$PROJ_DIR$\STM32F10x_StdPeriph_Driver\src
$PROJ_DIR$\STM32F10x_StdPeriph_Driver\inc
$PROJ_DIR$\Freertos\include
$PROJ_DIR$\Freertos\portable
$PROJ_DIR$\Freertos
$PROJ_DIR$\StartUp
$PROJ_DIR$\BSP
$PROJ_DIR$\APP
汇编头文件路径:
$PROJ_DIR$\APP
三、修改启动代码
由于startup_stm32f10x_md.s文件中的中断向量名称在portasm.s中被重定义了,所以需要修改中断向量名称并做外部声明。修改startup_stm32f10x_md.s文件如下:
四、呼吸灯例程
#include "FreeRTOS.h"#include "task.h"#include "stm32f10x.h"#define LED1_ON() GPIO_SetBits(GPIOA,GPIO_Pin_11)#define LED1_OFF() GPIO_ResetBits(GPIOA,GPIO_Pin_11)void vLEDTask( void *pvParameters ){ for( ;; ) { LED1_ON(); vTaskDelay( 1000/portTICK_RATE_MS ); LED1_OFF(); vTaskDelay( 1000/portTICK_RATE_MS ); }}static void prvSetupHardware( void ){ vLedInit();}void vLedInit( void ){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12; GPIO_Init(GPIOA, &GPIO_InitStructure); }int main( void ){ prvSetupHardware(); xTaskCreate( vLEDTask, "LED", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY+3, NULL ); vTaskStartScheduler(); return 0;}
参考博文
印象笔记为什么不增加调整行间距的功能呢?
0 0
- FreeRTOS STM32移植笔记
- FreeRTOS STM32移植笔记
- FreeRTOS移植到STM32
- FreeRTOS STM32移植笔记
- STM32 移植Freertos
- FreeRTOS STM32移植笔记
- STM32上移植FreeRTOS
- STM32上移植FreeRTOS
- FreeRTOS STM32移植笔记
- FreeRTOS STM32移植笔记
- STM32移植FreeRTOS的Tips
- 1.FreeRTOS的简介&移植FreeRTOS到STM32平台
- FreeRTOS在STM32上移植--详尽篇
- FreeRTOS移植教程 STM32 -- Cortex M3
- FreeRTOS 在STM32上的移植 V1.0
- FreeRTOS 在STM32上的移植 V1.0
- STM32学习笔记(1)如何移植FreeRTOS
- FreeRTOS 移植
- jQuery选择器大全
- HDU ACM 4513 吉哥系列故事——完美队形II->求最长回文串(manacher算法)
- sql server 2008启动时:已成功与服务器建立连接,但是在登录过程中发生错误然后再连接:错误:233
- TestNG运行JUnit测试
- 代理设计模式
- STM32 移植Freertos
- (数据结构第六章)二叉树的顺序存储结构
- 指针法排序/查找数/成绩排序(二维数组)
- NodeJS异常处理uncaughtException篇
- allegro 遇到的问题汇总 避免忘记
- 动态库cp到开发板上的问题
- android软键盘隐藏总结
- 【Android开发经验】Android开发相关的Blog推荐——跟随大神的脚步才能成长为大神
- 用归纳递归实现插入排序