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)基本类型值和引用类型值比较 基本类型值 引用类型值 简单的数据段 可能由 ...
随机推荐
- 谷歌浏览器(Chrome)查看http报文headers信息
转自:https://blog.csdn.net/floatdreamed/article/details/79208719 ①打开谷歌浏览器,随意输入要搜索的内容 ②按下F12键,此时会弹出浏览器的 ...
- 用户能够在下次登录系统时被重新配置---或win10早期更新不成功的bug就需要删除多余的登陆用户
有时候我们希望删除本地计算机上的一位用户,或者期待一位用户能够在下次登录系统时被重新配置.但是仅删除%userprofile%目录是不够的,因为一个登录名会对应一个SSID,这个SSID还保留在注册表 ...
- bzoj 1833: [ZJOI2010]count 数字计数【数位dp】
非典型数位dp 先预处理出f[i][j][k]表示从后往前第i位为j时k的个数,然后把答案转换为ans(r)-ans(l-1),用预处理出的f数组dp出f即可(可能也不是dp吧--) #include ...
- Spark之RDD的定义及五大特性
RDD是分布式内存的一个抽象概念,是一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,能横跨集群所有节点并行计算,是一种基于工作集的应用抽象. RDD底层存储原理:其数据分布存储于多台机器上 ...
- SVN安装失败提示
svnserve: error while loading shared libraries: libaprutil-1.so.0: cannot open shared object file: 1 ...
- 使用Oracle的DBMS_SQL包执行动态SQL语句
引用自:http://blog.csdn.net/ggjjzhzz/archive/2005/10/17/507880.aspx 在某些场合下,存储过程或触发器里的SQL语句需要动态生成.Oracle ...
- 2017-12-04HTML table布局
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Android 比SwipeRefreshLayout更漂亮和强大的下拉刷新控件:Android-MaterialRefreshLayout
这是一个下拉刷新的控件,它比SwipeRefreshLayout更加漂亮和强大.它易于使用并且支持API LEVEL >= 8.希望你能够喜欢. Now let me talk about Ma ...
- windows server 2008 如何查看异常重启日志
下面蓝队网络为大家介绍下windows server 2008 如何查看异常重启日志 开始->管理工具->时间查看器 windows日志->系统 筛选当前日志 选择Kernel-Po ...
- java继承问题
代码: 父类: public class Father { public Father() { System.out.println("基类构造函数{"); show(); new ...