OpenEdv-开源电子网

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

ASCII二维数组结构体指针操作的问题,求高手解答

[复制链接]

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-14 11:36:55 | 显示全部楼层 |阅读模式
最近在学习指针的操作,搞了个ASCII码表的二维数组,利用结构体指针的操作方式进行转换不同的码表内容,比如ASCII1608字体和ASCII1206字体等等的转换,写法是这样的,编译没有问题(MDK3.8),但是就是显示两条横线,不明白怎么回事了,求高手指导指导

定义了两组数组



.c文件中结构体定义


.h文件中结构体信息


液晶上面的操作定义



编译没有错误,指针的操作不知道这样对不对,求指导,下载到板子上就显示两条横线,直接就显示一个‘G’字符






现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-14 19:37:32 | 显示全部楼层
仿真看一下。
看看你获得的点阵数据是否正确?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2014-3-12
在线时间
9 小时
发表于 2014-4-14 20:17:43 | 显示全部楼层
格式改为下面的试试
sFont Font1608 =
{
    ascii_1608[0],
    8,
    16
};

ascii_1608[16] 和 ascii_1206[12] 访问已经越界。。。
功夫再高、也怕羊刀
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-4-15 08:20:42 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
昨晚改了下,数组改为这样了const uint8_t ascii_1608[95][16]={。。。。};,指示增加了下面几句做测试的

printf("the font add1 is:%x\r\n", (u32)p);
printf("the font add2 is:%x\r\n", (u32)(p+ch));

for(i = 0;i < 16;i++)    printf("the font data is:%x\r\n", (u8)(*((p+ch)+i)));

打印出来的数据是这个

the font add1 is:80001f3
the font add2 is:800021a
the font data is:1c
the font data is:b5
the font data is:5b
the font data is:a0
the font data is:2
the font data is:f0
the font data is:cb
the font data is:ff
the font data is:26
the font data is:e0
the font data is:4f
the font data is:f6
the font data is:ff
the font data is:73
the font data is:4f
the font data is:f4

数组中G字母的数据
{0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x44,0x1C,0x78,0x00,0x40,0x00,0x00},/*"G",39*/
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-4-15 08:23:26 | 显示全部楼层
回复【3楼】加速度:
---------------------------------
没有越界吧,我的是二维数组,每个行有16或者12个数据呀
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

1

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2014-3-12
在线时间
9 小时
发表于 2014-4-15 08:35:01 | 显示全部楼层
回复【5楼】Badu_Space:
---------------------------------
Font1608结构体的第一个指针变量是要指到二维数组的入口地址吗?
if(Yes)
{
    下面是我做实验的方法
    unsigned int arr[8][10];
    printf("&arr[0][0] = %d\r\n",(unsigned int)(&arr[0][0]));
    printf("arr[0] = %d\r\n",(unsigned int)arr[0]);
    printf("arr[10] = %d\r\n",(unsigned int)arr[10]);
    -----------------输出-----------------
    &arr[0][0] = 1244736
    arr[0] = 1244736
    arr[10] = 1245136
    return(可见arr[10]并不是二维数组arr的入口地址); 
}
else
{
    return("我理解错了");
}
功夫再高、也怕羊刀
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-4-15 08:47:10 | 显示全部楼层
回复【6楼】加速度:
---------------------------------
等等,我试试
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-4-15 12:03:11 | 显示全部楼层
回复【3楼】加速度:
---------------------------------
改0也不行
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-11 23:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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