ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:386.97KB ,
资源ID:9558116      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9558116.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ccs33中建立编译调试工程及常见错误讲解.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ccs33中建立编译调试工程及常见错误讲解.docx

1、ccs33中建立编译调试工程及常见错误讲解Part1:ccs3。3中新建一个DM6437的示例工程1、连接好板子,将板子上仿真器的usb口插到电脑上,启动ccs后,ccs会去获取板子信息并在打开的文件目录中自动生成一个文件,如图所示:笔者使用的是6437的板子2、用filenew选择建立一个dsp/bios文件在打开的对话框中选择你使用的板子的型号,如下图:3、这个时候ccs为我们建立了一个bios文件,以图表显示,里面按照所选板子的类型添加相应的硬件和其他模块。保存这个文件到工程目录下先,文件类型为tcf。4、保存这个文件的同时,ccs按照bios中的配置在当前目录下自动生成了一个cmd文件

2、.此时将tcf文件和这个cmd文件同时添加到工程中,使用5、然后需要修改一个编译选项,点击下图所示选项进去:6、 打开后在编译选项对话框总会看到一个命令行,其中最后一句是-mv6400,因为用的是6467的板子,所以这个选项要修改成 -mv64+;否则编译会报错:编译选项不正确;但并非所有类型的板子都要改,这个只针对型号为64+的板子。7、file-newsource file建立一个c源文件,保存并加入到工程中。以下是示例程序:#include std。h#include string.h#include stdio。hInt main(Int argc, String argv)/main

3、函数的类型必须这样写 unsigned int i; unsigned int sum=0; for(i = 0; i warning: entry point symbol _c_int00 undefinedundefined first referenced symbol in file- -_printf E:WorkContentprojectExampleTestDebugtest。obj error: symbol referencing errors - ./Debug/Test.out not built2)如果想要printf正确输出信息,cmd文件中必须指定heap的大小

4、,即cmd文件这样写:cstack 0x00001000 / Stack Size */-heap 0x00001000 / Heap Size */前面这三项必不可少MEMORY L2RAM: o = 0x10800000 l = 0x00020000 DDR2: o = 0x80000000 l = 0x10000000SECTIONS .bss L2RAM .cinit L2RAM 。cio L2RAM 。const L2RAM 。data L2RAM 。far L2RAM 。stack L2RAM .switch L2RAM 。sysmem L2RAM .text L2RAM 。ddr

5、2 DDR2另外,我在使用dsp/bios自动生成的cmd文件进行编译的时候,不会报错误或警告,但是printf就是不能输出任何东西,后来解决了,具体解决方法见后面的:“ccs编译中常见的编译错误及解决方法”的第4部分8、compile-rebuild all;无错误提示。此时项目就建立并编译好了.下面就要把程序加载到板子上运行了。9、首先要先连接板子,点击debug-connect10、如果连接成功,会看到下面的效果:未连接时:连接成功后:连接成功的同时,ccs会打开一二Disassembly窗口,如下图:11、加载程序吧,程序编译后,会在当前目录的Debug目录下生成一个.out的文件,此

6、例中的文件是“6467EXAM。out”;通过fileload Program加载这个文件加载后,Disassembly窗口中会有所变化,如下图:12、DebugRun去吧提示:1 Ccs的项目不支持创建在中文目录下。2 项目移动到其他文件夹下面时,需要修改。pjt中的Project SettingsProjectDir=E:WorkContentprojectExample6467EXAM” 到新的目录。很简单的一个例子。希望能帮助入门的朋友。Part2:ccs中工程的创建-改变工程目录时注意的细节以6437为例:1、在安装目录下,打开如下路径下的示例工程:video_loopbackC:C

7、CStudio_v3。3boardsevmdm6437_v2testsvideo_loopbackOk,如果板子没问题,肯定能编译成功的。2、有时候我们需要搬移自己的工程到别的目录或别的机器上去,此处,将这个工程拷贝到F盘中去,再重新打开,编译,你会发现此时提示以下错误:main.c, line 12: fatal error: could not open source file ”evmdm6437.h”tvp5146.h”, line 12: fatal error: could not open source file evmdm6437_i2c.h”video_loopback_te

8、st.c”, line 12: fatal error: could not open source file evmdm6437_dip.h”找不到对应的头文件了?并且你在工程中也打不开这几个文件,打开时会提示:3、看来ccs在找这些个头文件时,没有从工程中获取正确的路径信息,打开项目文件,此处是:video_loopback。pjt,会发下以下几行:Compiler” Settings: DebugOptions=g -q -fr”.Debug -i”。.include d_DEBUG” mv6400+Compiler Settings: ReleaseOptions=-q o3 -fr.

