FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS
上一次,我们简单的测试了FreeRTOS的基于IAR EWARM v6.4和STM32F103VET6平台的Demo,对其有了一个基本认识。接下来我们开始自己移植FreeRTOS的过程。
1、创建一个“FreeRTOSTestProject”项目文件夹,并在其下创建FreeRTOS、Libraries、Project、User文件夹。

与无操作系统的项目一样User中存放应用文件;Project中存放项目文件;Libraries中存放STM32F1xx标准库文件。而在FreeRTOS文件夹中存放操作系统文件。
将\FreeRTOSv9.0.0\FreeRTOS\Source目录下的6个源文件及include文件夹复制到新建项目的FreeRTOS文件夹。

将\FreeRTOSv9.0.0\FreeRTOS\Source\portable\IAR\ARM_CM3目录下的三个文件也复制到新建项目的FreeRTOS文件夹。

将FreeRTOSv9.0.0\FreeRTOS\Source\portable\MemMang目录下的heap_4.c文件复制到新建项目的FreeRTOS文件夹。

对于内存管理的几个文件的大致内容如下:
- heap_1.c:这是所有实现中最简单的一个。一旦分配内存之后,它甚至不允许释放分配的内存。
- heap_2.c:和heap_1不同,这个方案使用一个最佳匹配算法,它允许释放之前分配的内存块。它不会把相邻的空闲块合成一个更大的块,可能会造成内存碎片。
- heap_3.c:简单的包装了标准库中的malloc()和free()函数,包装后的malloc()和free()函数具备线程保护。
- heap_4.c:这个方案使用一个最佳匹配算法,但不像方案2那样。它会将相邻的空闲内存块合并成一个更大的块。
- heap_5.c:这个方案同样实现了heap_4.c中的合并算法,并且允许堆栈跨越多个非连续的内存区。
将\FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_STM32F103_IAR目录下的FreeRTOSConfig.h文件复制到新建项目的FreeRTOS文件夹。

至此,全部用于移植的文件准备完成。
2、在IAR EWARM中新建workspace,再一个项目,取名为FreeRTOSTest,并添加组:

并向个组中添加相应的文件。
3、配置项目选项
项目的属性选项配置与误操作系统时一样,需要说一下的是在Assembler中的Preprocessor标签下添加$PROJ_DIR$\..\..\User\inc路径,因为在会变文件中有对FreeRTOSConfig.h文件的引用。

