资源描述:
《基于CCS的嵌入式软件开发与调试》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、基于CCS的嵌入式实时系统软件开发与调试田黎育实时调试的挑战DSP程序常见的错误程序跑飞,死机程序跳转不正确数据被修改指针问题、堆栈溢出DSP实时程序的特点:与通用OS的应用程序比较(1)至少存在一个中断,即有时限(2)DSP系统是嵌入式系统,用户管理memorymap。(3)数据IO程序+数据处理程序:并行可能的硬件平台的问题给软件带来的麻烦调试:debug调试就是通过理解系统行为(运行),让系统实现其正确的功能的过程。在调试时,我们试图根除导致系统出现未预期行为的根本原因。为了理解其根本原因,
2、我们需要理解系统的运行情况。我们需要理解系统在做什么----不是我们认为系统应该做什么,也不是另外什么人说系统在做什么----而是系统实际上在做什么。如果我们不理解系统,就不能指望改动系统让它完成我们想做的事情。而且,我们所做的任何改变系统行为的事情,都有破坏另外一些事情的危险;也可能因为改动而带来了更多的bug。什么是“调试”输入输出×调试的过程调试的一般过程(1)识别问题(加断点对timer计数的影响)(2)收集信息logging:(收集什么信息?造成输出错误的直接输入信息,逐级tracing)(3)分
3、析收集的数据,定位bug;(4)修改bug。可控性&可观测性:来自软件工程的概念,其中可观测性是软件、硬件调试的基石。调试的手段静态调试:单步执行;设置断点;观察变量;观察寄存器和存储器值;修改变量、寄存器和存储器的值;运行一段程序;“必须掌握的基本技能”动态调试:实时记录、观察数据;RTDX条件断点;论述“调试”的书籍TheScienceofDebugging,MattTelles.程序调试思想与实践,中国水力水电出版社---bug是系统逻辑的奴隶DebuggingApplication,JohnRo
4、bbins,MicrosoftPress,2000主要针对windows程序调试中文名:应用程序调试技术软件调试思想:RobertCharlesMetzger嵌入式实时系统程序的分类简单地,可以分为(1)数据处理的程序:各种算法的实现;与硬件相对无关(2)数据传输的程序:与硬件紧密相关;中断、DMA:提高数据传输效率的两种“古老”而有效的手段两种程序的开发时间:数据链路层次(1)CPU核DSP的寄存器和运算单元之间的数据链路多数据链路层次(2)DSP片内存储器片外存储器接口:EMIF,HPI/XBUSDMA
5、中断其它外设:时钟,串口数据链路层次(3)板级数据链路层次(4)板间CompactPCI总线脉冲压缩板C6701C6701C6701C6701C6202AD预处理板ADCC6202ADCC6202DSP板并口串口C6202CPU板定时板C31某信号处理系统框图系统定时信号数据链路层次(5)系统间其实是一个雷达系统的子系统之间的数据链路。再进一步:这个雷达系统可以组网,利用通信系统给决策单位提供信息,进行后数据处理,做出决策总之,要对数据链路有一个清晰的各级层次的传输图C6000的中断(1)三个概念:(1)中断源
6、(Interruptsource):即中断事件,32个(2)中断选择号(InterruptSelectionNumber):5bit(3)中断(Interrupt):12个可屏蔽+NMI(No.1)+RESET(No.0)+RTDX(No.3)中断寄存器的设置:中断源通过中断选择子(InterruptSelector)“映射”到CPU的中断上,并可通过外中断极性设置寄存器设置EXT_INT4EXT_INT7的中断极性(即中断地触发时刻)C6000的中断(2)中断服务程序:map1:IDRAM0x000~0x2
7、000x200=16*32;16个中断,每个中断的8条指令;二次跳转:中断服务程序的任务实现超过8条指令时,跳转到真正处理中断的子程序_INT4:.asg4,vecstw.d2b0,*--b15
8、
9、mvk(_isr_jump_table+vec*4),b0mvkh(_isr_jump_table+vec*4),b0ldw.d2*b0,b0nop4b.s2b0
10、
11、ldw.d2*b15++,b0nop5C6000的中断(3)二次跳转的实现:(1)中断跳转表:isr_jump_table全局变量(2)“挂”中断:v
12、oidintr_hook(void(*fp)(void),intcpu_intr);来源:tic6000evm6xdsp…库函数,头文件,源文件v1.2有;v2.0只含头文件C6000的中断(4)中断嵌套-进入中断后,GIE=0-允许中断嵌套的设置中断重入-打乱时序关系,应该尽量避免IRPBak=GET_REG(IRP);CSRBak=GET_RE