草庐IT

Phytium-FreeRTOS

全部标签

01 FreeRTOS任务实例

FreeRTOS任务实例一、简要说明1.官方例程下载二、学习任务的创建1.创建一个任务2.任务中传递参数3.不同优先级的任务三、任务的延时1.使用阻塞式延时2.精确的任务定时3.低优先级任务无延时,高优先级延时一、简要说明  从这里开始正式进入实操环节,由于移植部分已经完成,为了加快学习部分,在以后的学习中都使用官方提供的VS2010项目作为学习的主要工具。1.官方例程下载点击下载下载完成就是一个压缩包,解压即可解压完成打开后应该是下面这样,打开.sln文件(前提是下载有MicrosoftVisualStudio工具)。打开以后应该是下面这样任意打开一个官方示例双击main.c打开main文件

FreeRTOS在Cortex-M系列内核中遇到的关于系统滴答中断的问题

众所周知,在Cortex-M内核中,系统节拍由Systick时钟提供,当配置好系统滴答时钟后,每次时钟中断就会触发中断处理函数 xPortSysTickHandler(),voidxPortSysTickHandler(void){/*TheSysTickrunsatthelowestinterruptpriority,sowhenthisinterrupt*executesallinterruptsmustbeunmasked.Thereisthereforenoneedto*saveandthenrestoretheinterruptmaskvalueasitsvalueisalready

freeRTOS中使用看门狗的一点思考

关于看门狗想必各位嵌入式软件开发的朋友应该都不会陌生的。在嵌入式软件开发中,看门狗常被用于监测cpu的程序是否正常在运行,如果cpu程序运行异常会由看门狗在达到设定的阈值时触发复位,从而让整个cpu复位重新开始运行。看门狗的本质是一个计数器,一开始的时候配置其为一个特定的值,然后这个计数器就会一直运行倒数自减,自减到0就会引发系统复位。所以为了避免被复位,就需要隔一定的时间复位看门狗的计数值,也就是我们常说的“喂狗”。这个“喂狗”的动作应当发生在看门狗引发复位的阈值的间隔中,否者超过或者达到这个阈值,会导致系统被复位,这是我们所不希望看到的。关于看门狗在程序中使用,可以分两种情况去讨论:1)裸

基于stm32c8t6移植FreeRTOS问题汇总

 1.在移植该操作系统最重要的一个文件便是FreeRTOSConfig.h,像ZET6这种大容量的板子所采用得堆栈大小一般来说会是20*1024,而在c8t6这块最小系统板的flash128k,堆栈大小就没有其例程程中给的那么大,所以我们要把这个堆栈大小改为10*1024。若不该则会出现编译无误,无法运行的情况。 2.在运行外部中断恢复任务的时候,一定不要在中断服务函数中调用延时函数,否则会引起系统调度问题导致无法运行,若不删除或注释掉延时函数系统将会报报 Error:..\FreeRTOS\port\RVDS\ARM_CM3\port.c,378和Error:..\FreeRTOS\src\

解决FreeRTOS程序跑不起来,打印调试却提示“Error:..\FreeRTOS\port\RVDS\ARM_CM3\port.c,244“的方法

前言今天来分享一个不会造成程序编译报错,但会使程序一直跑不起来,并且通过调试会发现有输出错误提示的错误例子分析,话不多说,我们就直接开始分析~首先,我们说过这个例子在编译时候没有明示的错误提示,也可以说没有语法和逻辑之类的错误,应该是程序哪里写的有不规范的地方造成的。我们先来分析一下当时的情况~错误发现当时发现程序跑不起来,依然是从LED呼吸灯看出来的,然后通过debug来一步一步锁定错误,并且配合串口调试信息输出来查看断言。发现程序一开始是进行下去的了,然后发现执行到一个函数的时候,程序就跑飞了。发现此时调试窗口输出提示:“Error:…\FreeRTOS\port\RVDS\ARM_CM3

【FreeRTOS】详细讲解FreeRTOS中消息队列并通过示例讲述其用法

讲解FreeRTOS中消息队列及其用法使用消息队列的原因消息队列函数解析示例遇到的问题使用消息队列的原因  在裸机系统中,两个程序间需要共享某个资源通常使用全局变量来实现;但在含操作系统(下文就拿FreeRTOS举例)的开发中,则使用消息队列完成。那么这两者有啥区别呢?🤔🤔🤔  其实在FreeRTOS系统中也能够像裸机似的,使用全局变量实现多程序共享某个资源(这里资源就可称为临界资源),则多个程序都能随时访问同一个临界资源,这时若两个程序同时访问同一个临界资源来完成两次资源读写操作,假如两个程序读取操作是同时完成,但是写入操作有先后之别,那么最后实际完成的操作就会是一个。例如下图:  看完上图

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍

我在查找FreeRTOS移植的相关教程特别少,所以想非常详细的介绍FreeRTOS移植stm32详细步骤,包括源码的下载,源码介绍,系统移植,代码验证等,每一步都有对应的介绍和解释,希望可以帮助到你们。文章目录1.FreeRTOS源码的下载2.FreeRTOS源码介绍3.FreeRTOS系统移植4.系统代码验证1.FreeRTOS源码的下载官网下载,仓库下载,镜像下载,百度网盘下载,私信我1.1可以直到FreeRTOS官网去下载,【FreeRTOS官网传送门】,但是下载速度很慢,不翻墙的话不建议使用这个方法下载。1.1.1官网页面如下,点击右上角或下方的下载入口1.1.2进入下载页面有两个下载

STM32+FreeRTOS 使用SystemView监控系统

前言本文以STM32F407ZET6+FreeRTOSV9.0作为演示,其它的CortexM芯片同样可以参考此文,其他内核和RTOS理论上也支持,本文暂时不做研究。所以开始阅读本文前,需要一块能运行FreeRTOS的CortexM芯片,如果没有移植好操作系统,可以参考我的另一篇文章《STM32F103移植FreeRTOS完整过程》本文打包提供FreeRTOSV9.0源码,SystemView安装包,STM32F407ZET6示例工程,在文章顶部标题下方。SystemView简介SystemView是嵌入式系统的实时记录和可视化工具。它揭示了应用程序的真实运行时行为,比调试器提供的系统洞察更深入

FreeRTOS主要API之taskYIELD()

这个API单独记录下,是因为其中有需要注意的地方FreeRTOS主要API介绍在FreeRTOS官网https://www.freertos.org/a00106.html见下图 taskYIELD()官网介绍如下taskYIELD()用于请求上下文切换到另一个任务。但是,如果没有其他任务的优先级高于或等于调用taskYIELD()的任务,则RTOS调度程序只需选择调用taskYILELD()任务即可再次运行。如果configUSE_PREEMPTION设置为1,则RTOS调度程序将始终运行能够运行的最高优先级任务,因此调用taskYIELD()不会导致切换到更高优先级的任务。注意:这样就是说

STM32移植FreeRTOS系列十三:RTOS中的任务切换流程(总结)

目录1、任务切换的概念和流程2、任务切换与PendSV异常之间的关系2.1、什么是PendSV2.2使用PendSV进行上下文切换的原因那为什么要通过异常来进行上下文切换,而不在其他地方呢?为什么不在其他地方进行上下文切换又为什么要使用PendSV来进行上下文切换而不适用其他异常呢?为什么在异常抢占中断时,OS不能执行上下文切换呢?2.3、PendSV异常是如何触发的2.4、PendSV是如何控制上下文切换的3、任务调度时Cortex-M3/4的工作模式CM3内核为什么要有线程模式、handler模式CM3内核为什么要特权分级Cortex-M3内核工作模式、特权分级4、双堆栈指针MSP和PSP