4、修改FreeRTOSConfig.h 配置文件,这个根据需要修改,目前只定义如下3个宏定义,避免去修改启动文件:
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
如果仅作次修改,编译时会报警说重复定义,所以还需要注释掉stm32f10x_it.c文件中对三个函数的定义。
5、编写测试应用
在main.c文件中添加相应的代码,声明如下函数及代码(我计划4个任务):
/***************************************************************************
函数声明
***************************************************************************/
static void vTask1(void *pvParameters);
static void vTask2(void *pvParameters);
static void vTask3(void *pvParameters);
static void vTask4(void *pvParameters);
static void AppTaskCreate (void);
/***************************************************************************
变量声明
***************************************************************************/
static TaskHandle_t xHandleTask1 = NULL;
static TaskHandle_t xHandleTask2 = NULL;
static TaskHandle_t xHandleTask3 = NULL;
static TaskHandle_t xHandleTask4 = NULL;
任务创建函数如下:
static void AppTaskCreate (void)
{
xTaskCreate( vTask1, "vTask1",, NULL,, &xHandleTask1);
xTaskCreate( vTask2, "vTask2",, NULL,, &xHandleTask2);
xTaskCreate( vTask3, "vTask3",, NULL,, &xHandleTask3);
xTaskCreate( vTask4, "vTask4",, NULL,, &xHandleTask4);
}
主函数如下:
int main(void)
{
/* 创建任务 */
AppTaskCreate();
/* 启动任务调度,开始执行任务 */
vTaskStartScheduler();
}
编译无错误4个任务同时运行。移植初步测试成功。
FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS的更多相关文章
- hadoop2.5.2学习及实践笔记(二)—— 编译源代码及导入源码至eclipse
生产环境中hadoop一般会选择64位版本,官方下载的hadoop安装包中的native库是32位的,因此运行64位版本时,需要自己编译64位的native库,并替换掉自带native库. 源码包下的 ...
- i2c设备驱动移植笔记(二)
说明:上一篇博客写了我在移植android驱动之TEF6606的苦逼遭遇,即驱动层向应用层提供接口支持,查找了两天的资料,不得不放弃,转而进行IIC下移植RTC设备的实验. 第一步:查找设备的数据手册 ...
- C语言学习及应用笔记之二:C语言static关键字及其使用
C语言有很多关键字,大多关键字使用起来是很明确的,但有一些关键字却要相对复杂一些.我们这里要说明的static关键字就是如此,它的功能很强大,相应的使用也就更复杂. 一般来说static关键字的常见用 ...
- 学习Python函数笔记之二
---恢复内容开始--- 1.内置函数:取绝对值函数abs() 2.内置函数:取最大值max(),取最小值min() 3.内置函数:len()是获取序列的长度 4.内置函数:divmod(x,y),返 ...
- 学习Python函数笔记之二(内置函数)
---恢复内容开始--- 1.内置函数:取绝对值函数abs() 2.内置函数:取最大值max(),取最小值min() 3.内置函数:len()是获取序列的长度 4.内置函数:divmod(x,y),返 ...
- 学习javscript函数笔记(二)
定义: 函数包含一组语句,他们是JavaScript的基础模块单元,用于代码复用.信息隐藏和组合调用.函数用于指定对象的行为. 1.函数对象 JavaScript中的函数就是对象,函数对象连接到Fun ...
- ARM-Linux内核移植之(二)——Linux2.6.22内核移植
平台:mini2440 交叉工具链:arm-linux-gcc-4.3.2 一.内核移植基本知识 移植内核也叫构建BSP(boardsupprot packet).BSP的作用有两个:一是为内核运行 ...
- hadoop2.5.2学习及实践笔记(四)—— namenode启动过程源码概览
对namenode启动时的相关操作及相关类有一个大体了解,后续深入研究时,再对本文进行补充 >实现类 HDFS启动脚本为$HADOOP_HOME/sbin/start-dfs.sh,查看star ...
- FreeRTOS学习及移植笔记之一:开始FreeRTOS之旅
1.必要的准备工作 工欲善其事,必先利其器,在开始学习和移植之前,相应的准备工作必不可少.所以在开始我们写要准备如下: 测试环境:我准备在STM32F103平台上移植和测试FreeRTOS系统 准备F ...
随机推荐
- 您还在招聘网上海量投简历然后等面试机会吗?那你已经OUT了。
工作也可以来找我们.不行看完这篇. 从毕业到现在,换了2次工作.每次都在为招工组烦恼.找工作这个问题,不管是应届生还是职场老手.都面临一个问题就是找工作的平台.纵观目前的找工作的形式,主流的不外乎就两 ...
- RTC时钟
1.设置时间之前取消备份区域(BKP)写保护 主要有两部分组成 1.用来和APB1总线对接,对其进行读写操作 2. 预分频模块:在RTC_CR设置相应的允许,位每个TR_CLK周期中RTC产生一个中断 ...
- VIM编辑器简单总结
第一讲小结 1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键. h (左移) j (下行) k (上行) l (右移) 2. ...
- linux基础知识与技能3
3.2.vi的高级使用* 查找在命令模式下,输入/xxx,就可以查找到xxx * 快速切换行在命令模式下,输入:num,就可以快速切换到num行 * 设置显示行号在命令模式下,输入:set nu,就可 ...
- ajax(通过jQuery实现)
使用jQuery实现ajax相对来说方便一点,看w3cschool有几种实现的方法,我就总结一下自己以后会用到的几种方法 $.ajax方法: $.ajax方法里面有很多个参数可以使用,但我这里就写自己 ...
- 自创yum源
这里我们用U盘装完系统以后,我们要是使用yum命令的话,我们是装不上包的 这个时候我们装系统的时候 [root@kz-002 Packages]# df -h Filesystem Size Used ...
- Android LitePal 神一般的数据库框架 超级好用
参考: Android数据库高手秘籍(一)--SQLite命令 Android数据库高手秘籍(二)--创建表和LitePal的基本用法 Android数据库高手秘籍(三)--使用LitePal升级表 ...
- 第一篇puppet
1,什么是puppet puppet是一种Linux.Unix.windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件.用户.cron任务.软件包.系统服务等.puppe ...
- python模块(六)
模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
- 增量关联规则挖掘—FUP算法
一.背景介绍 关联规则( Association rule)概念最初由Agrawal提出,是数据挖掘的一个重要研究领域, 其目的是发现数据集中有用的频繁模式. 静态关联规则挖掘,是在固定数据集和支持度 ...