- 1、本文档共32页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 嵌入式软件调试、测试、问题定位 经验分享 AEBELL 陆灿 2014-11-18 内容: 嵌入式软件开发概述 常见问题及分析 实例分析 总结 嵌入式软件开发,是指针对嵌入式硬件平台带嵌入式操作系统的软件开发,硬件平台包括:单片机、 ARM 、 PowerPC、DSP 、 MIPS 等;主流嵌入式操作系统有:嵌入式linux、 VxWorks 、wince等。广义的嵌入式软件开发还包括单片机软件开发。 嵌入式软件开发根据不同的硬件平台、不同的操作系统、不同的开发环节有着多个的方向,如不带操作系统的前后台程序开发;带操作系统的可以有bootloader开发、内核开发、驱动开发、应用开发等。 相对于强大的PC,嵌入式硬件平台资源非常有限,低端的CPU其片内ram一般为 K 级至 100K 级,ROM为 10K 级至 1M 级,如单片机、ARM7、Cortex-M3。高端的CPU使用片外ram、rom,能达到 G 级,如A8、A9处理器。 由于嵌入式硬件资源的限制,嵌入式软件不能直接在板子上开发,而是以通用平台(PC)作为宿主机,板子作为目标机,在PC上进行代码编辑,用交叉编译器生成目标码,将目标码下载到板子中去才能运行。 常见问题及分析 错用运算符 运算符优先级歧义 大小端倒置 内存越界 内存泄露 任务优先级问题 常见问题: 错用运算符 1)条件判定“==”和赋值“=”: if(i = j) { … } 2)逻辑与、或||和位运算与、或|。 if(a b) { … } 2. 运算优先级歧义 如果代码行中运算符比较多,如: if(a | b a c); 看起来比较艰涩,搞不好容易出错。要熟记所有运算符优先级比较困难。为防止歧义并提高可读性,应当用括号确定表达式的操作顺序,如上式可写为: if((a|b) (ac)); 运算符的优先级与结合律 3. 大小端倒置 大端,是指数据的高位,保存在内存的低地址中,而数据的低 位,保存在内存的高地址中;小端与大端相反。 例如0 在大端系统的内存中如下: 在小端系统中是相反顺序: … 11 22 33 44 … … 44 33 22 11 … 内存增长方向 系统与外界交互数据时通常会涉及到大小端问题,例如上位机(PC)将某歌曲信息传给下位机(设备),歌曲信息如下,规定传输高位在前,低位在后(大端方式)。 设备一般会定义相应结构体: typedef struct { char type; //分类 short rate; //采样率 int len; //长度 }SONG_INFO, *pSONG_INFO; int handle_song_info(uchar *buf) { char type; short rate; int len; pSONG_INFO psong_info; psong_info = (pSONG_INFO)buf; type = psong_info-type; rate = psong_info-rate; len = psong_info-len; … … } buf是接收PC数据的缓冲区,假设接收到数据在buf中如下: 在大端的CPU得到正确结果: rate:0x2233,len:0在小端的CPU得到的是: rate:0x3322,len:0显然与协议规定的不一致,要做如下大小端转换: rate = htons(psong_info-rate); len = htonl(psong_info-len); 单字节不用考虑大小端问题, 如例中的type变量。 11 22 33 44 55 66 77 常见问题: 4.内存越界 内存越界难以被发现,往往会导致离奇古怪的问题,如一些变量值无故被修改、程序跑飞、系统重启等。 内存分配有3种:栈内存、堆内存和静态内存(全局变量、静态变量),相应内存越界有3种情况:栈内存越界、堆内存越界、静态内存越界。 栈内存 堆内存 静态内存 1)栈内存越界 深入了解栈,对提高程序的效率、程序调试、问题的定位都有很大的帮助。栈实际就是一块连续内存,用于开辟局部变量、传递参数、进入子程序前保存现场,入栈是从高地址向低地址增长。CPU内部有一个寄存器作为栈指针SP,指向当前栈地址。开始时SP指向栈顶,也就是栈空间的最高地址
您可能关注的文档
最近下载
- 波司登MSP检核专项考核及服务销售相关知识试卷.docx
- 第十七届全国大学生先进成图技术与产品信息建模创新大赛——全国总决赛赛题(建筑类).pdf VIP
- 《外科护理学肺部疾病》授课表.doc VIP
- 《GB13495.1-2015消防安全标志第1部分:标志》最新解读.pptx VIP
- 2025年(完整word版)体育单招英语试题与附标准答案 .pdf VIP
- 部编版三年级上册第一单元作业设计.pptx VIP
- 建筑地基基础工程施工规范完整版2024.pdf VIP
- 榆林能源集团有限公司招聘工作人员考试真题2024.docx VIP
- 整车座椅的设计开发方法与流程.pptx VIP
- GB50864-2013 尾矿设施施工及验收规范.docx VIP
文档评论(0)