OpenEdv-开源电子网

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

freertos 中用pvPortMalloc会导致关闭中断?

[复制链接]

49

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5246
金钱
5246
注册时间
2012-8-25
在线时间
1024 小时
发表于 2019-10-25 08:28:48 | 显示全部楼层 |阅读模式
10金钱

  1. static int _DrawBitLine1BPP_fast(GUI_DEVICE * pDevice, int x, int y, U8 const GUI_UNI_PTR * p_s, int Diff, int xsize, int ysize,int BytesPerLine  ,const LCD_PIXELINDEX * pTrans) {
  2.   
  3.   int buffer_lenth =  xsize *ysize * sizeof(LCD_PIXELINDEX) ;
  4.   LCD_PIXELINDEX *buffer_p = pvPortMalloc( buffer_lenth);
  5.   if(buffer_p == 0) return 0;

  6.   LCD_PIXELINDEX  Index0, Index1;

  7.   LCD_PIXELINDEX *fill_p=buffer_p;
  8.    
  9.   Index0 = *(pTrans + 0);
  10.   Index1 = *(pTrans + 1);
  11.   
  12. int redata=0;
  13.   switch (GUI_pContext->DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
  14.   case 0:
  15.     {
  16.       int i,j;
  17.       for(j=0;j<ysize;j++)
  18.       {
  19.      int   diffs= Diff;
  20.      U8 const * p = p_s;
  21.      for( i=0;i<xsize;i++)
  22.      {
  23.        *fill_p++ = (*p & (0x80 >> diffs)) ? Index1 : Index0;
  24.       if (++diffs == 8) {
  25.         diffs = 0;
  26.         p++;
  27.       }
  28.     }
  29.     p_s+= BytesPerLine;
  30.    
  31.       }

  32.      RA8875_SetDispWin( x, y, ysize, xsize );
  33.     RA8875_SetCursor( x, y );
  34.     LCD_WR_REG( 0x02 );     
  35.       
  36.                   hdma_memtomem_dma2_stream1.Instance->CR |= DMA_PINC_ENABLE; //源
  37.              hdma_memtomem_dma2_stream1.Instance->CR &= ~DMA_MINC_ENABLE;//目
  38.         if(0==HAL_DMA_Start_IT(&hdma_memtomem_dma2_stream1, (uint32_t)buffer_p,0x60000000, buffer_lenth)  )
  39.         {
  40.                 while(HAL_DMA_GetState(&hdma_memtomem_dma2_stream1) !=HAL_DMA_STATE_READY )
  41.                 {
  42.        
  43.                 }
  44.                
  45.         }  
  46.         
  47.         
  48.       
  49.    redata=1;
  50.     }
  51.    
复制代码
如上面程序,用了pvPortMalloc申请内存,然后用dma写入显示中.程序死在while(HAL_DMA_GetState(&hdma_memtomem_dma2_stream1) !=HAL_DMA_STATE_READY ),原因是所有总断都不响应.systick中断也没有.如果不用pvPortMalloc就不会.freertos不精通,求高人指点

最佳答案

查看完整内容[请看2#楼]

任务正常调度就不会了,任务调度前用了pvPortMalloc的确会关受控的中断 可以自己强制开全部中断 调度后自动就好了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-10-25 08:28:49 | 显示全部楼层
本帖最后由 nashui_sx 于 2019-11-1 12:06 编辑

任务正常调度就不会了,任务调度前用了pvPortMalloc的确会关受控的中断  可以自己强制开全部中断 调度后自动就好了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-10-28 02:48:31 | 显示全部楼层
帮顶
回复

使用道具 举报

49

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5246
金钱
5246
注册时间
2012-8-25
在线时间
1024 小时
 楼主| 发表于 2019-11-1 11:33:45 | 显示全部楼层
nashui_sx 发表于 2019-10-31 20:53
任务正常调度就不会了,任务调度前用了pvPortMalloc的确会关中断  可以自己强制开全部中断 调度后自动就好 ...

原来是这样.谢谢.
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 22:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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