回复:《嵌入式Linux应用开发完全手册》第1版第2次印刷堪误
书本的第二版我看了一次
的确是一本对初学者入门的好书
例子扼要且丰富,感谢韦兄投入大量的精力,给了广大处于对嵌入式这个领域感觉迷糊而又爱好的学习者一块垫脚石(steppingston)
书本上有几个错误还是要提出的
在P153页中间的代码,不知道是什么的原因,韦兄在此程序中犯了一个逻辑错误
首先,CPU复位是处于管理模式,而非系统模式,
即
43,44行代码是在管理模式下运行,栈顶在4096位置
46,47行代码在中断模式下运行,栈顶在3072
以上没有太大问题
关键在以后的4行代码
CPU进入系统模式,而此时栈却指向管理模式下的栈顶,这对程序的设计是一个致命性的破坏,理论上此时SP应该指向比3072更低的地址空间。而接下的那两句注释是一个根本上的错误,上面已提及,CPU复位是处于管理模式非系统模式,由于SP是分组寄存器,因此最后的ldr sp,=4096并非与前面的功能完全相同,并且把SP赋值得4096是一个致命的错误。
虽然程序仍然能执行,这是因为在管理模式下没有使用到栈区,但是这几句注释和栈区设置范例对于一个初学者来说是一个误导,希望及时改正
还有,在贵书中许多的图仍存在错误,这大概是修订的时候没有仔细
如131页图8.6,第一个命令字应该是80h而非00h
147页图9.4,两个中断源的with和without混淆了,而后面的MASK和MODE也混淆了
再者,此图是摘自手册的图,但是本人觉得尽管是手册上出现,但此图仍然后毗漏。因为尽管是FIQ,也需要进行MASK的判断,而并非可以不经过MASK直接进入MODE的判断,因此箭头应该先经过MASK再进入MODE,然后由MODE分支分别进入prioriy和FIQ。
还有一些小问题,看过以后一时找不到,当再发现时及时向韦兄再次汇报

希望韦兄的课本越办越好