自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 屏蔽所有中断

当所有中断被屏蔽时,NVIC不再接收中断源的请求,相应的中断挂起寄存器位不会被置位。如果在屏蔽中断期间,中断源产生了短暂的中断信号,且该信号在中断屏蔽解除之前就消失了,那么这个中断就会丢失,因为系统没有记录该中断请求。然而,如果中断源在中断屏蔽期间持续产生中断请求,直到中断屏蔽被解除,那么这个中断请求不会丢失,解除屏蔽后,NVIC会按照中断优先级顺序来处理这些请求。在STM32中,屏蔽所有中断后,中断有可能会丢失。

2025-04-06 11:12:53 55

原创 中断屏蔽和关中断

• 屏蔽所有中断:一般用于系统初始化阶段,在系统还没有准备好处理中断时,屏蔽所有中断可以避免意外的中断干扰系统的初始化过程。例如,对每个中断通道对应的中断屏蔽寄存器位进行设置,将所有中断通道的屏蔽位置1,就可以屏蔽所有可屏蔽中断。• 关中断:主要影响的是处理器对可配置中断的响应,它将当前执行程序的优先级提升到0,变相提高了期望打断当前执行程序的中断事件的响应门槛,但不会影响中断源的中断请求产生以及中断挂起状态。• 屏蔽所有中断:不仅会阻止处理器对中断的响应,还会影响到中断源的中断请求。

2025-04-06 11:12:06 114

原创 调度关中断

STM32芯片具有完善的中断管理机制,当有中断请求发生时,即使处于关中断状态,只要中断源的使能位是开启的,对应的中断请求就会被记录在中断挂起寄存器中。当FreeRTOS调度完成并开中断后,CPU会根据中断挂起寄存器中的信息以及中断优先级等,依次响应和处理这些中断请求。在STM32平台上使用FreeRTOS进行调度时关中断,中断通常会记录在中断挂起寄存器。

2025-04-06 10:50:09 91

原创 中断屏蔽和关闭

此时,硬件不再将中断请求传递给CPU,也不会将其记录在中断挂起寄存器中。如果在中断关闭期间有中断事件发生,这些中断请求因为没有被记录和处理,就会丢失。当再次开启中断时,之前关闭期间发生的中断请求无法被恢复和处理。中断屏蔽是指通过软件或硬件的方式禁止某些中断源产生的中断请求被CPU响应。被屏蔽的中断请求会被硬件记录在中断挂起寄存器中,当解除屏蔽后,中断请求会按照中断优先级等规则被CPU处理。所以,中断屏蔽只是暂时阻止了中断的响应,并不会导致中断请求丢失。中断关闭后,通常情况下中断请求会丢失。

2025-04-06 10:42:54 158

原创 中断丢失情况

• 中断优先级设置不合理:如果多个中断的优先级设置不当,可能导致低优先级中断长时间得不到响应,在中断请求持续到来的情况下,新的中断请求可能会覆盖旧的请求,从而造成中断丢失。• 中断处理时间过长:如果中断服务程序执行时间过长,导致在这段时间内有新的中断请求到来,而中断控制器的挂起寄存器已满,那么新的中断请求就可能无法被挂起,进而丢失。• 中断嵌套深度问题:当进行多层中断嵌套时,如果嵌套层数过多,可能会耗尽系统资源,导致一些中断无法得到及时处理,出现中断丢失的情况。

2025-04-06 10:37:33 126

原创 stm32 中断挂起寄存器

• 系统异常:过多未处理的中断可能使系统陷入混乱,导致程序运行异常,甚至可能出现系统死机的情况。• 新中断请求丢失:超出部分的中断请求可能无法被正确记录在中断挂起寄存器中,导致这些中断请求丢失,相应的中断事件得不到及时处理。• 数据错误:在一些对实时性要求较高的系统中,中断丢失可能导致数据采集不完整、数据处理错误等问题,影响系统的正常功能和性能。为避免这些情况发生,需要合理设计中断系统,根据实际需求合理分配中断资源,确保中断处理程序能够及时处理中断请求,避免中断积压。

2025-04-06 10:30:16 300

原创 fsmc lcd 驱动

【代码】fsmc lcd 驱动。

2025-03-31 08:49:09 222

原创 ST7796S FSMC 驱动

【代码】ST7796S FSMC 驱动。

2024-07-30 19:36:54 428

原创 CRC16_CCITT

int i;for(i=0;i< 16;i++)i < 8;i++)else。

2024-07-25 18:27:12 224

原创 开发问题记录1

可知,static uint8_t msg_pool [256]数组指针未4字节对齐,发生错误。1、最近在开发的时候遇到一个问题,在执行下面一行代码时,会进入到硬件中断。2、将此行代码单独拿出来分析,可知代码等价于下面。3、由上可知,代码等价于如下。

2024-07-02 19:17:30 233

原创 rtthread 信号量

5、_rt_sem_take 函数,此函数将获取信号量,如果信号量获取不到,则等待指定时间。2、rt_sem_detach 函数,此函数将会分离一个静态的信号量实体。1、rt_sem_init 函数,此函数将会初始化一个静态的信号量实体。6、rt_sem_release 函数,此函数将会释放一个信号量。3、rt_sem_create 函数,创建一个信号量实体。4、rt_sem_delete 函数,删除一个信号量实体。(3)否则,如果等待时间为0,则返回超时错误。(2)如果信号量值大于0,则信号量值减一。

