目录

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 - 任务相关推荐

  1. FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析

    FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析 怎么查找就绪任务中优先级最高的? tasks.c中声明了一个全局变量 uxTopReadyPriority,任务从其他状态进入就绪 ...

  2. freeRtos学习笔记 (9) 移植和CPU利用率统计

    freeRtos学习笔记 (9) 移植和CPU利用率统计 使用官方固件移植 首先准备一个能跑的裸机工程 注意,freertos需要使用systick定时器,而stm32HAL库默认使用systick作 ...

  3. freeRtos学习笔记 (8) 任务通知

    freeRtos学习笔记 freeRtos任务通知 任务通知的优缺点 freeRtos任务控制块中包含两个32位的变量,用于任务通知,在一些情况下,任务通知可以替代信号量和事件组,并且比信号量和事件组 ...

  4. freeRtos学习笔记 (7)信号量

    freeRtos学习笔记 freeRtos信号量 信号量种类 信号量分为四种:二值信号量,互斥信号量,计数信号量和递归互斥信号量,其中计数信号量用于管理系统多个共享资源,用计数值表示可用资源数目;二值 ...

  5. freeRtos学习笔记 (6)软件定时器

    freeRtos学习笔记 freeRtos软件定时器 软件定时器需要注意事项 软件定时器的精度基于时钟节拍,例如系统时钟节拍为10ms, 软件定时器定时时间必须是10ms的整数倍,因此软件定时器一般用 ...

  6. freeRtos学习笔记 (5)事件组

    freeRtos学习笔记 freeRtos事件组 为什么要用事件组? 多任务环境下, 任务.中断之间往往需要同步操作,一个事件发生会告知等待中的任 务,即形成一个任务与任务.中断与任务间的同步.事件可 ...

  7. FreeRTOS学习笔记——互斥型信号量

    来自:http://blog.csdn.net/xukai871105/article/details/43456985 0.前言 在嵌入式操作系统中互斥型信号量是任务间资源保护的重要手段.下面结合一 ...

  8. FreeRTOS学习笔记

    FreeRTOS学习笔记 (这是我自己学习FreeRTOS整理的笔记,仅供参考) 第一部分:实现FreeRTOS内核 变量名: 定义变量时往往会把变量的类型当作前缀加在变量上 变量类型 前缀 char ...

  9. 1、野火freertos学习笔记

    野火freertos学习笔记 1.任务 1.1 栈 1.2 任务的切换 taskYIELD(); 1.3 临界段 2.空闲任务 3.任务优先级 4.任务延时的表现 5.时间片 5.1抢占式.协做式 6 ...

  10. 【ESP32+freeRTOS学习笔记-开篇前言】

    目录 前言的前言 RTOS的选择 开发与实践环境 参考资料 笔记的形式 专题文章的链接(持续更新中......) 前言的前言 单片机的开发,也有两年多了,之前一直是做一些简单应用,因此以裸机开发的方式 ...

最新文章

  1. Unity3D脚本中文系列教程(五)
  2. 消息队列—简介以及使用场景
  3. 我的2019年度总结
  4. React开发(278):ant design message res保证正确信息提示
  5. Flink 集群搭建安装 CentOS 7.x 版本
  6. 项目入口_新进展!石家庄地铁项目长安公园站出入口全部封顶
  7. 【CVPR2019】论文完整列表一
  8. linux下的mysql配置
  9. figtree如何编辑进化树_进化树的注释:ggtree
  10. Jmeter+jenkins+ant自动化测试环境搭建
  11. 读书日记- 堆排序算法
  12. Android程序开发初级教程(一)
  13. 命令提示符操作及Java的特点
  14. 【WPS·Excel】数据分析方法汇总
  15. 马哥 python培训
  16. 寄存器与七种寻址方式
  17. 用pinyin4j获取汉语拼音并首字母大写
  18. matlab sor解线性方程组,解线性方程组的SOR迭代法及其MATLAB实现.pdf
  19. 消防水池液位报警装置设置参数
  20. CSS尺寸与文本讲解。HTML、CSS笔记(四)。

热门文章

  1. Spring Cloud---服务熔断Hystrix
  2. 神秘的 Allocator
  3. 支付宝小程序获取用户的user_id案例
  4. Oracle 分析函数(Analytic Functions) 说明
  5. Cannot unpack file C:\Users\ADMINI~1\AppData\Local\Temp\pip-ilsapnxq-unpack\simple.htm
  6. TransUNet:Transformers Make Strong Encoders for Medical Image Segmentation用于医疗图像分割的transformers编码器详解
  7. 运算器设计(Logisim实现)
  8. 全球云计算大会|TcaplusDB一举斩获优秀解决方案奖
  9. 前端面试题 - 面试
  10. B树的原理及代码实现、B+树和B*树介绍及应用