9、Release” i。include mv6400+看意思是说,包含的头文件的路径是在。.。include目录下面;如果这个项目在原来默认的目录下,那么是正确的.因为的确能看到所谓的include文件夹,他们就是在ti默认安装目录下面的.但是由于我们改变了项目的路径,那么这些个目录肯定是不对的,所以ccs无法找到这些个文件了。4、那是不是修改过来就好了.答案是肯定的也是否定的,如果我们找到这个include目录,并写到pjt文件中,如下所示:”Compiler” Settings: ”Release”Options=-q -o3 -fr”.Release” -i”C:CCStudio_v3.3

10、boardsevmdm6437_v2include -mv6400+那么肯定是可以的。但是如果我们拷贝到别的机器上,而别的机器上的开发板驱动或ccs的安装路径和我们不一样的话呢?难道重新再找一遍再写一遍??5、可能你已经想到了,使用相对路径,那么我们先看看ccs都在我们环境里面注册了那些环境变量:5。1、打开cmd,切换到c盘.然后输入以下命令:seta.txtSet命令是查看系统中注册的环境变量的.操作符是用来重定向用的,可以将查询到的结构重定向到一个txt文件中。所以上面的命令是那么写的。5。2打开a。txt.会看到一堆的环境变量。其中有这么几个是ccs相关的:BIOSDVSDK_INST

11、ALL_DIR=C:dvsdk_1_01_00_15BIOSUTILS_INSTALL_DIR=C:dvsdk_1_01_00_15biosutils_1_00_02BIOS_INSTALL_DIR=C:/CCStudio_v3.3/bios_5_31_07BSL_EVMDM6437_INSTALLDIR=C:CCStudio_v3。3boardsevmdm6437_v25。3第四个就是我们想要的目录了。那么现在修改pjt文件中的那两行内容为:Compiler” Settings: DebugOptions=g -q fr”.Debug” -iBSL_EVMDM6437_INSTALLDIR%

12、/include” d_DEBUG” mv6400+”Compiler Settings: ”ReleaseOptions=-q -o3 -fr.Release” -i”BSL_EVMDM6437_INSTALLDIR%/include” -mv6400+5.4编译,连接成功。并且再也不怕移来移去了。5。5注意:有时候可能还有一个地方需要该:Project SettingsProjectDir=E:WorkContentprojectExamplevideo_loopback指向项目文件的绝对路径.而项目文件中的相对路径都是基于该路径。Part3:ccs编译中常见的编译错误及解决方法1 fas

13、tcopy 提示找不到ialg.h等头文件,打开cmd文件后看到目录包含命令有: -i”%XDAIS_INSTALL_DIR%/packages但是系统中没有XDAIS_INSTALL_DIR这个环境变量,于是找到xdais的安装目录:C:dvsdk_1_01_00_15xdais_5_21然后添加系统环境变量:变量名:XDAIS_INSTALL_DIR变量值:C:dvsdk_1_01_00_15xdais_5_21注销或重启或者kill掉explorer后在运行即可2 ccs提示:could not open source file ”ti/sdo/fc/acpy3/acpy3。h”。和问题

14、2相似,在cmd文件中找到另一条包含目录命令:-i”%FC_INSTALL_DIR%/packages”同样在系统环境变量里面没有这个东西.因为acpy3是属于framework component 的东西,所以找到fc的安装目录C:dvsdk_1_01_00_15framework_components_1_20_03添加系统环境变量:变量名:FC_INSTALL_DIR变量值:C:dvsdk_1_01_00_15framework_components_1_20_033、 在程序中查到其用到了FCPY_IFCPY这个变量:IFCPY_Fxns fxns = (IFCPY_Fxns )&FC

15、PY_IFCPY;但是只在整个工程的。c 或。h文件中找到如下FCPY_IFCPY的定义:extern far IFCPY_Fxns FCPY_IFCPY; 在当前文件前面这样定义的按上面的定义,这个FCPY_IFCPY肯定在其它文件中有定义的,但是并没有找到。最后在命令连接文件.cmd文件中找到如下一行语句:_FCPY_IFCPY = _FCPY_TI_IFCPY; 而且找到 FCPY_TI_IFCPY 定义如下:IFCPY_Fxns FCPY_TI_IFCPY = / module_vendor_interface */ IALGFXNS, / IALG functions */ FCPY

