关于C语言传递参数的问题

要求:编写一个函数,将RGB数据显示到TFT彩屏上,RGB数据为565格式,

平台:STM32F030   LCD:ST7735S

编译平台:MDK5.14

对于这个一般的来说很多人会这么写

void LCD_Draw_RGB(u16 x,u16 y,u16 x_size,u16 y_size,u16 *pixel)

{

      u16 i,j;【0】

     ....//此处省略的代码为向LCD设置显示内存区域【2】

    for(i = 0;i < x_size;i++)【3】

   {

        for(j = 0;j < y_size;j++)【4】

       {

           lcd_put_pixel_bytes(*pixel);【5】

           lcd_put_pixel_bytes(*(pixel >>8));【6】

          pixel++;【7】

      }

   }

}

以此为例

const u8 _t_test_bmp_data[]={......};此处为静态BMP,RGB565的数据,用以数组的形式存放


然后显示 _t_test_bmp_data里面的BMP数据,一般来说

LCD_Draw_RGB(0,0,60,60,(u16*)_t_test_bmp_data);

很多人都认为这样调用的话,会将_t_test_bmp_data里面的数据显示到相应的LCD上面,

这样写,有时候能够运行,有时候则将不会运行,单片机会复位

至于出现这个的原因如下:

当编译器在编译程序的时候,如果_t_test_bmp_data

这个静态数据的起始地址是2的整数倍的话,那么是没有问题的

而当编译的_t_test_bmp_data这个静态数据的起始地址是奇数的时候,则会发生,内存总线访问错误的,硬件错误

当产生硬件总线错误的时候,芯片一般会复位

复位会发生在【5】这个地方

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值