DSP TMS320F2812验证平台制作日志2

2019-07-13 12:51发布

今天的任务是,能够写一段汇编程序,并在CCS上成功运行。做这个的目的是了解CCS载入的汇编程序长什么样,有助于我的验证平台将用户友好型测试用例转换成汇编型测试用例。 首先是编写源程序的规则:   源语句语法: [标号] [ ]   助记符   [操作数1,操作数2,…][;注释 注:“[ ]”表示该项可缺省。    标号域 —— 标号域是任选域,可有可无。若使用必须从源语句的第一列开始书写。标号包含132个字母、数字、字符,可识别符号的大小写,且第一个字符不能是数字。标号可以后随冒号。如果不使用标号,则第一个字必须是空格或分号或星号。 助记符域 —— 是关键部分,不能缺省,它表示本指令的操作类型。助记符不能从源语句的第一列开始。它包括下列操作码之一:      √ 汇编指令(例如ABS, MPY, SPH);      √ 伪指令(例如.data, .list, .set);      √ 宏指令(例如.macro, .mexit)。 操作数域 —— 是跟在助记符域后面的操作数列表,可缺省。如果多于两个操作数,则用逗号隔开。它可以是常数、符号和表达式。 注释域 —— 可以从源语句行的任一列开始并直至本行的末尾,即仅包括注释的源语句是有效的。如果它从第一列开始则可以用分号或星号开始;在行的其他地方开始的注释,必须以分号开始。 以上选自《DSP原理及应用技术课件》第六章   所有语句必须以标号、空格、星号或分号开头。 标号时可选的,若用标号,它必须写在第一列的开始(否则编译出错)。 必须用一个或多个空格分隔每个域。制表符(Tab)等效为空格。 注释是可选的。在第一列开始的注释可以用星号或分号(*或;)打头,但在其他任何列开始的注释必须以分号(;)开头。 助记符不能从第一列开始,否则将被视为标号。 [ ]”表示该项可选的。 以上选自《DSP原理及应用技术》第262   根据《DSP原理及应用技术》第262页上的例子写了.asm文件,内容如下 two .set 2 Begin: MOV AR1, #two .word 016h LOOP MOV DP, #two

Build以后报了两个warning "D:CCStudio_v3.3C2000cgtoolsincl2000" -g -pdsw225 -fr"D:/CCStudio_v3.3/MyProjects/testasm/Debug" -d"_DEBUG" -d"LARGE_MODEL" -ml -v28 -@"Debug.lkf" "asm1.asm" Warning: The project has no cmd file while the Text Linker is selected [Linking...] "D:CCStudio_v3.3C2000cgtoolsincl2000" -@"Debug.lkf" >> warning: entry point symbol _c_int00 undefined 上网查询,第一个warning的可能原因是没有选择rts库,加入库rts2800.lib以后,错误变多: Warning: The project has no cmd file while the Text Linker is selected >> warning: creating output section .reset without SECTIONS specification >> warning: creating .stack section with default size of 400 (hex) words.    Use             -stack option to change the default size.   undefined                        first referenced  symbol                              in file ---------                        ---------------- _main                            D:CCStudio_v3.3C2000cgtoolslib ts2800.lib >>   error: symbol referencing errors - './Debug/testasm.out' not built 感觉是缺少.cmd所导致的。   在这种情况下强行run,在输出栏内会出现 Error: Can't write to data memory 0xE02, check memory config [-2184]  Can't Single Step Target Program: Can't write to data memory 0xE04, check memory config [-2184]    在查阅网上资料后,了解到CMD文件描述的是工程师对物理存储器管理、分配及使用情况。那么,我将CCS中自带的一些C28xCMD文件选一个导入进来行不行? 一开始我选择了inout.cmdbuild以后情况是2errors1warning,再换成mainapplication.cmd就只剩下两个error了。回过头去看那个warning,问题是 >> warning: creating .stack section with default size of 400 (hex) words. 原因是默认的.stack空间是 400 * 4 = 1600= 1.6K。而你申请的栈的大小超过1.6K时会出现警告提示。 网上的解决方法是在CMD文件前加入-stack xxx,观察两个CMD文件后,果然在后者前发现了-stack 400,其余差异也只有两处,大部分一样。至此,CMD文件的问题暂告一段落。 剩下两个errors,发现是rts库用错了,去除rts库以后,build结果为一个warning >> warning: entry point symbol _c_int00 undefined   关于这个问题,网上有两种解决方案 将“Begin:”换成“_c_int00:”,或者去掉Build Optionlinker-c,在CMD文件头部加上“-e Begin”,总之,目的是表明程序入口。 至此,无errorwarning,总算是编译过了。 然后是执行,还是Error: Can't write to data memory 0xE02, check memory config [-2184]  Can't Single Step Target Program: Can't write to data memory 0xE04, check memory config [-2184]  我开启了watch窗口,监视AR1DP,发现run以后,AR1成功变成了2,然后,反汇编窗口显示,程序执行到“3E8002  0016  INTR  INT7”也就是“.word 016h”出错,这是一句伪指令。查找相关问题,发现是CMD文件的问题。但是无论怎么改也不能解决问题。 暂时将这句注释掉,程序正常运行完。DP变为2