STM32F103移值FreeRtos笔记
RTOS版本:FreeRTOS_V8.2.2
一、下载FreeRTOS源文件
这个可以在百度上下载,或者在官网上面下载http://www.freertos.org/a00104.html
下图位置即可下载了

目前最新版本是8.2.2
二、下载源码下来,解压,将源码添加到工程
2.1 新建一个移植工程(拷贝原子哥的也行),在工程中新建一个文件夹FreeRTOS存放源码
2.2 打开解压到的源码“..\FreeRTOSv8.2.2”,里边有几个文件夹和文件等东西

看到上图中红色圈圈的就是源码了,整个文件夹拷贝到新建工程的“FreeRTOS”文件夹中
2.4 在源码文件夹中“..\FreeRTOSv8.2.2\FreeRTOS\Demo\CORTEX_STM32F103_Keil”这个路径下,找到文件“FreeRTOSConfig.h”,拷贝到工程文件夹“FreeRTOS”中
三、打开MDK软件,新建工程,添加文件

添加文件如上如所示,红色框框就是添加的FreeRTOS文件了;
“port.c”文件路径..\FreeRTOS\Source\portable\RVDS\ARM_CM3
“heap_2.c”文件路径..\FreeRTOS\Source\portable\MemMang
“list.c”、“queue.c”、“tasks.c”文件路径..\FreeRTOS\Source

五、完成以上工作之后,编写main函数了
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "misc.h"
#include "led.h"
void LED0_Task(void *pvParameters);
void LED1_Task(void *pvParameters);
int main()
{
LED_Init(); //初始化与LED连接的硬件接口
xTaskCreate(LED0_Task,(const char *)"LED0",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+3,NULL);
xTaskCreate(LED1_Task,(const char *)"LED1",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+4,NULL);
vTaskStartScheduler();
}
void LED0_Task(void *pvParameters)
{
while(1)
{
LED0=!LED0;
vTaskDelay(1000/portTICK_RATE_MS);
}
}
void LED1_Task(void *pvParameters)
{
while(1)
{
LED1=!LED1;
vTaskDelay(300/portTICK_RATE_MS);
}
}
只设置了两个LED,按照不同的频率闪烁
六、修改启动文件,首先见启动文件的只读属性去掉,否则修改不了(已经去掉的就略过了)

