文件名称:译者添加的引子-netfpga-1g-cml: kintex-7 fpga开发板 用户手册
文件大小:6.52MB
文件格式:PDF
更新时间:2024-06-29 04:47:44
Cortex-M3
14.0 译者添加的引子 MPU进入单片机还是很新鲜的事,为了让读者预先对它更有一点认识,译者加入了引文: 引子 1:野指针与 C语言 回顾一下,什么是指针?指针在内存中实际上是一个无符号整数(unsigned int),但是它的值被 赋予特殊的解释:表示变量或函数的地址。所以才被形象地称为“指针”,就好像指向谁家似的。 在使用指针前,都必须先让它指向有意义的,并且允许由程序使用的实体——数据和代码。而所谓 “野指针”,就是指某个指针变量的值因故超出合法的范围,使其“枪口”乱指。程序逻辑错误、 数组越界、堆栈溢出、指针未经初始化、对缓存与缓冲的处理不当、多任务环境中的紊乱危象,甚 至是恶意地破坏等,都可以制造出野指针。如果使用野指针去读取或修改内存,则被读取或修改的 位置是不可预料的。前者导致读回来的都是垃圾数据,后者则更是“血口喷人”——会破坏未知用 途的数据。这常常导致系统发生莫名其妙的功能紊乱,严重时会使系统毫无征兆,没有理由地失控、 死机。 野指针就像“肉里的刺,酱里的蛆”一般:一个野指针就足以崩溃整个系统,而且极其隐蔽, 很难通过症状来找出是哪里存在野指针,甚至都不能判定症状是否因野指针造成(程序大了其它 bug 也很多,并且也能导致相同的症状)。野指针的发作概率越小,就越隐蔽,后患也越无穷。对于通 常的单片机系统,是没有任何办法来防止野指针的破坏的,完全靠程序员的素质和自律。但智者千 虑,必有一失。尤其是当程序规模变得很大时,复杂度会呈指数上升,千头万绪纠缠不清,就算是 谨慎如诸葛亮,聪明如比尔·盖茨的天才,也不敢保证没有漏网之鱼。 嵌入式系统开发的首选语言是 C 语言。C 语言的指针功能非常灵活、生猛、桀骜不驯,它是电, 它是光,它是 C 语言中最闪亮的“Super Star”。C 语言允许我们几乎随心所欲地把玩各种地址,离 汇编语言中“放任自流”的程度也差不远了。可是,要是像汇编那样“明坏”倒也好,偏偏 C语言 中的指针还因为语言特性附加了许多十分微妙的“潜规则”,令人防不胜防;更加暧昧的是指针与 数组的关系,一维数组与多维数组的关系,多维数组与“星星”点灯的关系,指针与”[]”的二重 唱,指针在宏中使用时极易弄巧成拙的暗箱操作……用 C 语言的指针功能就像在玩一场勾魂的“野 蛮游戏”,不知不觉其实你已“上线”,指针飞舞的世界战火连天,如果不想每天因爆发了却查不出 来的 bug 而以泪洗面,提高警觉快张大双眼是必要的,但年深日久 0 还是难免有看不清楚而迟早粉 身碎骨的时候。在系统程序的开发中,指针更是满天飞遍地爬,程序员在这无间世界里没有想过要 逃脱,为什么要逃脱?完全是“你主宰,我崇拜,没有更好的办法,只能爱你,u r my super star”。 MPU概览 MPU的寄存器组 启用 MPU MPU的典型设置