16、_TI_control, /* Control function / FCPY_TI_doCopy /* The fcpy fxn /;因此推断,cmd文件中的这个命令将FCPY_IFCPY FCPY_TI_IFCPY两个东西等同起来了,前面的下划线应该是格式需要。有熟悉这个的朋友给解释下。4、使用dsp/bios时,printf函数默认不起作用. 这是因为bios中没有动态分配heap的原因,默认情况下mem对heap的分配如下图所示:1)很明显看到这里选择的是:no dynamic memory heaps但是取消选中后,会发现下拉框中并没有任何选项让选择把heap放在哪里.如下图所示:并

17、且会之前弹出一个对话框:大概意思是让你去重新配置一块独立的内存块。2)另外还有一个地方需要注意,就是ddr2的设置。打开ddr属性,会发现:创建heap选项居然是灰色的。.。.那我去哪里创建heap呢??3)下面是正确的步骤:3。1)首先打开MEM的属性对话框,将no dynamic memory heaps 复选框取消,并按 应用按钮后,点击确定按钮。如下图所示:3.2)这时再去打开ddr2的属性对话框:你会发现,这个时候“create a heap in this memory”项可以用了,点选此复选框。然后输入适当的大小,并点击应用 后再点确定 按钮退出。如下图所示:3.3)此时,我们已

18、经为heap分配了一段数据空间了,但是还得回到mem属性对话框中:此时就发现,原本只有一项MEM_NULL的下拉列表中多了一项DDR2;选中DDR2,segment for dsp/bios objects 和 segment for malloc()/free()都选中ddr2。然后点应用、确定按钮后退出。再去试试程序。Printf函数可以用了。5、内存分配:MEM_alloc:如何指定分配对象的位置?比如分配到ddr中或sram中当时的Dm6467内存分配:然后定义变量:fcpyInput = (int )MEM_alloc(1, sizeof(int)INPUTSIZE, 8);fcpy

19、Output = (int )MEM_alloc(0, sizeof(int)INPUTSIZE, 8);调试的时候结果是这样的:经查资料得知,mem_alloc中第一个参数,指定的是内存分配的位置;其值与系统内存heap的定义相关,其具体使用如下: 1)如下图所示,在ddr中建立一个heap,并指定heap_identifier_label)为“_EXTERNALHEAP”,这个名字可以自己随便起.2)然后在程序中,按照heap label定义一个变量,变量名必须和heaplabel下划线后面的名字一样,并且类型是external的,如: extern int EXTERNALHEAP;3)

20、编译的时候,编译器会自动将这个整形变量和heap label联系起来.如果不写“extern”关键字,不仅编译器不能将其和heap label联系起来,而且连接的时候会提示“EXTERNALHEAP”被双重定义了。因此程序中不能定义和heap label 名字相同的变量。如果有,就必须是extern类型的,编译器会自动将其指向你创建出来的那段heap。4)最后mem_alloc就可以这样写了:fcpyInput = (int )MEM_alloc(EXTERNALHEAP, sizeof(int)INPUTSIZE, 8);6、程序编译连接通过,但是在执行的时候提示”CIO BUFFER”类似

21、的错误:我在这里是因为在bios为iram分配空间地址时由于来回修改,结果导致出现的错误。后来重新按照标准修改bios的tcf文件后,不会再有这个错误了.7、Heap的作用,内存分配中指定段的作用Heap相当于程序执行空间,如果ddr有100K,如果划分20k为heap,那么程序只能在这20k的空间中运行,我们声明的变量、数据均放在所声明的heap中,但是heap的位置可以有多处,例如dm6437中有128k的L2,有256k的DDR(假设),我们分别在L2和DDR中创建50k的heap,那么我们可以在创建对象时指定创建的位置。这点和计算机运行程序是截然不同的.段定义的作用:段定义了程序装入的

22、位置,即存放的位置,这个和运行时的位置是不一样的,从连接后的map文件中可以看得出来,程序装入的位置均在heap定义地址的后面。即heap是用来运行程序的,其它地方是用来放程序和数据的,并且是根据我们定义的段的位置存放。一般来说,调试程序的时候,我们将所有的程序和数据均指定存放到DDR中,这样读写方便,无需掉电时保存;现在加入DDR的起始地址是0x8000 0000 ,结束地址是0x8800 0000;在其上定义的heap的大小是0x0000 8000;并设定所有程序或数据均存放到DDR中,并假定程序中定义了一个变量temp;编译连接程序后,我们会看到,map文件中出现的程序或数据装入的地址均在0x8000 8000地址的后面,而运行时会发现temp变量的地址在0x8000 0000 和0x8000 7FFF之间,正好位于我们定义的heap的地方。Heap的英文意思是“堆,但是这里的“堆”和c+程序中“堆的概念似乎并不一样,叫它“可执行的内存空间”更合适。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1