Assert failed in file port.c

FreeRTOS队列出问题
提示 Assert failed in file port.c,line **
提示 Assert failed in file queue.c,line **

通过调试发现使用xQueueSendToBackFromISR()函数时,往队列里写的数据并不是我创建该队列的长度,所以报错。
对于句柄QueueHandle_t 变量在被xQueueCreate创建时,所有项目的长度都应该保持一致。
即创建队列时,每个uxItemSize应该和往该队列写的长度保持一致。

创建队列句柄问题可参考
:https://blog.csdn.net/qq_38531460/article/details/117807671

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解释代码void LedOn(GPIO_Module* GPIOx, uint16_t Pin) { GPIOx->PBSC = Pin; } /** * @brief Turns selected Led Off. * @param GPIOx x can be A to G to select the GPIO port. * @param Pin This parameter can be GPIO_PIN_0~GPIO_PIN_15. */ void LedOff(GPIO_Module* GPIOx, uint16_t Pin) { GPIOx->PBC = Pin; } /** * @brief Turns selected Led on or off. * @param GPIOx x can be A to G to select the GPIO port. * @param Pin This parameter can be one of the following values: * @arg GPIO_PIN_0~GPIO_PIN_15: set related pin on * @arg (GPIO_PIN_0<<16)~(GPIO_PIN_15<<16): clear related pin off */ void LedOnOff(GPIO_Module* GPIOx, uint32_t Pin) { GPIOx->PBSC = Pin; } /** * @brief Toggles the selected Led. * @param GPIOx x can be A to G to select the GPIO port. * @param Pin This parameter can be GPIO_PIN_0~GPIO_PIN_15. */ void LedBlink(GPIO_Module* GPIOx, uint16_t Pin) { GPIOx->POD ^= Pin; } /** * @brief Assert failed function by user. * @param file The name of the call that failed. * @param line The source line number of the call that failed. */ #ifdef USE_FULL_ASSERT void assert_failed(const uint8_t* expr, const uint8_t* file, uint32_t line) { while (1) { } } #endif // USE_FULL_ASSERT /** * @brief Main program. */ int main(void) { /*SystemInit() function has been called by startup file startup_n32g45x.s*/ /* Initialize Led1~Led5 as output pushpull mode*/ LedInit(PORT_GROUP1, LED1_PIN | LED2_PIN); LedInit(PORT_GROUP2, LED3_PIN | LED4_PIN | LED5_PIN); /*Turn on Led1*/ LedOn(PORT_GROUP1, LED1_PIN); while (1) { /*LED1_PORT and LED2_PORT are the same port group.Enable Led2 blink and not effect Led1 by Exclusive-OR * operation.*/ LedBlink(PORT_GROUP1, LED2_PIN); /*LED3_PORT, LED4_PORT and LED5_PORT are the same port group.*/ /*Turn Led4 and Led5 off and not effect other ports by PBC register,correspond to * PORT_GROUP2->POD&=~(LED4_PIN|LED5_PIN);*/ LedOff(PORT_GROUP2, LED4_PIN | LED5_PIN); /* Insert delay */ Delay(0x28FFFF); /*Turn Led4 and Led5 on,turn Led3 off and not effect other ports by PBSC register,correspond to * PORT_GROUP2->POD&=~(LED3_PIN),then PORT_GROUP2->POD|=(LED4_PIN|LED5_PIN);*/ LedOnOff(PORT_GROUP2, (LED3_PIN << 16) | LED4_PIN | LED5_PIN); /* Insert delay */ Delay(0x28FFFF); /*Turn on Led3*/ LedOn(PORT_GROUP2, LED3_PIN); /* Insert delay */ Delay(0x28FFFF); } }
07-14
这段代码是一个LED控制的示例程序。具体解释如下: 1. `void LedOn(GPIO_Module* GPIOx, uint16_t Pin)`:该函数用于将指定的LED打开,通过设置GPIO相应的引脚控制寄存器来实现。传入参数`GPIOx`表示GPIO模块,`Pin`表示要打开的LED引脚。 2. `void LedOff(GPIO_Module* GPIOx, uint16_t Pin)`:该函数用于将指定的LED关闭,通过清除GPIO相应的引脚控制寄存器来实现。传入参数`GPIOx`表示GPIO模块,`Pin`表示要关闭的LED引脚。 3. `void LedOnOff(GPIO_Module* GPIOx, uint32_t Pin)`:该函数用于将指定的LED打开或关闭,通过设置或清除GPIO相应的引脚控制寄存器来实现。传入参数`GPIOx`表示GPIO模块,`Pin`表示要打开或关闭的LED引脚。 4. `void LedBlink(GPIO_Module* GPIOx, uint16_t Pin)`:该函数用于让指定的LED闪烁,通过对GPIO相应引脚控制寄存器进行异或操作来实现。传入参数`GPIOx`表示GPIO模块,`Pin`表示要闪烁的LED引脚。 5. `#ifdef USE_FULL_ASSERT` 和 `#endif // USE_FULL_ASSERT`:这是一个用于断言失败处理的代码段,当宏`USE_FULL_ASSERT`被定义时,将会调用`assert_failed()`函数。 6. `void assert_failed(const uint8_t* expr, const uint8_t* file, uint32_t line)`:断言失败时调用的函数,当断言失败时,该函数会进入一个死循环。 7. `int main(void)`:主函数入口。 8. `LedInit(PORT_GROUP1, LED1_PIN | LED2_PIN);` 和 `LedInit(PORT_GROUP2, LED3_PIN | LED4_PIN | LED5_PIN);`:初始化LED引脚,将LED引脚配置为输出模式。 9. `LedOn(PORT_GROUP1, LED1_PIN);`:打开LED1。 10. `LedBlink(PORT_GROUP1, LED2_PIN);`:让LED2闪烁。 11. `LedOff(PORT_GROUP2, LED4_PIN | LED5_PIN);`:关闭LED4和LED5。 12. `Delay(0x28FFFF);`:延时一段时间。 13. `LedOnOff(PORT_GROUP2, (LED3_PIN << 16) | LED4_PIN | LED5_PIN);`:打开LED4和LED5,关闭LED3。 14. `Delay(0x28FFFF);`:延时一段时间。 15. `LedOn(PORT_GROUP2, LED3_PIN);`:打开LED3。 16. `Delay(0x28FFFF);`:延时一段时间。 代码的主要作用是控制多个LED的亮灭,并通过延时函数实现闪烁效果。具体的LED引脚和GPIO模块的配置需要根据具体的硬件平台来设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值