嵌入式编程和PC编程的区别
内容提要
在中国,从事嵌入式编程的人很少是正式的计算机专业毕业生。他们往往是从自动控制、电子等相关专业毕业的人。这些人具有丰富的实践经验,但理论知识相对较少。计算机专业毕业的人更倾向于开发网页和网络游戏等更高层次的应用程序,不太愿意从事嵌入式行业。嵌入式编程需要掌握个人计算机编程和嵌入式编程思维,以及将二者结合应用于实际项目。嵌入式编程的调试较复杂,常用的方法有JTAG和printf夹杀。多处理器的应用在嵌入式领域较为复杂,需要考虑通信、调试等问题。
延伸解读
背景差异:实践经验与理论知识的错位
文章指出,中国嵌入式开发者多来自自动控制、电子等专业,实践经验丰富但理论知识相对薄弱;计算机专业毕业生则倾向网页和游戏开发,缺乏电路知识。这种错位导致工程师往往只具备一端,问题频发。读者可据此反思团队知识结构,注意补充短板。
调试手段的局限与选择
嵌入式调试主要靠JTAG和printf,但各有局限。JTAG断点数量受硬件限制,软件断点影响时序,高速通信时难以使用;printf需用查询方式输出,避免中断或DMA,且要避开关键时序。文章还提到LED和示波器等辅助手段,提醒读者根据场景选择可靠方法。
内存管理:稳定性的头号杀手
嵌入式系统缺乏MMU保护,内存碎片和溢出后果更严重。文章案例中,大量malloc/free导致系统数天即宕机,后通过统计内存行为改为固定分配延长稳定运行时间。同时,strcpy、memcpy等函数需严格检查边界,指针使用前必须验证,否则可能破坏系统而难以排查。
多处理器与软硬件协同的复杂性
多处理器设计需考虑通信、调试和任务调度,同构SMP比异构或CMP更易开发。文章建议异构系统中事务处理器跑操作系统,计算处理器用前后台系统通过共享内存通信,以降低难度。此外,软硬件问题常交织,如断电保护案例,需双方协同定位,嵌入式开发者了解硬件原理很有帮助。
Q&A
为什么在中国嵌入式编程人员很少是计算机专业毕业的?
因为计算机专业毕业生更倾向于开发网页和网络游戏等更高层次的应用程序,不太愿意从事嵌入式行业,认为这是一条困难的道路;而自动控制、电子等相关专业毕业生有丰富的实践经验但理论知识相对较少,他们往往从事嵌入式编程。
嵌入式编程的学习步骤有哪些?
第一步是能够使用个人计算机进行编程;第二步是掌握嵌入式编程思维;第三步是将个人计算机编程思想与嵌入式编程思想结合并应用于实际项目。
嵌入式系统中内存碎片为什么是头号杀手?
嵌入式系统长时间运行后,大量不同尺寸的内存分配和释放会导致内存变得零散,虽然总空闲空间足够,但无法分配连续的大块内存,当有大空间申请时系统就会宕机。例如一个项目连续运行6天左右就因内存碎片宕机。
嵌入式调试中JTAG和printf方法各有什么优缺点?
JTAG是终极调试方法,但需要昂贵设备,断点数量受硬件限制,软件断点会影响性能,且对时序问题和高速通信调试帮助不大。printf夹杀法适合调试高速通信,但只能使用查询方式输出,会影响代码效率,需注意打印位置。
嵌入式多处理器系统设计有哪些难点?
多处理器软件设计难度大,调试也是大问题。需要设计通信算法和结果整合系统,总线的可靠和容错设计至关重要。对于CMP紧耦合系统,需要手动指定中断源、划分内存空间,驱动不一致;而SMP系统驱动相同,开发调试相对简单。
嵌入式系统中内存溢出为什么比PC系统更可怕?
因为嵌入式系统往往没有MMU保护,内存越界时不会产生异常,可能破坏系统代码后还能运行,导致难以排查的故障。例如strcpy或memcpy使用不当可能破坏内存区域,而PC有MMU保护会触发错误。