自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 keil5下载程序时出现“internal command error”解决方法

在下载STM32程序的时候发现有没法下载,出现“Internal command error”,原来是上一个程序中使用了低功耗模式,要解决也很简单,就是一直按住复位键,再去load程序,就可以烧录进去了。

2024-01-10 10:16:09 2184

原创 FreeRTOS学习笔记(十三) Tickless低功耗模式(如何使用)

而Tickless实际上就是通过调用睡眠模式的WFI/WFE来实现降低功耗的作用,我们知道,在OS的运行过程中,当所有其他的任务都挂起或阻塞的时候,就会运行空闲任务,即IDLE Task,而Tickless实现的机理就是在空闲任务的时候进入睡眠模式,当其他任务准备运行的时候,唤醒MCU,从而实现降低功耗的目的。其实就是用来给这两个宏定义两个函数,然后我们再去编写这两个函数,来实现进入低功耗模式所要进行的操作,和退出Tickless模式之前索要进行的操作。二、Tickless模式相关配置项。

2024-01-09 21:41:04 682

原创 FreeRTOS学习笔记(十二) 软件定时器

然后在软件定时器的使用过程中,比如当应用程序中的vTimerStart()执行的时候会往软件定时器的命令队列里面写消息,然后再从软件定时器服务任务中调用xQueueReceive()来接收队列里面的消息,从而去执行软件定时(软件定时器刚创建的时候是处于休眠态的,但当我们在任务中调用vTimerStart()的时候,就会将休眠态的软件定时器转化为运行态,此时当指定时间到达之后,就会调用它的超时回调函数。总结起来就是有创建,开启,停止,复位,更改五类函数,分别包含中断和任务函数。四、软件定时器的相关配置。

2024-01-09 17:34:41 386

原创 FreeRTOS学习笔记(十) 事件标志组

用一个位,来表示事件是否发生的叫做事件标志位,而事件标志组就是一组事件标志位的集合,简单理解可以为一个整数。一个事件组就包含了一个EventBites_t数据类型的变量,而EventBites_t实际上就是一个16位或32位无符号的数据类型。注意:事件标志组的变量高8位是不能用作事件标志位的,而是充当事件控制位而存在的,所以实际上只有24位是事件标志位!可以理解成用源码设计的方式自定义一个SR寄存器(状态寄存器),里面存储各种事件的状态位。如果宏置位0,则为32位无符号,置位1,则为16位无符号。

2024-01-08 17:56:45 353

原创 FreeRtos学习笔记(九) 队列集

一个队列只能允许任务间传递的消息为同一种数据类型,如果需要传递多种数据类型的时候,这个时候就可以使用队列集,说白了就是队列的集合。创建队列集,队列,信号量,并添加到队列集中-》往队列写入消息,释放信号量-》读取队列集中的消息。返回值: 失败:NULL 成功:返回相应有有效消息的队列句柄。参数: 1:待添加的队列句柄 2:添加到的队列集。参数: 1:待添加的队列句柄 2:添加到的队列集。返回值:失败:NULL 成功:返回队列集句柄。参数: 1:获取的队列集 2:阻塞超时时间。

2024-01-08 12:00:58 380

原创 FreeRtos学习笔记(八) 信号量机制

比如一个任务要用到系统里的共享资源,那么就得先判断这个共享资源还有没有剩余,如果有剩余,那么就叫做“信号量有资源”,那么这个任务就可以直接使用该空余的共享资源,叫做“获取信号量成功”,如果没有空余的共享资源了,那么该任务可以选择不执行,叫做“获取信号量失败”,也可以选择进行等待,叫做“任务阻塞”,等其他任务释放了该共享资源(释放信号量),再执行原本已经阻塞的任务。每次事件发生后,在事件处理函数中释放计数型信号量(计数值+1),其他任务会获取计数型信号量(计数值-1),在初始化的时候常将计数值设置为0。

2024-01-08 11:16:15 1212

原创 FreeRtos学习笔记(七)队列的学习

队列说白了就是一种消息传递的机制,用于任务到任务,任务到中断,中断到任务数据交流的一种机制。0-port_MAX_DELAY:队列满了等待一定时间之后,若仍然无法入队则返回不再等待。2、数据传递方式:常采用实际值,即将数据拷贝到队列中进行传递,也可传递地址。3、多任务访问:队列不属于某个任务,任何任务和中断都可以发送和读取。特点:读写队列都进行了临界区保护,有效防止多任务同时发生冲突。0:队列满了任务不等待了,直接返回。使用队列的主要流程:创建队列-》写队列-》读队列。

2024-01-06 20:49:38 390

原创 FreeRtos学习笔记(六) 时间片调度

3、自己写的delay_ms(500)与vTaskDelay(500)的区别:vTaskDelay(500)会使当前运行的任务处于阻塞状态,会发生任务调度,而delay_ms(500)不会。同等优先级任务轮流享有相同的CPU时间(可设置),叫时间片,在RTOS中,一个时间片就等于SysTic的中断周期。

2023-12-29 19:09:37 449

原创 FreeRtos学习笔记(五) 任务调度

2、任务切换的关键是要理解,当一个任务优先级高的任务出现的时候,需要打断当前任务的执行,这个时候需要保存现场,把对应的寄存器的值保留下来,然后再去执行任务级更高的任务,最后再将保存下来的值返回现场。6、利用taskSELECT_HIGHEST_PRIORITY_TASK()前导置零指令找到最高优先级。7、利用listGET_OWNER_QE_NEXT_ENTRY(),获取最高优先级的任务句柄。前导置零指令__clz(uxReadyPriorities)的作用:获取最高优先级。1、本质:CPU寄存器的切换。

2023-12-28 21:19:56 330

原创 FreeRTOS学习笔记(四)列表和列表项

1、概括:列表和列表项是看懂FreeRTOS系统源码的关键,其实质就是双向的链表,列表就是整个链表,而列表项就是链表的每个节点2、列表项的插入和删除,其实质就是节点的插入和删除,使用列表项和列表的优点在于:列表项的地址是不连续的,且列表项的数目在后续可以自行增加和删除。3、相比于数组的地址连续和,数目从初始就确定来说,列表和列表项就更加适合OS,因为在OS中,。4、具体了解列表和列表项:列表中的列表项数量(不包含末尾列表项) 和pxIndex遍历列表项的指针 和xListEnd(末尾列表项)

2023-09-11 14:48:50 186

原创 FreeRTOS学习笔记(三)任务的创建和删除

1、在FreeRTOSconfig.h中配置configSUPPORT_DYNAMIC_ALLOCATION为1。2、创建开始任务:先定义相对应的任务名称,任务优先级,任务堆栈大小,任务句柄,然后创建任务。1128212831284128需要注意的点:1、在开始任务中要进入临界区保护,进入临界区保护的目的是为了保证任务1、2、3的完整初始化创建,函数为。2、开启任务调度的函数。3、删除任务的函数,参数为任务句柄,填NULL默认是当前任务。

2023-09-09 19:57:30 108

原创 FreeRTOS学习笔记(二)

第二行FreeRTOS-Plus 中的源码其实并不是 FreeRTOS 系统的源码,而是在 FreeRTOS系统上另外增加的一些功能代码,比如 CLI、FAT、Trace 等等。RVDS里面是不同架构的芯片选择不同的文件,比如我是STM32F103的所以我选择ARM-CM3文件夹里的文件即可。sys.h头文件修改很简单,在 sys.h 文件里面用宏 SYSTEM_SUPPORT_OS 来定义是否使用 OS,,这个文件在源码的demo文档里的有,或者自己往相关FreeRTOS的例程的include里找。

2023-09-07 21:30:23 55

原创 FreeRtos学习笔记(一)

抢占式调度就是任务优先级越高的任务优先于优先级低的任务,所以叫抢占,而时间片任务是针对优先级相同的任务而言,优先级相同的任务按照时间片的顺序一个接一个的执行,一个时间片的长短就是SysTick的中断周期。抢占式调度总结:1、高优先级任务先执行2、高优先级不停止,低优先级无法执行3、被抢占的任务进入就绪态时间片调度总结:1、同等优先级任务,轮流执行,时间片流转。2、一个时间片大小,取决于滴答定时器的中断周期。

2023-09-05 13:37:46 259 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除