STM32F103移值FreeRtos笔记

简介: 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检测一个东西,我会设置一个主定时,不断的查询到了没有,到了才执行,不到就执行其他事情

第三个阶段,采用操作系统,把上面查询的时间也省了,一个任务完成了,会自动进入到下一个优先级高的地方去,虽然有空闲模式,但是在任务集中的时候,效率还是很高的。

相关文章
|
2月前
|
消息中间件 Web App开发 API
FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6
FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6
FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6
|
2月前
|
中间件 编译器 调度
STM32cubemx对FreeRTOS的适配(工程模板配置)
STM32cubemx对FreeRTOS的适配(工程模板配置)
136 0
|
10月前
|
传感器 移动开发 C语言
实战经验:stm32cubMX自动生成遇到的坑爹问题(Freertos)
实战经验:stm32cubMX自动生成遇到的坑爹问题(Freertos)
162 0
|
API
STM32cubeMX配置FreeRTOS
STM32cubeMX配置FreeRTOS
136 0
STM32cubeMX快速配置FreeRTOS任务
STM32cubeMX快速配置FreeRTOS任务
215 0
STM32cubeMX配置FreeRTOS软件定时器
STM32cubeMX配置FreeRTOS软件定时器
160 0
|
传感器 物联网 5G
stm32f103ret6+sim800c+freertos上阿里云IOT笔记,后附视频(5分钟)
最近在研究阿里云的物联网的物联网平台,终于跑通了,把过程大概描述一下, 供大家参考一下吧。总的来讲不算太复杂,搞清楚设备使用MQTT协议connect和publish的部分就可以了。
2400 2
stm32f103ret6+sim800c+freertos上阿里云IOT笔记,后附视频(5分钟)
|
26天前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
84 2
|
26天前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
94 4