当前位置:首页 > 单片机 > 单片机
[导读]RTOS版本:FreeRTOS_V8.2.2一、下载FreeRTOS源文件 这个可以在百度上下载,或者在官网上面下载http://www.freertos.org/a00104.html 下图位置即可下载了 目前最新版本是8.2.2二、下载源码下来,解压,将源码添

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.2FreeRTOSDemoCORTEX_STM32F103_Keil”这个路径下,找到文件“FreeRTOSConfig.h”,拷贝到工程文件夹“FreeRTOS”中

三、打开MDK软件,新建工程,添加文件

添加文件如上如所示,红色框框就是添加的FreeRTOS文件了;
“port.c”文件路径..FreeRTOSSourceportableRVDSARM_CM3
“heap_2.c”文件路径..FreeRTOSSourceportableMemMang
“list.c”、“queue.c”、“tasks.c”文件路径..FreeRTOSSource

五、完成以上工作之后,编写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检测一个东西,我会设置一个主定时,不断的查询到了没有,到了才执行,不到就执行其他事情

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


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

  引言   根据世界卫生组织公布的数据,全世界目前有3 000多万人目盲,其中约有18%是中国人。针对盲人行动不便的情况,本文介绍了一种基于超声相控阵的盲人避障系统。   本文

关键字: stm32f103 超声相控阵 导盲系统

  随着IPTV和多媒体业务的迅速发展,用户对接入带宽的要求不断增加,目前的铜线接入技术很难满足用户对高带宽、双向传输、及安全性方面的要求。在2010年以前,FTTB是中国主流的FTTx建网模式

关键字: stm32f103 张力传感器

引言 随着互联网技术、无线通信技术以及生物传感器技术的进一步发展,可供病人在医院、家庭等环境中使用的可穿戴健康监测预警系统已成为国内外研究人员关注的热点。 本文设计了一种应用互联

关键字: stm32f103 互联网 脉搏监测

致力于亚太地区市场的领先半导体元器件分销商---大联大控股宣布,其旗下友尚推出基于意法半导体(ST)STM32F103与德州仪器(TI)CC2564的智能车载双模蓝牙方案WLT2564S。该车载

关键字: stm32f103 蓝牙

2016年8月16日,致力于亚太地区市场的领先半导体元器件分销商---大联大控股宣布,其旗下友尚推出基于意法半导体(ST)STM32F103与德州仪器(TI)CC2564的智能车载双模蓝牙方案W

关键字: cc2564 stm32f103 大联大友尚

在做有AD模块项目的时候遇到几个问题:1, ADC配合DMA采样规则是怎样的。2, ADC在DMA采可否不连续采样,以提高有效采样使用率和降低功耗。3, 如何提高有效利用率和降低功耗,并减少CPU的占用时间。4, ADC...

关键字: adc stm32f103

//代码仅仅是配置使能串口和相应的中断处理函数,具体功能需要自己定义//IAR 7.1#include "stm32_uart.h"uint8_t card_ture=0;uint16_t add_c...

关键字: stm32f103 中断 双串口配置

1、配置STM32F103的SPI口void AD7606_Port_Init(void){GPIO_InitTypeDef GPIO_InitStructure;SPI_InitTypeDef SPI_InitStr...

关键字: stm32f103 模拟信号 ad7606

看了TFTLCD和FSMC(灵活的静态存储控制器)的简介,还是一知半解,不知所云。TFTLCD使用80并口,80 并口有如下一些信号线:CS: TFTLCD 片选信号。WR:向 TFTLCD 写入数据。RD:从 TFTL...

关键字: stm32f103 tftlcd 显示

官方提供的库文件中,HSE(外部高速时钟)默认为8MHz,最高主频为8*9=72MHz,如果将HSE变为12MHz,不修改库文件的话,最高主频则变为12*9=108MHz,最典型的问题就是USART可以通信,但是接收到的...

关键字: stm32f103 外部晶振
关闭
关闭