为什么这么改,我也不明白,IMPORT和EXPORT一个是调用内部引用文件,一个是调用外部引用文件,就和C语音写extern意思差不多。修改这几个地方将函数名和port.c文件中的相同就性了,好调用freertos的函数
七、搞定之后,就开始编译改错了,完成后就下载,看到两个灯按照不同的频率在闪烁,呵呵
八、上面差不多也算大功告成了,另外在中断的时候怎么办,需要保护机制。
//外部中断2服务程序
void EXTI2_IRQHandler(void)
{
taskENTER_CRITICAL();
delay_us(1000);
if(KEY2==0) //按键KEY2
{
BEEP=!BEEP;
}
EXTI_ClearITPendingBit(EXTI_Line2); //清除LINE2上的中断标志位
taskEXIT_CRITICAL();
}
测试了下,在两个灯的基础上,写了一个KEY(用中断方式)触发蜂鸣器,也是可行的。
上面理解了,基本上算入门了,下面主要还是研究UCOS-III,虽然freertos是完全免费的,UCOS需要收费,但是在国内的公司,只要不出口,还是用UCOS的多,混口饭吃还是随大流了,思维方式差不多
我总结了攻城狮在MCU时间利用率上有三个阶段
第一个阶段,只要有延时就采用delay方法,死等,不碰个头破血流不回头
第二个阶段,采用标志位,之前我一直是这样的,我要10ms检测一个东西,我会设置一个主定时,不断的查询到了没有,到了才执行,不到就执行其他事情
第三个阶段,采用操作系统,把上面查询的时间也省了,一个任务完成了,会自动进入到下一个优先级高的地方去,虽然有空闲模式,但是在任务集中的时候,效率还是很高的。
STM32F103移值FreeRtos笔记的更多相关文章
- 移值UCOS2到M4核与M3核的区别
之前移值过ucos2到stm32f2系列的单片机,这个单片机是属于arm的m3内核的.最近在学习永磁同步电机的控制,对于这个电机的控制,有比较多的数学计算,甚至于还有浮点的运算.所以用到了stm32f ...
- dotnet core 在 MIPS 下的移值进度
本文仍处于修订中 写在开始前 我们的主要业务基于 dotnet core 2.x 与 3.1 完成,目前 dotnet core 3.1 支持的 CPU 架构列表中还不包含龙芯,且在 gitlab i ...
- 位运算求最值 学习笔记 (待补充QAQ)
没有什么前言?直接进入正题qwq 俩俩异或 求最值: 建trie树 O(n)枚举每个数找这个数的最值,每次反走就成,还可以剪枝一波(如果在某位已经小于ans显然可以直接return? void Ins ...
- FreeRTOS笔记
任务的创建和删除(静态方法) 任务创建后要开启调度器. FreeRTOSConfig.h 1. 改宏 使能静态创建函数. 会出现,有两个函数未定义. Cortex-M中断管理(上) NVIC:嵌套向量 ...
- java的值传递笔记
1. 背景:开发小伙伴突然问我java是值传递还是引用传递,我说当然是值传递,只不过有时候传递一个对象时实际传递的是对象的地址值,所以让人容易产生一种引用传递的假象,貌似在李刚的疯狂java讲义有提到 ...
- dm9000c 移值新内核 linux-4.1.24
错误 1 /home/dm9000/dm9dev9000c.c:309: error: conflicting types for 'phy_read'include/linux/phy.h:637: ...
- s3c2440 移值u-boot-2016.03 第6篇 支持mtd yaffs 烧写
1, 解决启动时的错误 Warning - bad CRC, using default environment 搜索发现 在 /tools/env/fw_env.c 中 /* 放在NAND FLAS ...
- s3c2440 移值u-boot-2016.03 第3篇 支持Nor flash 识别
当选择,NOR flash 启用时,才可以访问 NOR FLASH ./common/board_r.c 364 line:initr_flash()flash_size = flash_init() ...
- 《JS高程》基本类型和引用类型的值学习笔记
ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 创建方式类似:创建一个变量并为其赋值. (1)基本类型值和引用类型值比较 基本类型值 引用类型值 简单的数据段 可能由 ...
随机推荐
- 洛谷 P1084 疫情控制 —— 二分+码力
题目:https://www.luogu.org/problemnew/show/P1084 5个月前曾经写过一次,某个上学日的深夜,精疲力竭后只有区区10分,从此没管... #include< ...
- bzoj1085 [SCOI2005]骑士精神——IDA*
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 搜索,IDA*,估价就是最少需要跳的步数: 代码意外地挺好写的,memcmp 用起来好 ...
- 2-3 原生小程序 - 项目app.json配置
App.json它其实有四五个配置,但是最重要的是pages.windows和tabbar.tabbar是做导航的处理的. 官方推荐的入门配置之一: app.json 它其实有一些字段是限制了这个格式 ...
- System.out.println()的含义
system是java.lang包中定义的一个内置类,在该类中定义了一个静态对象out out是PrintStream类的实例对象 println是PrintStream类中的方法
- Swift5.1 语言指南(二十九)高级运算符
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- MySQL性能优化神器Explain
本文涉及:MySQL性能优化神器Explain的使用 简介 虽然使用Explain不能够马上调优我们的SQL,它也不能给予我们一些调整建议,但是它能够让我们了解MySQL 优化器是如何执行SQL 语句 ...
- 添加jar到mvn私服
1.生成jar文件 2.jar目录下执行: mvn install:install-file -Dfile=jave-1.0.2.jar -DgroupId=joinery -DartifactId= ...
- QuartzJobs 如何发布服务
http://www.cnblogs.com/jys509/p/4614975.html http://www.cnblogs.com/lc-chenlong/p/3948760.html 安装:To ...
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 Minimum Distance in a Star Graph
In this problem, we will define a graph called star graph, and the question is to find the minimum d ...
- 常用点击事件(鼠标、光标、键盘、body)
常用事件: 鼠标: onclick(单击) ondblclick(双击) oncontextmenu(右击) onmouseover onmouseout 光标: onfocus onblur 键盘: ...