①
Write
(输出项1,输出项2)
;
{执行输出后光标不换行}
②
Writeln
(输出项1,输出项2)
;
{执行输出后光标换到下一行}
③
Writeln
{仅输出空白且光标换到下一行}
Writeln语句后面的圆括号以内部分均为输出项,可以是多项,各项间用逗号分隔;
对单引号里的内容按照引号内的原样(字符)输出显示。如果输出项是表达式,则只输出表达式的值,而不是表达式本身。
Readln是一个特殊的输入语句,要求输入一个回车(换行)才能往下执行。
Readln是输入语句,它的一般格式为:
①
Read
(变量1,变量2);
②
Readln
(变量1,变量2);
③
Readln
前两种格式均要从键盘给变量输入数据,输入时,所键入的数据之间以空格为分隔,以回车为输入结束。若多输入了数据(即数据个数超过变量个数),Read语句读完数据之后,能让后续的读语句接着读取多下来的数据;而Readln
语句对本行多输入的数据不能让后续语句接着读取多下来的数据。为了防止多输入的数据影响下一个输入语句读取数据,建议尽量使用Readln语句输入数据。第三种格式不需输入数据,只需按入一个回车键。
request_mem_region(gpbcon, 4, "hu"pcon = ioremap(gpbdat, 4)
request_mem_region(gpbdat, 4, "hu"
pdat = ioremap(gpbdat, 4)
request_mem_region(gpbup, 4, "hu"
pup = ioremap(gpbdat, 4)
(1)你确定这三个内核地址映射ioremap(gpbdat, 4)里面的参数都为gpbdat?(2)0x56000010(大于1G,小于2G的物理地址),你确认你内存够大或有相应的设备的物理地址恰好在上面?
经过测试(当然是修改了那ioremap参数),若内存512M,读出全为0(不为零才怪了),若内存2048M,没问题,能正常赋值和读出。
在arch/alpha/kernel/io.c中有188 void writel(u32 b, volatile void __iomem *addr)
189 {
190 __raw_writel(b, addr)
191 mb()
192 }
129 void __raw_writel(u32 b, volatile void __iomem *addr)
130 {
131 IO_CONCAT(__IO_PREFIX,writel)(b, addr)
132 }
在对应的io.h中的定义如下:
134 #define IO_CONCAT(a,b) _IO_CONCAT(a,b)
135 #define _IO_CONCAT(a,b) a ## _ ## b
其实是内核的东西,由于你是写驱动不是写内核,知道是往某个地址写数据就是了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)