DSP TMS320F2812验证平台制作日志2

今天的任务是,能够写一段汇编程序,并在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.3\C2000\cgtools\bin\cl2000" -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.3\C2000\cgtools\bin\cl2000" -@"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.3\C2000\cgtools\lib\rts2800.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

你可能感兴趣的:(毕业设计)