OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5093|回复: 1

[XILINX] FreeRTOS使用pvPortMalloc申请内存导致串口中断进不去[已解决]

[复制链接]

4

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2019-7-17
在线时间
57 小时
发表于 2020-2-20 16:33:57 | 显示全部楼层 |阅读模式
本帖最后由 anqh 于 2020-2-24 13:13 编辑

开发板: ZYNQ 7020
uart中断例程,创建FreeRTOS工程

使用pvPortMalloc时,串口中断进不去,但系统没挂,while(1)里还是可以输出log。
不使用pvPortMalloc或者使用malloc申请内存,串口中断正常。

2020年2月24日更新:
还出现一个同样的问题,就是创建任务后uart中断也进不去。
所以想这两个问题是不是同一个原因,当然xTaskCreate函数里也有pvPortMalloc...

于是Google/百度一下关键词 zynq freertos uart interrupt
果然很多遇到同样问题。

由于刚从STM32转到ZYNQ,需要填的坑还是挺多的。

问题出现原因:
PS端只能存在一个中断控制器,FreeRTOS在vTaskStartScheduler()里已经创建过中断控制器XScuGic xInterruptController,
正点原子uart例程初始化中断又创建一个中断控制器,导致FreeRTOS里的中断控制器失效。大概就是这样的。

解决方法:
1. 在自己代码添加 extern XScuGic xInterruptController;
2. 在任务里初始化uart中断,确保uart初始化在vTaskStartScheduler()后。

  1. extern XScuGic xInterruptController;
  2. void uart0_IntrruptInit(void)
  3. {
  4.     Xil_ExceptionInit();
  5.     Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
  6.             (Xil_ExceptionHandler)XScuGic_InterruptHandler,
  7.             (void *)&xInterruptController);
  8.     Xil_ExceptionEnable();

  9.     XScuGic_Connect(&xInterruptController, XPAR_XUARTPS_0_INTR, uart0_IntrHandler, (void *)&Uart0_Ps);
  10.     XUartPs_SetInterruptMask(&Uart0_Ps, XUARTPS_IXR_RXOVR);
  11.     XScuGic_Enable(&xInterruptController, XPAR_XUARTPS_0_INTR);
  12. }
复制代码







正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

712

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2177
金钱
2177
注册时间
2018-8-27
在线时间
257 小时
发表于 2020-2-21 10:40:13 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-3 09:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表