自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ——消息队列

消息队列可以应用于发送不定长消息的场合,包括任务与任务间的消息交换,队列是 FreeRTOS 主要的任务间通讯方式,可以在任务与任务间、中断和任务间传送信息,发送到队列的消息是通过拷贝方式实现的,这意味着队列存储的数据是原数据,而不是原数据的引用。如果成功发布项目,则返回 pdTRUE,否则返回 errQUEUE_FULL。如果从队列成功接收到项目,返回 pdTRUE,否则返回 pdFALSE。如果队列创建成功,则返回所创建队列的句柄。如果创建队列所需的内存。并返回 可引用此队列的句柄。

2023-10-06 18:43:41 55 1

原创 事件标志组

如果 xClearOnExit 设置为 pdFALSE, 那么当调用 xEventGroupWaitBits() 返回时,事件组中设置的位不会改变 , pdFLASh会导致事件标志组一直触发,任务一直执行,设置为pdTRUE。位已在事件组中设置好, 或指定的阻塞时间已过期,则 xEventGroupWaitBits() 会返回相应值。返回事件中的哪些事件标志位被置位,返回值很可能并不是用户指定的事件位,需要 对返回值进行判断再处理。是事件类型的通信,无数据传输。如果创建了事件组, 则返回事件组的句柄。

2023-10-06 16:08:22 61 1

原创 计数_二值_互斥信号量

对于二值信号量,当一个较低优先级的任务接收信号量后,在未释放信号量时,一个最高优先级准备就绪,执行最高优先级任务,最低优先级由运行态变为就绪态,与最低优先级公用一个信号量,最低优先级任务没有释放信号量,最高优先级任务进入阻塞态,等待信号量接收,最低优先级变为运行态开始运行,但是在就绪表中较高优先级已经准备就绪,又要运行较高优先级任务,最高优先级不能迅速进行,与操作系统实现不相同。放的信号量对象必须是已经被创建的,可以用于二值信号量、计数信号量、互斥量的释放,但不能释。占有的资源的最高优先级任务的优先级。

2023-10-05 12:33:03 76

原创 临界区。。

configMAX_SYSCALL_INTERRUPT_PRIORITY,因为使用在中断使用taskENTER_CRITICAL_FROM_ISR()和 taskEXIT_CRITICAL_FROM_ISR()函数,进入临界区,中断函数的抢占优先级低于或等于configMAX_SYSCALL_INTERRUPT_PRIORITY常数(优先级低于,数值大于或等于configMAX_SYSCALL_INTERRUPT_PRIORITY常数),为了保护临界区,中断不能正常进行。临界区给那些重要的代码。

2023-10-04 22:10:25 65 1

原创 上下文切换

任务切换流程(系统定时器触发):系统定时器中断触发(调用systick_handler函数)任务调度,调用xTaskIncrementTick()函数,将阻塞任务切换到就绪表中,对pandSV对应的比特位进行写操作,触发pandSV软件中断,在pendSV中保存寄存器数据,调用vTaskSwitchContext()函数,在vTaskSwitchContext()函数中,找到就绪表中优先级最高的任务,完成任务切换。systick以最低的中断优先级运行,当该中断执行时,必须屏蔽所有中断。

2023-10-04 15:49:18 101 1

原创 任务调度器

每个任务都有相同的优先级,任务会运行固定的时间片个数或者遇到阻塞式的 API 函数,比如vTaskDelay,才会执行同优先级任务之间的任务切换。又比如,如果中断服务程序使一个高优先级的任务进入就绪态,中断完成时,被中断的低优先级任务被挂起,优先级高的那个任务开始运行。高优先级的任务抢占,当前任务的 CPU 使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了 CPU 的。使用抢占式调度器,使得最高优先级的任务什么时候可以得到 CPU 的控制权并运行是可知的,同时使得任务级响应。

2023-10-04 14:13:42 59 1

原创 freertos任务删除_挂起_恢复

被删除的任务将从所有的就绪、阻塞、挂起和事件的列表中移除。一般在进入主函数后创建新的任务,包括硬件的初始化,其他任务的创建等等一些操作,在最后将任务删除掉。对 vTaskSuspend 的调用不会累积次数,例如:若在同一任务上调用 vTaskSuspend () 两次,将仍然仅需调用一次 vTaskResume (),即可准备完毕暂停的任务。由一次或多次调用 vTaskSuspend () 而挂起的任务可通过单次调用 vTaskResume () 重新运行。传递空句柄将导致调用任务被暂停。

2023-10-04 10:21:45 123 1

原创 freerots的任务创建

可以看出任务函数通常是一个无限循环,当然了,也可以是一个只执行一次的任务。任务的参数是一个void类型的,这么做的目的是可以可以传递不同类型的数据甚至是函数。以后我们要想操作这个任务都需要通过这个任务句柄,如果是自身的任务操作自己,那么。任务句柄是一个指针,用于指向一个任务,当任务创建好之后,它就具有了一个任务句柄。任务入口函数,即任务函数的名称,需要我们自己定义并且实现。宏指定,多余部分会被自动截掉,这里任务名字最好要与任务。pvTaskCode /*任务入口函数*/任务堆栈大小,单位为字,在。

2023-10-03 15:52:13 84 1

原创 SPI模式判断及时序图判断

模式0:在第一个边沿就进行数据移入,先要有数据的移出,才能有数据的移入吧,在ss片选信号拉低后,主机和从机立刻移出数据,保证在第一个边沿将主机的高位移入到从机的低位,将从机的高位移入到主机的低位。模式1:在第一个时钟上升沿,主机和从机的移位寄存器移出最高比特位,在第二个时钟下降沿,将主机的最高比特位 移入从机最低比特位,将从机的最高比特位移入主机的最低比特位。移入数据(数据采样)spi在莫一个时钟边沿传出数据,在另一个边沿传入数据。模式0:在初始化端口时,将片选拉高,时钟先拉低。

2023-10-01 09:18:53 190

原创 DMA转运数据+AD多通道

DMA配置:外设地址配置为ADC1的DR寄存器,读取十六位数据(半字读取),地址不自增,定义一个数组为存储器,存储器地址为数组地址,读取数据相同,地址自增,外设为源地址,使用硬件(ADC)触发,选择一次传输模式。在(AD:单次,扫描模式 , DMA一次传输)情况下,循环转运,①对传输计数器赋值(与上面相同)②开启ADC软件触发 ③等待DMA转运完成。在(AD:非单次,扫描模式 , DMA循环传输)情况下,只需要软件触发ADC一次,DMA就鞥循环转运。

2023-09-27 09:23:09 125 1

原创 ADC单通道和多通道

7)传输ADC转化的值 ,①开启软件触发 ②调用ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime),选择ADC_Channel为规则组转化列表的第一位③等待转化完成(读取EOC标准)③调用ADC_GetConversionValue(ADC_TypeDef* ADCx)函数,获取转化结果(不需要清除标志位,在读取ADC数据寄存器时,自动清除标志位)

2023-09-26 10:51:25 480

空空如也

空空如也

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

TA关注的人

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