所谓的理解硬件就是说,理解这个硬件是怎么组织这么多资源的,这些资源又是怎么由cpu、由编程进行控制的。
比如说,s3c2410中有AD转换器,有GPIO(通用IO口),还有nandflash控制器,这些东西都有一些寄存器来控制,这些寄存器都有一个地址,那么这些地址是什么意思?(也即是在内存中的位置,每个处理器都有其寻址的范围,我们把这个范围从0开始编号,一般都是按字节编址的,寄存器的地址就是在这个内存中的位置)
又怎么通过寄存器来控制这些外围设备的运转?(这个就是硬件的设计的功能了,例如手机开关按键按下就可控制手机的亮灭。向相应的寄存器中写入对应的数据就可实现相应的功能)
还有,norflash内部的每一个单元在这个芯片的内存中都有一个相应的地址单元,那么这些地址与刚刚说的寄存器地址又有什么关系?(可以说是一样的,不同之处是放入上面寄存器内的数据是控制相应外设的功能的,而norflash内的是用于存储数据的)
再有,使用ADS进对ARM9行编程时都需要使用到一个初始化的汇编文件,这个文件究竟有什么用?(指的是启动代码吧)
他里面的代码是什么意思?(为能顺利的执行我们用高级语言写的程序做准备的,例如硬件初始化,堆栈的分配等)
不要这个可以吗?(如果你的应用程序是使用汇编编写的就不需要这些)
诸如此类都是对硬件的理解,理解了这些东西就对硬件有很深的理解了,这对以后更深一步的学习将有很大的帮助。
每个设计的确都有它的现实考虑,编程语言是很实在的东西,往往外貌冷冰冰但其为什么是这样有充足原因。
1.内置数组,为什么不设置下标检测?如果检测下标,定然就会在每次访问下标时,做是否越界的检验,这就带来了运行时开销。如果你的算法非常好,定然不需要检测下标,则语言假定一定要在每次访问下标时都判断,就会影响效率并失去选择的机会。如果设置N个选项,可以用来关闭或打开是否检测下标,那不应该是一种语言应该干的,各有各的侧重点。
2.C语言传数组参数为什么默认是转换成指针类型?以C语言产生那个年代的硬件条件,复制