FreeRTOS学习笔记 2 - 任务
目录
1. 创建任务
2. 任务睡眠
3. 开始任务
4. 实例
FreeRTOS的任务和RT Thread的进程应该是同一个概念。
1. 创建任务
#define rtosCreateThread( \handle, /*Thread Handle*/ \name, /*Thread Name*/ \entry, /*Thread Entry*/ \parameter, /*Thread Entry Parameter*/ \stack, /*the pointer of stack*/ \stackSize, /*the size of stack*/ \priority, /*Thread priority*/ \tick /*The total tick of thread running*/ \) \{ \xTaskCreate(entry, name, stackSize, \parameter, priority, &handle); \}
FreeRTOS也可以支持动态创建和静态创建,静态的方式通过宏定义configSUPPORT_STATIC_ALLOCATION控制开关,默认关闭,所以这里只保留动态的方式。
另外,FreeRTOS的任务不支持设定时间片属性,虽然FreeRTOS也支持同优先级按时间片执行,但是它的时间片是固定的,和系统时钟同步,即设置configTICK_RATE_HZ的参数就是时间片大小,比如设置configTICK_RATE_HZ = 1000,即1ms的时钟,那么任务也是1ms的时钟片。
其他参数的含义与RT Thread一样。
2. 任务睡眠
#define rtosThreadSleep( \tick \) \{ \vTaskDelay(tick); \}
FreeRTOS支持2个延时函数,相对延时函数vTaskDelay()和绝对延时函数vTaskDelayUntil()。vTaskDelay是在调用这个函数后延时参数tick的时间,而vTaskDelayUntil则是保证tick时间是周期的,尽管这个周期内任务可能会被其他因素影响。
3. 开始任务
FreeRTOS不能像RT Thread一样单独启动任务,只能统一启动调度器。
#define rtosThreadStartScheduler() \{ \vTaskStartScheduler(); \}
4. 实例
先创建2个同优先级的任务,由于接口一致,其实是和RT Thread例子是一样的,区别是部分参数没用到,例如tick参数是无效的。
rtosCreateThread(handle1, "thread1",thread1Entry, (void *)0,NULL,256,RTOS_PRIORITY_MAX - 1, 1200);if(handle1 != NULL)Printf("Create Thread 1 OK\n");rtosCreateThread(handle2, "thread2",thread2Entry, (void *)0,NULL,256,RTOS_PRIORITY_MAX - 1, 600);if(handle2 != NULL)Printf("Create Thread 2 OK\n");
2个任务打印信息看任务切换,因为FreeRTOS的时间片是固定的,所以要把系统的tick设置大一些,configTICK_RATE_HZ设置为100,即10ms的tick。
static RTOS_THREAD_HANDLE handle1 = NULL;
static RTOS_THREAD_HANDLE handle2 = NULL;static void thread1Entry(void *parameter)
{uint32_t count = 0;while (1){Printf("1:%d\n", count++);rtosThreadYield();}
}static void thread2Entry(void *parameter)
{uint32_t count = 0;while (1){Printf("2:%d\n", count++);delayms(300);}
}
任务1打印结束后直接退出控制,任务2则是延时300ms(delayms只是单纯的延时,且不准,不涉及任务切换)。打印结果如下:
2:0
1:0
1:1
1:2
1:3
1:4
1:5
1:6
1:7
1:8
1:9
任务1打印多次后会打印一次2,一直循环这种情况,因为任务2打印一次会delay 300ms,实际任务2也是和任务1一直以10ms交替运行的。
FreeRTOS学习笔记 2 - 任务相关推荐
- FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析
FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析 怎么查找就绪任务中优先级最高的? tasks.c中声明了一个全局变量 uxTopReadyPriority,任务从其他状态进入就绪 ...
- freeRtos学习笔记 (9) 移植和CPU利用率统计
freeRtos学习笔记 (9) 移植和CPU利用率统计 使用官方固件移植 首先准备一个能跑的裸机工程 注意,freertos需要使用systick定时器,而stm32HAL库默认使用systick作 ...
- freeRtos学习笔记 (8) 任务通知
freeRtos学习笔记 freeRtos任务通知 任务通知的优缺点 freeRtos任务控制块中包含两个32位的变量,用于任务通知,在一些情况下,任务通知可以替代信号量和事件组,并且比信号量和事件组 ...
- freeRtos学习笔记 (7)信号量
freeRtos学习笔记 freeRtos信号量 信号量种类 信号量分为四种:二值信号量,互斥信号量,计数信号量和递归互斥信号量,其中计数信号量用于管理系统多个共享资源,用计数值表示可用资源数目;二值 ...
- freeRtos学习笔记 (6)软件定时器
freeRtos学习笔记 freeRtos软件定时器 软件定时器需要注意事项 软件定时器的精度基于时钟节拍,例如系统时钟节拍为10ms, 软件定时器定时时间必须是10ms的整数倍,因此软件定时器一般用 ...
- freeRtos学习笔记 (5)事件组
freeRtos学习笔记 freeRtos事件组 为什么要用事件组? 多任务环境下, 任务.中断之间往往需要同步操作,一个事件发生会告知等待中的任 务,即形成一个任务与任务.中断与任务间的同步.事件可 ...
- FreeRTOS学习笔记——互斥型信号量
来自:http://blog.csdn.net/xukai871105/article/details/43456985 0.前言 在嵌入式操作系统中互斥型信号量是任务间资源保护的重要手段.下面结合一 ...
- FreeRTOS学习笔记
FreeRTOS学习笔记 (这是我自己学习FreeRTOS整理的笔记,仅供参考) 第一部分:实现FreeRTOS内核 变量名: 定义变量时往往会把变量的类型当作前缀加在变量上 变量类型 前缀 char ...
- 1、野火freertos学习笔记
野火freertos学习笔记 1.任务 1.1 栈 1.2 任务的切换 taskYIELD(); 1.3 临界段 2.空闲任务 3.任务优先级 4.任务延时的表现 5.时间片 5.1抢占式.协做式 6 ...
- 【ESP32+freeRTOS学习笔记-开篇前言】
目录 前言的前言 RTOS的选择 开发与实践环境 参考资料 笔记的形式 专题文章的链接(持续更新中......) 前言的前言 单片机的开发,也有两年多了,之前一直是做一些简单应用,因此以裸机开发的方式 ...
最新文章
- Unity3D脚本中文系列教程(五)
- 消息队列—简介以及使用场景
- 我的2019年度总结
- React开发(278):ant design message res保证正确信息提示
- Flink 集群搭建安装 CentOS 7.x 版本
- 项目入口_新进展!石家庄地铁项目长安公园站出入口全部封顶
- 【CVPR2019】论文完整列表一
- linux下的mysql配置
- figtree如何编辑进化树_进化树的注释:ggtree
- Jmeter+jenkins+ant自动化测试环境搭建
- 读书日记- 堆排序算法
- Android程序开发初级教程(一)
- 命令提示符操作及Java的特点
- 【WPS·Excel】数据分析方法汇总
- 马哥 python培训
- 寄存器与七种寻址方式
- 用pinyin4j获取汉语拼音并首字母大写
- matlab sor解线性方程组,解线性方程组的SOR迭代法及其MATLAB实现.pdf
- 消防水池液位报警装置设置参数
- CSS尺寸与文本讲解。HTML、CSS笔记(四)。
热门文章
- Spring Cloud---服务熔断Hystrix
- 神秘的 Allocator
- 支付宝小程序获取用户的user_id案例
- Oracle 分析函数(Analytic Functions) 说明
- Cannot unpack file C:\Users\ADMINI~1\AppData\Local\Temp\pip-ilsapnxq-unpack\simple.htm
- TransUNet:Transformers Make Strong Encoders for Medical Image Segmentation用于医疗图像分割的transformers编码器详解
- 运算器设计(Logisim实现)
- 全球云计算大会|TcaplusDB一举斩获优秀解决方案奖
- 前端面试题 - 面试
- B树的原理及代码实现、B+树和B*树介绍及应用