|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
在如题中的环境下,编写LCD驱动程序时,我自己定义了些变量,想把显存中某些地址上的数据改写,为什么想这么做呢?是因为我们采用的是16级灰度的黑白液晶,因此有时需要只修改显存中某个地址里的半个字节,这个问题各位大侠有何高见,小弟在此求教了。我目前的想法如下代码:
struct inode *inode = file->f_dentry->d_inode;
int fbidx = GET_FB_IDX(inode->i_rdev);
struct fb_info *info = registered_fb[fbidx];
struct fb_ops *fb = info->fbops;
struct fb_var_screeninfo var;
int PY;
unsigned long *p,*q,*q1;
struct Stru_LcdDisplay P_StrPics;
unsigned int NextLine;
unsigned char X_Size,Y_Size,*base_addr,i=0,j=0;
base_addr = info->disp->screen_base;
''''''''''''
p=(base_addr+(P_StrPics.User_yy+(i+P_StrPics.User_xx)*NextLine +PY-1));
*p=*(base_addr+(P_StrPics.User_yy+(i+P_StrPics.User_xx)*NextLine +PY-1));
q=(unsigned char *)(P_StrPics.Pics_Addr+(i+1)*PY-1);
*q=(*q)&0x0f+(*p)&0xf0;
想用这几条语句修改数据,虽然编译通过,但是把bin文件下载后运行相应的应用程序出错:错误信息是:
Unhandled fault: alignment exception (13) at 0x00000001
fault-common.c 96
Internal error: Oops: 0
CPU: 0
pc : [<0c09efe0>] lr : [<0c09ef2c>] Not tainted
sp : 0c78d960 ip : 0c78d90c fp : 0c78da44
r10: 000000a0 r9 : 00000000 r8 : 00000018
r7 : 0c7f1000 r6 : 0000000e r5 : 00008350 r4 : 0c705e6f
r3 : 0c705e61 r2 : 00000003 r1 : 0000000e r0 : 0c0ca7d8
Flags: nzcv IRQs on FIQs on Mode SVC_32 Segment user
Control: 0
Process ts (pid: 14, stackpage=0c78d000)
Stack:
0c78d940: 0c09ef2c 0c09efe0 00000013 ffffffff
0c78d960: 00000003 000000d2 0000015e 0000001b 0c705e61 170f1200 00000016 00000140
0c78d980: 000000f0 00000140 000000f0 00000000 00000000 00000004 00000000 00000000
0c78d9a0: 00000004 00000000 00000000 00000004 00000000 00000000 00000004 00000000
0c78d9c0: 00000000 00000000 00000000 00000000 00000000 ffffffff ffffffff 00000000
0c78d9e0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
0c78da00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
0c78da20: 0c1ec400 0c707f50 0c190d1c 0c1b2168 00004620 0c7106e0 0c78df88 0c78da48
0c78da40: 0c09f6e4 0c09ee64 0c78da74 0c78da58 0c0011c0 0c1b220c 0c7dd220 0c191534
0c78da60: 00000008 0c18903c 0c78da84 0c78da78 0c024380 0c022064 00000000 0c191534
0c78da80: 00000008 00000000 0c78dab8 0c78da98 0c017484 0c021e60 0c78daf0 01e00020
0c78daa0: 0c0860f0 0c017430 0c7eb160 00000001 0c7eb160 00000000 0c78db14 04000000
0c78dac0: 0c78daec 0c78dad0 0c086440 0c086238 00000000 0c191494 00000003 04000000
0c78dae0: 0c78db10 0c78daf0 0c017484 0c021e60 0c78db48 01e00020 0c022364 0c08d974
0c78db00: 20000013 0c78db6c 0c78db14 0c016840 0c017354 0c08d974 0c198a20 00000001
0c78db20: 0c198c60 0c198a1c 00000000 0c1880a0 00000000 0c78dbd4 ffffffff 0c1d4580
0c78db40: 0c78db6c 0c78db70 0c78db5c 0c78db6c 0c78db70 0c78db60 0c023d7c 0c023c58
0c78db60: 00000001 0c78db9c 0c78db74 0c024044 0c023d74 0c1989e0 00000000 0c1880a0
0c78db80: 00000000 0c78dc18 ffffffff 0c6fcd70 0c78dbb0 0c78dba0 0c022364 0c024014
0c78dba0: 0c1989e0 0c78dbd0 0c78dbb4 00000003 0c6ff5ac 0c6ff578 00000002 00000001
0c78dbc0: 0c78dc80 0c7104e0 0c6f8170 0c78dbf0 0c78dbdc 0c032620 0c01c6fc 0c6ff560
0c78dbe0: 0c6ff560 0c78dc04 0c78dbf4 0c032738 0c0325d8 0c7e7920 0c78dc24 0c78dc08
0c78dc00: 0c0927e8 0c032710 0c7e7920 0c1a7134 0c18e878 0c7e7920 0c78dc48 0c78dc28
0c78dc20: 0c093ccc 0c092864 000002e5 20000013 00000000 0c78c000 0c18e86c 0c78dc5c
0c78dc40: 0c78dc4c 0c09147c 0c093b40 0c78dc60 0c78dc7c 0c78dc60 0c022474 0c091440
0c78dc60: 0c1a7170 0c1a7170 0c18e86c 0c6ff560 0c78dcb0 0c78dc80 0c0326d8 00001e00
0c78dc80: 00000400 000002b8 0c78dcb0 0c78dc98 0c033950 0c032fa0 00000400 0c6ff560
0c78dca0: 00000400 00000074 0c793980 00000570 000ae000 000005e4 0c78dcd8 0c78dcc8
0c78dcc0: 0c023d7c 0c023c58 00000001 0c78dd04 0c78dcdc 0c024044 0c023d74 0c1989e0
0c78dce0: 00000000 0c1880a0 00000000 0c78dd80 00001e00 00000400 000002d5 0c78dd24
0c78dd00: 0c78dd0c 0c033950 0c032fa0 00000000 000b90f0 0c7106e0 00000000 0c7eb160
0c78dd20: 00000001 00000fff 0c78dd54 0c78dd38 0c086370 0c086084 0c7eb160 00000000
0c78dd40: 0c78dd9c 04000000 0c78dd74 0c78dd58 0c086440 0c086238 00000000 0c191494
0c78dd60: 00000003 04000000 0c78dd98 0c78dd78 0c017484 0c021e60 0c78ddd0 01e00020
0c78dd80: 0c0860f0 0c08655c 20000013 0c78de08 0c78dd9c 0c016840 0c017354 0c1989c0
0c78dda0: 00000000 000001f4 0c198d74 00000004 20000013 0c78dde0 0c78ddc4 0c0863e8
0c78ddc0: 0c085ee8 00000002 00000007 20000013 0c198d74 0c78de08 0c78dde4 0c08657c
0c78dde0: 0c023790 00000001 00000000 0c1880a0 00000000 0c78deb0 0c7dd240 0c78de34
0c78de00: 0c78de0c 0c0242a8 0c0864fc 0c1989e0 00000000 0c1880a0 00000000 0c78deb0
0c78de20: ffffffff 0c7dd240 0c78de48 0c78de38 0c022364 0c024014 0c1989e0 0c78de68
0c78de40: 0c78de4c 0c022220 0c78de68 0c78de58 0c01d798 0c01c14c 00000001 0c78de88
0c78de60: 0c78de6c 0c021f30 0c01d748 00000000 0c191534 00000008 00000000 0c78deac
0c78de80: 0c78de8c 0c017484 0c021e60 0c78dee4 01e00020 0c09ee1c 0c0af224 20000013
0c78dea0: 0c78df80 0c78deb0 0c016840 0c017354 0c7f8784 0c707f38 00000000 ffffffff
0c78dec0: ffffffff ffffffff ffffffff 00007530 0c190d1c 0c1b220c 0c78df14 0c1ec400
0c78dee0: 000093a8 0c190d1c 0c707ce4 0c78df10 0c78defc 0c0a5438 0c7fa3a8 00000258
0c78df00: 0c78df14 00000258 0c1ec400 000093a8 0c09ee1c 34433353 00304234 00000000
0c78df20: 00000000 0c7f1000 00009600 00000000 00000000 00000003 00000000 00000000
0c78df40: 000000a0 00000000 00000000 00000000 00000000 00000000 0c7dd220 ffffffea
0c78df60: 0c7dd220 00004620 ffffffe7 0c707f50 00000003 00000036 0c705e40 0c78dfac
0c78df80: 0c78df8c 0c03ffa0 0c09f260 00000003 0c707fb0 00000001 0c78c000 0c016c80
0c78dfa0: 00000000 0c78dfb0 0c016ae0 0c03fdbc 00000003 0c01c378 00000003 00004620
0c78dfc0: 0c707f50 0c707f50 00000003 0c707fb0 00000001 00000000 00000000 00000000
0c78dfe0: 0c705e40 0c707f1c 00004620 0c707f0c 0c70219c 0c702160 20000010 00000003
Backtrace:
Function entered at [<0c09ee54>] from [<0c09f6e4>]
Function entered at [<0c09f250>] from [<0c03ffa0>]
Function entered at [<0c03fdac>] from [<0c016ae0>]
r8 = 0C016C80 r7 = 0C78C000 r6 = 00000001 r5 = 0C707FB0
r4 = 00000003
Code: e0844003 e59f0050 (e5341001) ebfe014a e7973005
pid 14: failed 11
/>
我看了错误之后,感觉和存储区的分配有关,但是我这方面很弱,拜求大家了,请指点迷津。
谢谢! |
|