2024-06-28 10:32:11 291

原创 rtthread ipc

2、_ipc_list_suspend 函数,此函数将会挂起一个线程到ipc 对象列表中。4、_ipc_list_resume_all 函数,恢复所有挂起在ipc 对象列表的线程。(4)如果是优先级模式,将其按照优先级进行排序,插入到IPC实体的链表中。1、_ipc_object_init 函数,初始化IPC挂起线程链表。(3)如果是先入先出模式,将线程挂起到IPC实体的链表中。3、rt_thread_resume 函数,恢复一个线程。(1)如果线程不是挂起状态,将其设为挂起态。(2)恢复线程实体。

2024-06-28 09:35:32 177

原创 rtthread 线程

6、rt_thread_sleep 函数,此函数此函数将允许当前线程休眠一段时间。将当前线程状态更改为挂起,当线程计时器达到刻度值时,调度程序将唤醒此线程。4、rt_thread_startup 函数,函数将会启动一个线程并将其放入系统就绪队列。(1)如果线程状态不等于线程初始化状态,将其从调度中移除。5、rt_thread_detach 函数,移除线程。3、_thread_init 函数,线程初始化函数。(4)改变线程状态,将其设为关闭态。(3)将线程从挂起列表中移除。(3)将线程唤醒,开始调度。

2024-06-27 14:27:48 514

原创 rtthread 定时器

11、rt_timer_check函数,此函数将检查计时器列表,如果发生了超时事件,则调用相应的超时函数。2、_timer_list_next_timeout 函数,找到下一个定时器的超时tick。10、rt_timer_control 函数,此函数将会获取或设置定时器的一些选择。12、rt_system_timer_init 函数,系统定时器初始化。8、rt_timer_start 函数, 此函数将会启动定时器。1、_timer_init函数,定时器初始化函数。(3)设置定时器超时函数和其参数。

2024-06-27 11:16:28 608

原创 rtthread 线程调度器

4、rt_schedule_insert_thread函数,此函数将会插入一个线程到系统就绪链表,线程的状态将会被设置为就绪态,线程将会从挂起链表中移除。9、_scheduler_get_highest_priority_thread 函数,调度获取最高优先级线程。(4)如果当前线程是运行态,如果当前线程优先级小于最高就绪优先级,将to_thread 指向当前运行线程。3、rt_schedule 函数,此函数将会执行一次调度,它将会选择最高优先级线程,并立即切换。(3)就绪线程,插入就绪链表。

2024-06-27 09:21:43 1261

原创 strpos 函数

【代码】strpos 函数。

2024-06-26 16:33:41 201

原创 rtthread 对象管理器

对象管理器初始化。

2024-06-24 11:38:31 702

原创 rt_hw_context_switch 函数分析

(1)设置 rt_thread_switch_interrupt_flag 为1。(2)设置rt_interrupt_from_thread。(3)设置rt_interrupt_to_thread。(4)触发PendSV异常。

2024-06-20 10:08:48 272

原创 rtthread PendSV_Handler 函数分析

(6)条件判断,如果处理器支持浮点运算(FPU不是软件模拟的),则执行其中的指令块。(8)条件判断,如果处理器支持浮点运算(FPU不是软件模拟的),则执行其中的指令块。(14)条件判断,如果处理器支持浮点运算(FPU不是软件模拟的),则执行其中的指令块。(12)条件判断,如果处理器支持浮点运算(FPU不是软件模拟的),则执行其中的指令块。(11)条件判断,如果处理器支持浮点运算(FPU不是软件模拟的),则执行其中的指令块。(3)清除rt_thread_switch_interrupt_flag标志位。

2024-06-20 09:35:15 439

原创 rt_hw_context_switch_to 函数分析

(1)、将r0寄存器的值,传送到地址值为rt_interrupt_to_thread的内存中,也就是执行线程的堆栈指针。在这个情况下,通过指令序列清除了 CONTROL.FPCA 标志,可能用于关闭浮点运算的自动上下文保存。(4) 将1,传送到地址值为rt_thread_switch_interrupt_flag。(2)、条件判断,如果处理器支持浮点运算(FPU不是软件模拟的),则执行其中的指令块。(3)将0,传送到地址值为rt_interrupt_from_thread的内存中。(8)开异常,开中断。

2024-06-19 16:47:36 876

原创 rt_object_init 函数分析

此函数将初始化对象并将其添加到对象系统管理中。

2024-06-19 14:17:46 315

原创 rt_system_heap_init 函数分析

else#endifImage$$RW_IRAM1$$ZI$$Limit是一个链接器导出的符号,代表ZI段的结束,也就是程序执行区的RAM结束后的地址,反过来也就是我们执行区的RAM未使用的区域的起始地址。

2024-06-19 13:34:02 438

原创 STM32F407ZGT6 HAL_Init 函数分析

一、Flash 访问控制寄存器(FLASH_ARC)二、应用中断和复位控制寄存器(SCB->AIRCR)三、SysTick 定时器。1、系统配置控制器时钟使能。1、设置中断优先级分组。1、SysTick 配置。2、电源接口时钟使能。

2024-06-19 10:26:45 238

空空如也

空空如也

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

TA关注的人

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