
RTOS
grey_csdn
这个作者很懒,什么都没留下…
-
原创 304_S32K144 FreeRTOS的工作时钟提升
完整的S32K144的学习汇总如下:https://github.com/GreyZhang/g_s32k144 继续S32K144的学习,这一次看一下FreeRTOS的工作时钟修改。其实,这就是一个简单的power-mode的切换。但是,在效果上能够看得出FreeRTOS的行为的变化。这种配置,应该载我们工程创建之初就进行修改,这样会让其他的软件适配更简单。不过,从实际的体验看,这...2020-03-08 10:29:05471
0
-
原创 294_S32K144 FreeRTOS获取剩余的heap空间
完整的S32K144的学习汇总如下:https://github.com/GreyZhang/g_s32k144继续S32K144以及FreeRTOS的学习,这一次看看heap剩余存储的信息获取。在实际的工程中,随着内存不断被申请,这个资源很可能会成为短板。如果有一个可以实时查看heap剩余空间这样的功能,可以方便我们在软件的调试过程中知道当前的资源使用情况然后根据这个做相应的优化。找...2020-03-01 20:29:46482
0
-
原创 293_S32K144 FreeRTOS守护程序启动监控
完整的S32K144的学习汇总如下:https://github.com/GreyZhang/g_s32k144继续S32K144的学习,这一次继续总结FreeRTOS的部分功能。这次总结的对象是守护程序的启动监控。关于守护程序,我个人的简单理解是只有这个程序开启了之后FreeRTOS的各项功能才能够有序展开。如果在此之前,使用了一些FreeRTOS的接口的话可能就会导致一些系统的异常...2020-03-01 18:42:09147
0
-
原创 292_S32K144 FreeRTOS中获取任务的优先级
完整的S32K144的学习汇总如下:https://github.com/GreyZhang/g_s32k144继续S32K144的学习,这次小结的对象还是FreeRTOS。这一次看一下任务优先级获取的一个接口。说起来,这个功能我暂时没有考虑到应该如何在我的应用中使用。但是,总归是一个可以纳入到OS本身工具箱的一个功能。为了能够获取所有任务的优先级,我们创建任务的方式有限得修改一下,增...2020-03-01 18:23:41190
0
-
原创 291_使用FreeRTOS的Tick hook
完整的S32K144的学习汇总如下:https://github.com/GreyZhang/g_s32k144继续学习S32K144,这次基于这个芯片看一个FreeRTOS的功能。这次看的是FreeRTOS的Tick Hook功能。之前已经看过idle hook了,其实这个功能与之十分相似。启用相应的功能,需要配置一个宏参数。而SDK配合IDE提供了更加便捷的功能,我们可以仅仅增加一...2020-03-01 17:04:50266
0
-
原创 290_基于FreeRTOS的串口接收功能
完整的S32K144的学习汇总如下:https://github.com/GreyZhang/g_s32k144继续S32K144的学习,昨天实现了一个可靠的串口的接收功能。这也算是我自己的首次试水。当然,测试的结果看得出接收功能确实是很可靠了。不过今天继续看我的这个程序的时候,发现了一个问题:有几个FreeRTOS的任务被饿死了。看了一下,应该是两个原因导致:1,优先级设置的过高;2...2020-03-01 15:41:231684
1
-
原创 285_S32K144上基于FreeRTOS的精准周期性任务调度
完整的S32K144的学习汇总如下:https://github.com/GreyZhang/g_s32k144继续S32K144的学习,这次看一下FreeRTOS的周期性任务调度。其实,之前的测试一直在用一个1000ms的周期性调度,但是,这个调度仅仅是用了一个1000ms的延时来实现的。虽然有一定的准确度,但是依然不是很准确。为了测试,这里我修改了一下FreeRTOS的配置,直接把...2020-02-29 15:17:23819
0
-
原创 276_浮点运算导致FreeRTOS卡在xQueueGiveFromISR
完整的S32K144的学习汇总如下:https://github.com/GreyZhang/g_s32k144 继续S32K144的学习,这一次整理一个我在学习中遇到的BUG。我的软件中有一个基于串口的printf功能,最初这个功能都是OK了。但是,当我增加了一个浮点运算之后,打印了一下之后不再打印了。使用调试器,查看到软件停在了xQueueGiveFromISR函数中。...2020-02-25 22:52:23747
0
-
原创 268_S32K144_FreeRTOS的队列
完整的S32K144的学习汇总如下:https://github.com/GreyZhang/g_s32k144 继续学习S32K144,结合这个芯片学习一下FreeRTOS的实际应用。这一次,我想先学习一下队列的应用。 按照文档的解读,这个队列其实确实是有着一个先后关系的意思。但是,这个队列的作用更多的是一个消息传递。今天,我需要做的工作如下:使能FreeRTOS中的...2020-02-22 20:38:09454
0
-
原创 254_使用S32DS创建S32K144的FreeRTOS工程
完整的S32K144的学习汇总如下:https://github.com/GreyZhang/g_s32k144 继续学习S32K144,这一次虽然还是在围绕着S32DS的工具来做学习小结,但是这次与以往有着很大的不同了。这一次,学习总结的重点在与SDK中FreeRTOS的使用。与以往的学习不是很一样,这一次的学习跳过了驱动直接来了RTOS。其实,我觉得这也是现在很多ARM平台共通的...2020-02-16 20:06:361934
5
-
原创 185_FreeRTOS使用任务通知做ISR的处理推迟
整个理解思路应该跟信号差不多,仿真环境下能够看的大概也只有初步的效果。接下来,分析一下官方的例程代码。 两个任务创建,一个高优先级的任务用来推迟中断处理,另一个低优先级的用于周期性的调度实现。此外,还有一个模拟中断。 周期性任务,用来生成模拟中断,周期500ms。 中断ISR中,通知中断推迟处理的任务执行,并...2019-12-06 22:33:1480
0
-
原创 184_FreeRTOS使用事件组实现同步
这个同步可以理解为多个状态同时满足,接下来分析下官方的例子。 上面的机制可以理解为,等待三个事件全都达到一起触发一个动作,也就是退出。相当于,三个任务各自等在自己的跑道上,等到了最后50m之后再一起来一个第二次冲刺。 运行效果: 我觉得可以做另一个测试,可以更好看出这个效果,那就是改掉平等的优先级。修改如下:...2019-12-06 22:31:35154
0
-
原创 183_FreeRTOS事件组的使用
先做一个个人理解上的功能小结:队列以及信号的功能:1. 把task置于阻塞状态;2. 信号发生的时候,结束阻塞;时间组的特殊点:1. 可以让一个任务等待一个或者多个时间;2. 还可以一个信号组解除多个任务的阻塞。 接下来,分析下官方的例程。 创建一个事件组,这个里面的有效标志为是24个。创...2019-12-06 22:30:59180
0
-
原创 182_FreeRTOS互斥量的使用
官方的模拟环境使用不是很好去说明,毕竟这个资源的纠缠在于Windows,我这里仅仅做一下代码的理解以及测试。 互斥信号创建、任务创建并传入不同参数。 打印增加互斥信号进行资源保护。里面有一个停止调度的判断操作,依据是按键。 任务定义。 运行效果: 需要说明的是,这个...2019-12-06 22:30:05334
0
-
原创 181_FreeRTOS使用守护进程延迟处理中断
这个或许不会是我的选择,但是使用守护进程延迟处理中断也有优势。比如,占用资源少,可以不用创建额外的Task。再比如,模型简单,处理容易。 先分析官方的例程: 创建了一个周期性的Task,优先级低于Timer的服务。创建了一个模拟的中断。 周期性任务功能,模拟每500ms产生一次中断。 IS...2019-12-06 22:29:18328
0
-
原创 180_FreeRTOS多值信号的使用
单值信号的模型可以是只有一个元素的队列,多值信号的模型应该可以考虑为是具有多个元素的队列。从官方给的例子中可以看得到这里有一个优先级的问题,似乎触发的任务的优先级都会高一些,后面我会自己做一个对比测试。 先分析官方的代码: 主要工作:创建一个最大数值10的计数信号,也就是多值信号,初始值0。 创建2个任务,第一个优先级是3,用于信...2019-12-06 22:28:2561
0
-
原创 179_FreeRTOS Timer频率修改
这是一个非常简单的接口,借用官方的Timer的例程做一个修改即可进行测试。我个人的修改如下: 定时器句柄句柄等改成全局,这样可以方便调用。 这部分不变,一次性执行的定时器触发定时3333 tick。周期性的触发为500 Tick。 一次性触发的回调执行的时候,会把周期性触发的定时器的频率加快。...2019-12-02 21:30:07235
0
-
原创 178_FreeRTOS使用定时器以及定时器回调
主要是用于定时触发或者是周期性执行的触发功能,从很多特种描述看,感觉是用软件模拟了一个中断ISR。 从官方的示范代码来做一下分析: 上面代码中,一个用户Task也没有创建。创建了两个定时器,绑定了两个回调函数。其中一个3333毫秒后触发一次,另一个每500ms触发一次。 两个回调函数,打印出当前的Tick数值。...2019-12-02 21:20:59638
0
-
原创 177_FreeRTOS使用队列组
翻译成队列组不知道是否合适,直观的翻译应该是队列集合。主要的作用就是能够让一个Task接收的消息可以来自于不同类型以及大小的队列,当然也可以是相同类型以及大小。这个我没有考虑到我自己的应用中什么时候会用到,简单分析一下官方的示范代码。 首先是创建两个队列,一个队列组,队列的大小都是1。把两个队列添加到这个队列组中。接下来,创建了3个Task,从代码直白表达...2019-12-01 20:41:31137
0
-
原创 176_FreeRTOS多来源的队列使用
这个功能其实我个人倒是觉得跟基础的队列使用的例子差不多,唯一的区别仅仅是数据结构发生了变化,内容发生了变化。唯一值得我关注的或者说是我想深究的其实还不在这里,而是在于任务优先级的变化。因为我觉得OS里面最让人感觉到需要弄明白的其实是调度器,其实是内在的调度机制。 先看一下例程代码: 创建了3个task,而3个task中接收的task优先...2019-12-01 18:15:3188
0
-
原创 175_FreeRTOS队列的使用
关于队列大致的基础知识我自己简单了解了一下,针对我自己脑子里还有的我认为我可能很快用到的知识点做一个如下的总结。V9.0.0之后,队列可以做成静态的,编译前就确定下来。 一般来说,队列是从heap中进行存储分配的,存储分配释放的过程则是OS来处理; 队列可以容纳一定数目的特定对象,最大的数目被成为队列长度; 队列的主要目的是提供任务与任务、任务与中断之间的信号通信方式。...2019-12-01 18:14:2876
0
-
原创 174_FreeRTOS任务删除
不知道是不是我工作比较特殊的原因,在我的工作经历中几乎没有什么删除Task的需求。不过,既然这是一个标准性的OS支持功能,还是来掌握一下。 先分析官方例子代码: 任务开始只创建了一个Task1,优先级是1。之后,OS的调度器启动。 在Task1中,打印一个字符串同时创建Task2,优先级是2,之后延迟100ms。...2019-11-30 10:05:01147
0
-
原创 173_FreeRTOS修改任务优先级
先看一下官方的例子设计。 创建了两个优先级的任务,vTask1和vTask2,其中vTask1的优先级要高一点。 两个任务都是阻塞性任务,其中,Task1的优先级初始化是2,Task2的优先级是1。如果没有优先级修改,Task应该会饿死。现在,Task1中尝试把Task2的优先级提升到比自己高,变成3。之后,Task2会执行,如...2019-11-29 19:54:27443
0
-
原创 172_FreeRTOS idle task hook的使用
使用这个接口,首先得配置一个预处理的常量信息。官方的软件中,仅仅是在里面加了一个计数器。而计数器的信息通过一个任务打印出来。 先看一下官方的代码: 运行效果如下: 我捕捉的速度稍微慢了一点,其实还有一个计数器为0的过程。我觉得官方代码创建了两个任务的目的是为了能够看出任务切换的效果。 之前的总...2019-11-29 19:53:32425
0
-
原创 171_FreeRTOS阻塞型任务与非阻塞型任务同时使用
标题没有考虑好,只是一个翻译的问题,暂时先这么定。接触这个例子之前,我认为在FreeRTOS如果软件设计中出现非阻塞任务或许是一个设计的失败。如果有的非阻塞的任务的话,那么直应该是idle。从这个例程看,或许我理解的还是不正确。 原始的软件,打印的速度太快不利于观察,我把代码进行了一下修改以便我能够更好的做一下效果的监控。 值得一说...2019-11-29 19:52:35510
0
-
原创 170_精准的周期性任务调度
这是官方的第5个例程,这个例程以及相应的讲解还是给了我一些提示让我学到了一些东西的。 在详细进行这个学习教程的学习之前,我自己凭感觉用了一阵子FreeRTOS,我想实现一个周期性的任务调度,于是使用了vTaskDelay的接口做了一个实现。结果测试下来,印象中大约是每47次就会出现一次偏差。一直没弄明白什么原因,后来直接放弃采用了中断。或许,这个可以解决我当时...2019-11-28 21:52:07235
0
-
原创 169_利用阻塞状态创建延时
这个总结基于官方文档附加的第4个例子,阻塞状态通过调用系统接口vTaskDelay实现。这个接口会把任务切换到阻塞状态维持一定的系统tick周期。 代码如下: 98行的pdMS_TO_TICKS是一个宏,可以把以ms为单位的时间转换成系统tick数目。116行的调用,其实是把任务切换到了阻塞状态。 运行效果:...2019-11-28 21:27:2767
0
-
原创 168_优先级以及任务饿死
分析学习一下官方例程中的任务优先级体验例子,同时简单猜想下为什么会出现任务饿死。 首先看例子关键代码: 里面任务优先级有两个,Task 2的优先级是高的。运行效果: 从上面运行结果看,Task 1被饿死了。为什么饿死呢?这个可能与Task的代码实现有关了,Task的代码实现: 应该是里面的...2019-11-28 20:31:52181
0
-
原创 167_FreeRTOS任务参数的使用
首先第一步来分析一下官方的例程: 上面截图部分不是全部代码,但是应该基本上可以看明白问题了。这里面的Task函数其实只有一个,但是被创建了两次,不同的是两次创建使用了不同的参数。 执行效果: 从效果看,两个参数都被打印出来了。可以看得出,其实调度中是有两个Task存在的。从这个行为上分析,可以把这个任务创建理解为...2019-11-27 22:25:26376
0
-
原创 166_FreeRTOS任务创建例程学习
这部分内容是官方文档中的例程1的学习、调试以及简单的修改尝试。从内容看,主要的目的是简单展示一下如何创建一个Task。 首先,看一下其中一个Task的原型设计。 三个要素:1,范围void;2,接收的参数是void *;3,函数中一个死循环。 接下来,再看一下创建的方式: 创建Task的方式也...2019-11-26 22:58:53106
0
-
原创 161_使用RTOS开发项目的优点
大致浏览了一下相应章节的描述,其实在一定程度上来说这个有点自己给自己打广告的意思了。一条条梳理一下看看:优点1:简化了即时相关信息。 内核负荷执行时间测量以及时间相关的接口给应用软件,这样应用软件在一定程度上更简单,代码也更少。 个人理解:一定程度上是这样,代码的简单其实也不见得会。在加上OS本身占用了一部分资源,如果仅仅考虑这个层...2019-11-13 20:25:02509
0
-
原创 160_关于线程与任务
线程,thread,可能并不是一个具有固定定义的概念。抛开其他的OS不说,单纯从FreeRTOS的信息中看看thread究竟具有什么属性。 这里面有一部分关于thread的描述,其中描述到了单核MCU。在单核MCU上,某一时刻只能够有一个thread在执行。究竟是哪一个线程在执行,这取决于内核的管理。内核通过检查线程的优先级来决定究竟哪个线程该执行。而高优...2019-11-13 20:23:4468
0
-
原创 114_尝试OS任务调度优先级最高任务搜索测试
这只是一个测试代码,实际中不可用。实际的设计中,信息更多,结构也更复杂,同时也会用到链表等更高级的数据结构。 这里只是做一个测试。 测试代码:#include "stdio.h"#define TASK_NUM 10typedef unsigned short uint16_t;typedef unsigned char u...2019-05-19 21:24:1897
0
-
原创 115_ucos iii获取最高优先级的实现理解
这个理解我是顺着正点原子的一个视频教程来的,看完了之后我自己翻了一下代码发现有一点细节地方视频中其实是讲错了的。 首先看一下这个代码: 上面是原始的代码。 首先,88行以及91行我觉得两个应该是可以合二为一的,不知道理解是否准确? 接下来,理解一下如何获取最高的优先级。需要注意的是,这个OS中最高...2019-05-24 21:23:41321
0
-
原创 117_MPC5634M上尝试移植ucos系统
大学的时候尝试过在8051单片机上做ucos的操作系统,最近尝试做了一下MPC5634M上的系统移植。 没有什么特别的目的,只是觉得RTOS算是嵌入式中相对来说有点技术含量的东西,而我自己的手中恰好又有这个一个开发板。如今NXP的官网上提供支持PowerPC的gcc编译器,没有使用限制,看起来一切都就绪只带开工了。 总结了一下整个移植的过程...2019-05-29 21:35:00242
0
-
原创 118_ucos ii的任务创建探索
移植成功了ucos,只有一个运行的Task运行了一个LED闪烁,感觉还可以。尝试了一下任务创建,试了一下还比较简单。 首先尝试了扩展任务的创建,一个例子如下: 这个是移植时候使用的一个例子,运行OK。任务优先级是3。 接下来尝试创建了另外两个扩展任务,控制另外两个LED的闪烁。测试了一下功能,运行正常。需要注意...2019-05-29 22:43:42121
0
-
原创 119_ucos ii中用户可用的优先级
代码测试中,发现有些task的优先级使用了之后调度会失败。看官方带的文档任务分配列表中应该只有最后一个task不可用,其他的没有特别的说明。今天直接根据实际移植的工程做一下测试。 OS的优先级最低级配置为254,看着说明不可以高于254。接下来,测试最后面几个优先级是否可以用。优先级254: 实际测试,任务无法启动。优先级253:...2019-06-02 20:50:33362
0
-
原创 144_STM32F407_FreeRTOS简单运行
整个STMF407系列的学习汇总链接如下:https://github.com/GreyZhang/g_stmf407 我选择的IDE中有一个开箱即用的FreeRTOS,用起来还是很简单的。只要选择相应的功能即可,之前有一点老版本的FreeRTOS的经验,上手也比较容易。 集成的版本是10.X的版本了,没有查看是否是封装的问题,直接看到...2019-09-26 21:18:11449
0
-
原创 145_STM32F407_FreeRTOS中串口打印出现OS卡死问题解决
整个STMF407系列的学习汇总链接如下:https://github.com/GreyZhang/g_stmf407 移植了一个OS,开始运行还可以,发现加了printf之后打印不了几次就出现调度卡死的现象。我没有直接找到解决的方法,至少在我的开发环境中没有找到。不过最近正好在用两个两个芯片也用了两个开发环境,在另一个开发环境中也遇到了类似的问题。另外的...2019-09-28 21:27:20547
0
-
原创 148_STM32CubeIDE自动创建FreeRTOS Task
整个STMF407系列的学习汇总链接如下:https://github.com/GreyZhang/g_stmf407 其实,手写代码自然是很多功能全都可以实现。但是摸索中发现STM32CubeIDE的开箱即用理念真的做的不错。诸如FreeRTOS,不仅不需要移植,而且在IDE中增加了Task的创建管理。用了一下,确实是比自己手写简单多了,简单的几个参数信...2019-10-04 14:15:061820
0