FreeRTOS 创建任务

用已经移植好的工程模板  创建一个简单的任务(电量LED灯)

1.硬件初始化

需要用到开发板上的LED灯小江LED灯相关的函数初始化,在main.c中创建一个Init()函数,专门用于板极外设的初始化函数。

 在执行这个函数的时候,还没有涉及到操作系统的操作,运行完Init函数才会启动操作系统,有时候任务创建好了,但是实验现象没有出来,所以在这里进行完硬件初始化工作之后,可以先测试一下硬件。

2.创建单任务—SRAM静态内存

任务使用的栈和任务控制块都是用静态内存,预先定义好的全局变量 存在内部的SRAM中

1.定义任务函数:任务实际上就是一个无限循环且不带返回值的C函数   创建一个任务:让开发板上的LED灯以500ms的频率闪烁

 

 任务是死循环,但是使用AppTaskCreat任务,执行一次后就进行删除,不影响系统运行。任务中的延时函数必须是FreeRTOS中的延时函数,FreeRTOS 的延时函数会阻塞任务,调度器回切换其他任务,从而实现多任务。

2.空闲任务与定时器任务堆栈函数实现

使用创建静态任务时,configSUPPORT_STATIC_ALLOCATION这个宏应该为1,并且实现vApplicationGetIdleTaskMemory()与vApplicationGetTimerTaskMemory(),这两个函数是用户设定的空闲空间Idle和任务与定时器(Timer)任务的堆栈大小,需要用户自己分配,而不是动态分配。

 

 3.定义任务栈:目前只有一个任务,当任务进入延时的时候,因为没有其他就绪任务,系统就会进入空闲任务,在系统中每个任务都是独立的,他们的运行环境需要单独存放在栈空间中。任务栈占用的是MCU的RAM,任务越多需要的栈空间越大,一个MUC能够支持多少任务,取决于RAM空间的大小

4.定义任务控制块:定义好任务函数和任务栈之后,还需要定义一个任务控制块,作为任务的身份证。

5.创建任务句柄:创建任务句柄,任务句柄是一个指针,用于指向一个任务,当任务创建好之后,就具有了一个任务句柄,想操作这个任务都需要通过这个任务句柄 如果是自身的任务操作自己 那个这个句柄为NULL

内核对象句柄:信号量,消息队列,事件标志组这些都属于内核的对象,要想使用这些内核对象,首先要创建,创建成功后会返回一个响应的句柄,实际上是一个指针,我们后续可以通过这个句柄才操作内核对象。内核对象是一种全局的数据结构,通过这个数据结构可以实现任务键的通讯,任务键的事件同步,至于这些功能的实现通过调用内核对象的函数完成。

 6.静态任务创建:任务的三要素是任务主体,任务栈,任务控制块,要把这三要素联系起来就要通过静态任务创建函数,让任务随时可以被系统启动

 

注意一点  在使用静态任务创建时,必须要将FreeRTOSConfig.h中的configSUPPORT_STATIC_ALLOCATION 宏配置为 1

至此 所有的配置已经完成 然后将代下载到开发板中  运行即可~

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值