【零基础学习FreeRTOS嵌入式系统】之一:FreeRTOS环境搭建
【零基础学习FreeRTOS嵌入式系统】之一:FreeRTOS环境搭建
一:FreeRTOS系统下载
在官网上https://www.freertos.org/,找到下载入口。
或直接进入下载地址https://sourceforge.net/projects/freertos/files/latest/download?source=files。现在的最新版为10.0.0
在开始移植FreeRTOS前,先介绍下FreeRTOS的源码,源代码目录结构如下所示:
FreeRTOS的源码比较少,其核心部分为tasks.c与list.c,其余的几个文件功能都是可选的。include文件夹里面的文件是操作系统相关的头文件,portable文件夹有些奇葩,里面有:
里面的文件几乎都是与平台相关的的,如果你要删掉这里的文件时就必须小心了,并不是所有的文件都能删除的。注意MemMang这个文件夹,里面存放的是FreeRTOS自带的内存管理方案的源代码:
二:MDK下移植FreeRTOS
MDK工程的新建工作。请参照 正点原子 的教程资料,或直接参考https://jingyan.baidu.com/article/454316ab7ad711f7a7c03a1a.html 此链接所示文章。
我自己工程模板:
(1)添加FreeRTOS源文件
在模板下新建文件夹FreeRTOS文件夹用来存放FreeRTOS的系统文件,再在FreeRTOS的文件夹下新建include文件夹,用来存放h头文件,分开存放利于管理。
(2)拷贝系统文件到指定文件夹(FreeRTOS文件夹)中:
从FreeRTOS的源文件中找到croutine.c timers.c list.c queue.c tasks.c event_group.c 这6个源文件,位置为FreeRTOSv10.0.0->FreeRTOS->source,拷贝到FreeRTOS文件夹下
从FreeRTOS的源代码中找到port.c文件,位置Source->portable->RVDS->ARM_CM3->port.c 拷贝至FreeRTOS文件夹
从FreeRTOS的源文件中找到heap_4.c文件,位置source->portable->MemMang->heap_4.c,拷贝至FreeRTOS文件夹。
完成移动的FreeRTOS文件目录 ,就这几个文件。
(3)拷贝.h文件到指定文件夹(../FreeRTOS/include文件夹)中:
拷贝FreeRTOS源代码下的include文件夹里的全部.h文件至新建立的include文件夹里,位置:source->include
从FreeRTOS的源文件中找到portmacro.h文件拷贝至新建立的include文件夹里,文件位置:source->portable->RVDS->ARM_CM3->portmacro.h
由于我使用的是keil-mdk作为开发工具,使用的是STM32F103VET6为目标芯片,所以需要从FreeRTOS的源文件中找到匹配开发工具与目标芯片的config.h的配置文件。文件在Demo文件夹中,把这个配置文件拷贝FreeRTOS文件夹内。配置文件位置在:
->Demo->CORTEX_STM32F103_Keil->FreeRTOSConfig.h。
至此FreeRTOS操作系统所需要的所有文件已经全部移植完成。
(4)在工程中添加各系统文件
在工程中新建FreeRTOS文件夹,添加工程模板中FreeRTOS的所有文件。完成后的工作空间如下;
至此,点击编译按钮,看是否可以通过编译,生成目标hex文件。
【零基础学习FreeRTOS嵌入式系统】之一:FreeRTOS环境搭建的更多相关文章
- 2019-9-16:渗透测试,基础学习,Linux下软件安装,环境搭建,笔记
Centos linux下软件安装yum 通过分析rpm包头数据后,自动解决依赖关系,直接云端下载软件,根据不同版本系统获取不同软件信息,按顺序下载rpm包,安装软件yum search 软件名:搜索 ...
- 『与善仁』Appium基础 — 1、Android系统的测试环境搭建
目录 1.Android操作系统简介 (1)Android系统诞生 (2)Android系统的结构 (3)Android测试环境搭建整体思路 2.Java环境安装 (1)JDK8下载 (2)安装JDK ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
- 【零基础学习iOS开发】【转载】
原文地址:http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开 ...
- 零基础学习Linux(二)网页乱码问题
上次的博文零基础学习Linux(一)环境搭建中我们已经将Linux环境搭建完毕了,接下来我们就可以进行相关的操作了,在进行操作之前,我们先来看一下大家可能遇到的中文网页乱码问题. 1.问题演示 a)输 ...
- 李洪强iOS开发之【零基础学习iOS开发】【01-前言】01-开篇
从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂 ...
- 零基础学习hadoop到上手工作线路指导
零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...
- 【零基础学习iOS开发】【01-前言】01-开篇
本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开发 四.学习iOS开发的目的 五.学习iOS开发的前提 从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过I ...
随机推荐
- spring-boot-maven-plugin多模块install问题解决办法
一.问题描述: 项目分多个模块,open-eureka注册中心.open-provider服务提供者.open-common公共部分,provider依赖common.父pom使用spring-boo ...
- JDK下载与安装、 Eclipse下载与使用的总结心得_20173311118_牛明旺
一.JDK下载与安装心得: ① 从官网http://www.oracl.com/technetwork/java上下载JDK,注意一定要同意该网站上的协议,否则下载不了(即点击“Accept Lic ...
- 【转载】基于Redis实现分布式锁
背景在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成等等.大部分的解决方案是基于DB实现的,Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端 ...
- 深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件. 本场 Chat 主要内容: Kafk ...
- Android屏幕尺寸单位转换
最近在看Android群英传这本书,书中有一节涉及到了,屏幕尺寸与单位.觉得以后可能会用到,做个笔记. PPI(pixels per inch) ,又称为DPI,它是由对角线的像素点数除以屏幕的大小得 ...
- 洛谷 P3757 [CQOI2017]老C的键盘
题面 luogu 题解 其实就是一颗二叉树 我们假设左儿子小于根,右儿子大于根 考虑树形\(dp\) \(f[u][i]\)表示以\(u\)为根的子树,\(u\)为第\(i\)小 那么考虑子树合并 其 ...
- Yii 使用Widge面面观
我们可以把Widget视为一个嵌入到控制器管理 的视图中的微控制器,其实就是.net框架中的用户控件,或者类似于.net MVC中的子视图.与controller相比较,微件没有既没有动作,也没有过滤 ...
- easyui的datagrid对应的java对象
Easyui中datagrid控件要求的数据格式为: {total:”2”,rows:[{“id”:”1”,”name”,”张三”},{“id”:”2”,”name”,”李四”}]} 所以可以建一个对 ...
- accessToken的使用
1.accessToken是啥,干嘛用? 形象解释:申请调兵-->皇帝同意-->兵符-->开始调兵 拿到用户在第三方平台的唯一的标识; 获取用户的nickname,头像,邮箱等其他信 ...
- 19.Class的基本语法
1.简介 JavaScript 语言中,生成实例对象的传统方法是通过构造函数. function Point(x, y) { this.x = x; this.y = y; } Point.proto ...