关于Lcd_ColorBox总是卡进HardFault_Handler问题

今天调LCD使用Lcd_ColorBox进行清屏。但是出现了二次清屏的时候总是卡死的问题,于是尝试解决。首先Lcd矩形填充函数定义如下。

/**********************************************
函数名:Lcd矩形填充函数

入口参数:xStart x方向的起始点
          ySrart y方向的终止点
          xLong 要选定矩形的x方向长度
          yLong  要选定矩形的y方向长度
返回值:无
***********************************************/
void Lcd_ColorBox(unsigned int xStart,unsigned int yStart,unsigned int xLong,unsigned int yLong,unsigned int Color)
{
    unsigned int temp;
    uint8_t * data_color;
    data_color=(uint8_t *)malloc(sizeof(uint8_t)* xLong);
    BlockWrite(xStart,xStart+xLong-1,yStart,yStart+yLong-1);
    SPI_CS(0);
    LCD_WriteByteSPI(0X72);
    for (temp=0; temp<xLong*yLong; temp++)
    {
        data_color[2*(temp%xLong)] = Color>>8;
        data_color[2*(temp%xLong)+1] = Color;
        
        if((temp+1) % xLong == 0)
            HAL_SPI_Transmit(&hspi4,data_color,2*xLong,10);
    }
    SPI_CS(1);
    free(data_color);
}

调试通过就会显示卡在了BlockWrite(xStart,xStart+xLong-1,yStart,yStart+yLong-1);这一条语句里。

显示出来就是不断地在HardFault_Handler里。

void HardFault_Handler(void)
{
  /* USER CODE BEGIN HardFault_IRQn 0 */

  /* USER CODE END HardFault_IRQn 0 */
  while (1)
  {
    /* USER CODE BEGIN W1_HardFault_IRQn 0 */
    /* USER CODE END W1_HardFault_IRQn 0 */
  }
}

看网上资料说大多数是产生了堆栈溢出等问题,开始我还以为是数组定义的问题,用malloc动态分配以后并没有什么改变。最后单独调试发现其中一旦出现重复的相同颜色清屏如下

Lcd_ColorBox(0,0,XSIZE_PHYS,YSIZE_PHYS,White);
Lcd_ColorBox(0,0,XSIZE_PHYS,YSIZE_PHYS,White);就会出现这个问题。所以解决方式就是先用别的颜色清屏再换回白色清屏,因为速度很快并不会影响实际的清屏效果。

Lcd_ColorBox(0,0,XSIZE_PHYS,YSIZE_PHYS,White);
Lcd_ColorBox(0,0,XSIZE_PHYS,YSIZE_PHYS,Black);
Lcd_ColorBox(0,0,XSIZE_PHYS,YSIZE_PHYS,White);

这样就解决了。

但具体产生这个问题的原因并没有分析出来,如果有了解的大神欢迎评论区讨论解答!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值