- 博客(16)
- 收藏
- 关注
原创 开发问题记录1
可知,static uint8_t msg_pool [256]数组指针未4字节对齐,发生错误。1、最近在开发的时候遇到一个问题,在执行下面一行代码时,会进入到硬件中断。2、将此行代码单独拿出来分析,可知代码等价于下面。3、由上可知,代码等价于如下。
2024-07-02 19:17:30 218
原创 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 246
原创 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 159
原创 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 363
原创 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 414
原创 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 1169
原创 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 222
原创 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 335
原创 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 713
原创 rt_system_heap_init 函数分析
else#endifImage$$RW_IRAM1$$ZI$$Limit是一个链接器导出的符号,代表ZI段的结束,也就是程序执行区的RAM结束后的地址,反过来也就是我们执行区的RAM未使用的区域的起始地址。
2024-06-19 13:34:02 341
原创 STM32F407ZGT6 HAL_Init 函数分析
一、Flash 访问控制寄存器(FLASH_ARC)二、应用中断和复位控制寄存器(SCB->AIRCR)三、SysTick 定时器。1、系统配置控制器时钟使能。1、设置中断优先级分组。1、SysTick 配置。2、电源接口时钟使能。
2024-06-19 10:26:45 211
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人