zoukankan      html  css  js  c++  java
  • 读字库遇到坑爹的问题

    转载请注明出处:http://blog.csdn.net/qq_26093511/article/details/53099262

    最近在做一个led显示屏的项目, 我想显示 “常”,“州”,“大”,“学”这几个字,但是只能显示   “常” 和 “大”,其他两个字是乱码。坑啊,一直在查找问题所在,但是一直没找到,试了各种方法:换查找字库的索引,修改变量类型,但是还是不行!

    下面是部分代码:

    unsigned char xdata Font_H,Font_L;
    unsigned long xdata addr;
    unsigned char col ,num;

    io_init();  
    //time0_init();
    variable_init();

    for(col=0;col<4;col++)
    {
    Font_L =chepai[col][0];
    Font_H =chepai[col][1];
    addr =(unsigned long)(Font_L-0xa1)*0xbc0;
    addr = addr + (Font_H-0xa1)*0x20;
    // for(num =0; num<32;num++)
    {
    W25Q16_Read(addr ,Tmp[col],32);
    }
    }


    经过仿真,发现 “常” 的索引字是  0x0000D3C0 ,“州”索引值是0x00027640 ,“大“的索引值是0x0000E980,”学“的索引值是0x000234C0


    我们发现常大是16位的,而州和学超过了16位而显示乱码,所以猜测  数据溢出,定义的变量类型太小。而unsigned long 就是32位的,所以索引的地址变量没问题,进而猜测  W25Q16的底层读函数有点问题,我们进入  void W25Q16_Read(unsigned int address,uchar *date,uchar j)  , 发现了问题所在!!

    unsigned int 是16位的,所以索引值超过16位,就会溢出,从而引发错误!

    只需把 unsigned int 改成 unsigned long 就行了



    在此非常感谢郑老师的帮助!

  • 相关阅读:
    工作——为window添加ExtJs添加回车快捷键
    ExtJs_layout_Table
    ExtJs_Grid
    人类和人类对象的使用homework
    简单的Java界面展示
    chapter three Java homework
    for循环语句
    do-while
    switch...季节
    switch的Scanner计算..
  • 原文地址:https://www.cnblogs.com/alan666/p/8312084.html
Copyright © 2011-2022 走看看