不会飞的渡渡鸟 发表于 2024-5-31 09:15

GD32F407使用freeRTOS死机

在GD32F407跑了freeRTOS,串口接收使用了DMA+IDLE中断来实现不定长接收,串口的IDLE中断中接收完数据后,通过事件通知线程执行解析,但是中断中调用xEventGroupSetBitsFromISR函数后就会死机

键盘手没手 发表于 2024-5-31 23:25

本帖最后由 键盘手没手 于 2024-6-1 09:00 编辑

xEventGroupSetBitsFromISR函数应该是可以在中断服务例程中使用的,但要确保你没有在中断服务例程中调用任何可能导致冲突的其他函数。

键盘手没手 发表于 2024-5-31 23:25

本帖最后由 键盘手没手 于 2024-6-1 09:00 编辑

如果你的中断服务例程可能会与其他任务发生竞争,确保优先级正确设置可以避免优先级反转等问题。

modesty3jonah 发表于 2024-6-5 22:18

freeRTOS是一个多任务操作系统,如果多个任务同时访问共享资源(如内存、外设等),而没有适当的同步机制(如互斥锁、信号量等),可能导致资源竞争和死锁。

chenjun89 发表于 2024-6-5 22:32

死机是因为你还没有把系统原理了解清楚。

weifeng90 发表于 2024-6-6 08:10

大概率还是你的应用有问题,逻辑没有处理好。

rosemoore 发表于 2024-6-6 08:13

避免在中断服务例程中直接访问可能被任务修改的共享资源。

lzmm 发表于 2024-6-7 08:45

FreeRTOS中每个任务都需要分配一定的堆栈空间,如果堆栈大小设置不足,任务执行过程中可能会发生堆栈溢出,导致系统死机。

primojones 发表于 2024-6-7 11:55

堆(Heap)管理是否正确配置,是否有足够的内存用于动态内存分配。

mattlincoln 发表于 2024-6-7 15:17

在FreeRTOS中,异常处理是非常重要的。

uytyu 发表于 2024-6-7 18:23

FreeRTOS中使用的内存管理策略可能存在缺陷,或者系统中可用的堆内存不足,导致动态内存分配失败,进而引发死机。

robincotton 发表于 2024-6-7 21:53

死锁是指两个或多个任务在等待对方释放资源,从而导致系统无法继续执行。

jonas222 发表于 2024-6-8 10:28

检查你的内存分配情况,确保为FreeRTOS分配了足够的内存。

kkzz 发表于 2024-6-8 13:53

避免中断服务例程与任务之间的优先级反转问题。

olivem55arlowe 发表于 2024-6-8 17:03

增大任务栈大小或优化代码            

bestwell 发表于 2024-6-9 09:12

检查代码中是否有无限循环、未处理的全局变量、内存越界等常见错误。

iyoum 发表于 2024-6-9 12:24

检查MCU的供电是否稳定,电压是否正确。

earlmax 发表于 2024-6-9 15:31

栈溢出是导致系统死机的常见原因            

vivilyly 发表于 2024-6-9 18:44

不正确的中断优先级可能导致任务调度出现问题。

wwppd 发表于 2024-6-10 15:11

不兼容的版本可能导致不可预见的问题。
页: [1] 2 3
查看完整版本: GD32F407使用freeRTOS死机