CCS 如何指定函数或变量在FLASH的存储地址
- 格式:pdf
- 大小:199.28 KB
- 文档页数:1
CCS使⽤指南CCSV5.4使⽤指南前⾔:MSP430单⽚机是德州仪器(TI公司)推出的16位超低功耗单⽚机系列,低功耗的特性及丰富多样化的外设使其越来越受学习者的青睐,在16位单⽚机市场中独领风骚。
俗话说“⼯欲善其事必先利其器”,为了更好地学习单⽚机,和进⾏嵌⼊式开发,⼀个好的调试平台是必须的。
CCS的全称是Code Composer Studio,它是美国德州仪器公司出品的代码开发和调试套件,供⽤户开发和调试DSP和MCU程序。
对于刚接触MSP系列单⽚机的初学者⽽⾔,⼀个实⽤的CCS使⽤指南往往能帮助其更快地熟悉和使⽤程序开发平台,更好地学习单⽚机。
从初学者和实⽤的⾓度出发,本⼩节以实例的形式演⽰如何在CCSV5.4平台上建⽴⼀个⼯程,如何进⾏程序编译和调试,并且将对菜单栏⾥的⼀些常⽤功能进⾏介绍。
⼀新建⼯程1.1⾸先打开CCSV5.4确定⼯作区间,然后点击File->New->CCS Project弹出如下对话框如图1.1图1.11.2 在 Project name中输⼊新建⼯程的名字,在此输⼊lesson24。
1.3 在 Output type中有两个选项:Executable和Static library,前者为构建⼀个完整的可执⾏程序,后者为静态库。
在此保留:Executable可执⾏程序1.4 在Location中选择存储路径,在此选择默认路径 F:\workspace_v5_4。
1.5 在Device部分选择器件的型号:在此Family选择MSP430;Variant选择MSP430GXXX Family系列,芯⽚选择MSP430G2553;Connection保持默认。
1.6 选择Empty Project(with main.c)即带主函数的空⼯程,点击Finish完成新⼯程创建.点击View->Project Explorer,新⼯程将显⽰Project Explorer 中,如图1.6所⽰图1.6⼆程序编译2.1 假设在程序编辑区编写了如下程序如图2.1图2.12.2 点击程序上⽅⼯具栏上的锤⼦按钮,进⾏程序编译.点View->Problems 弹出Problems窗⼝如图2.2,在该窗⼝中查看编译是否有错(注:如果锤⼦按钮没出来,点击右上⽅的CCS Edit,如图2.3)图2.2图2.3如图⽰,程序没有错误,如果程序有错,该窗⼝会显⽰错误信息,根据错误显⽰修改程序,重新进⾏编译,直⾄⽆错⽅可进⾏调试。
分享——如何在CCS仿真时查看外部SDRAM中的变量值
笔者日前在做项目时,发现在仿真过程中,不能查看存储于外部SDRAM中的Expressions Value:
通过TI E2E社区专家的指点,找到以下解决办法:
1.打开项目所用的GEL文件:
2.双击GEL Files列表中的对应文件,打开文件,因该文件默认属性为只读,所以此时还不能对其进行编辑。
3.在您安装CCS的路径(ccsv5\ccs_base\emulation\gel)下找到对应的文件,取消其只读属性。
本例所用文件为f28m35h52c1_m3.gel:
4.打开gel文件(本例为f28m35h52c1_m3.gel),找到F28M35H52C1_Memory_Map()函数:
函数中对Memery的配置代码如下:
5.在函数F28M35H52C1_Memory_Map()中的适当位置添加您需要的修改,如本例中,项目所用SDRAM的开始地址为0x60000000,大小为8M Bytes,所以增加以下修改:
GEL_MapAddStr(0x60000000, 0, 0x800000, "R|W", 0); /* External SDRAM */
修改完毕,保存文件,然后在GEL Files窗口中右键点击已修改的gel文件,点击“Reload”,此时就可以正常看到位于SDRAM中的变量值了。
问题解决,可以正常显示的Expressions Value:。
第四章CCS的使用利用CCS集成开发环境,用户可以在一个开发环境下完成工程定义、程序编辑、编译链接、调试和数据分析等工作环节.使用CCS开发应用程序的一般步骤为:(1)打开或创建一个工程文件.工程文件中包括源程序(C或汇编)、目标文件、库文件、连接命令文件和包含文件.(2)编辑各类文件.如头文件(.h文件),命令文件(.cmd文件)和源程序(.c,.asm文件)等.可以使用一般的编辑软件或CCS集成编辑环境进行各类文件编辑.(3)对工程进行编译.如果有语法错误,将在构建(Build)窗口中显示出来.用户可以根据显示的信息定位错误位置,更改错误.(4)排除程序的语法错误后,用户可以对计算结果/输出数据进行分析,评估算法性能.CCS提供了探针、图形显示、性能测试等工具来分析数据、评估性能.下图为典型CCS集成开发环境窗口示例。
整个窗口由主菜单、工具条、工程窗口、编辑窗口、图形显示窗口、内存单元显示窗口和寄存器显示窗口等构成。
工程窗口用来组织用户的若干程序构成一个项目,用户可以从工程列表中选中需要编辑和调试的特定程序;在源程序编辑/调试窗口中用户既可以编辑程序,又可以设置断点和针(对于C程序),调试程序;反汇编窗口可以帮助用户查看机器指令,查找错误(汇编程序探针、断点的设置应在反汇编窗口中进行);内存和寄存器显示窗口可以查看、编辑内存单元和寄存器.图形显示窗口可以根据用户需要直接或经过处理后显示数据;用户可以通过主莱单Windows条目来管理各窗口.在CCS窗口中单击鼠标右键都可以弹出与此窗口内容相关联的菜单.主菜单和工具条项的具体功能参见附录。
一、建立工程文件与Visual Basic、Visual C和Delphi等集成开发工具类似,CCS采用工程文件来集中管理一个工程.一个工程包括源程序、库文件、链接命令文件和头文件等,它们按照目录树的结构组织在工程文件中.工程构建(编译链接)完成后生成可执行文件.工程视窗显示了工程的整个内容.例如下图显示了工程codec_eg.mak所包含的内容.其中Include文件夹包含源文件中以”.include”声明的文件,Libraies文件夹包含所有后缀为”.lib”的库文件,Source文件夹包含所有后缀为”.c”和”.asm”的源文件.文件夹上的”+”符号表示该文件夹被折叠,”-“表示该文件夹被展开.一)创建、打开和关闭工程命令Project→New用于创建一个新的工程文件(后缀为”.mak”),此后用户就可以编辑源程序、链接命令文件和头文件等,然后加入到工程中.工程编译链接后产生的可执行程序后缀为”.out”.命令Project→Open用于打一个已存在的工程文件,例如用户打开位于”c:\ti\c5400\dsk\examples\dsp”目录下的codec_eg.mak工程文件时, 工程中包含的各项信息也被载入,其工程窗口如前图所示.命令Project→Close用于关闭当前工程文件.二)在工程中添加/删除文件以下任一操作都可以添加文件到工程中:①选择命令Project→Add File to Project …②在工程视图中右键单击调出关联菜单,选择Add File…在工程中源文件、链接命令文件及库文件(Libraries)需要用户指定加入,头文件(Include 文件)通过扫描相关性(Scan All Dependencies)自动加入到工程中.在工程视图中右键单击某文件,从关联莱单中选择”Remove from project”可以从工程中删除此文件.三)编辑源程序CCS集成编辑环境可以编辑任何文本文件(对C程序和汇编程序),可以打开多个窗口或对同一文件打开多个窗口,进行多窗口显示.点击主莱单命令File→New→Source File弹出编辑窗口进行编辑.四)工具条和快捷键命令View→Standard Toolbar和View→Edit Toolbar分别调出标准工具条和编辑工具条.工具条上按钮的含义参见附录。
CCS5.4烧写FLASH教程(以TMS320F2812为例)一、前期文件准备如上图所示,CCS5.4环境下烧写FLASH必须将以上文件添加到工程文件夹中,DSP28xxx_CodeStartBranch.asm和DSP28xxx_SectionCopy_nonBIOS.asm可以将FLASH中的部分内容移植到RAM中,增加运行速度。
二、具体步骤1、如下图所示,打开工程设置,在general选项卡中,将configuration由Debug[Active]改为Release[Active],并将Linker command filer改为下图所示的CMD 文件。
2、在Predefined Symbols 选项卡中添加FLASH 预定义符号。
3、在Debug 选项中,修改FLASH下载基本设置,根据实际板子情况,修改晶振OSCCLK。
(实验室里的2812板子晶振为20MHz,而28335板子的晶振为30MHz)4、在主函数中添加一下代码:#ifdef FLASH// Copy time critical code and Flash setup code to RAM// The RamfuncsLoadStart, RamfuncsLoadEnd, and RamfuncsRunStart// symbols are created by the linker. Refer to the linke MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd,&RamfuncsRunStart);// Call Flash Initialization to setup flash waitstates// This function must reside in RAMInitFlash(); // Call the flash wrapper init function#endif并且在主函数前面定义变量:extern Uint16 RamfuncsLoadStart;extern Uint16 RamfuncsLoadEnd;extern Uint16 RamfuncsRunStart;最终效果如下:5、打开工程文件夹中的DSP28_SysCtrl.c,在程序开头添加以下语句:#pragma CODE_SECTION(InitFlash, "ramfuncs");并且检查此C文件中有没有定义InitFlash函数,如果没有,添加以下代码:void InitFlash(void){EALLOW;FlashRegs.FOPT.bit.ENPIPE = 1;FlashRegs.FBANKWAIT.bit.RANDWAIT = 3;//5;FlashRegs.FBANKWAIT.bit.PAGEWAIT = 3;//5;FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF;FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF;EDIS;asm(" RPT #6 || NOP");}6、最后在F281x_nonBIOS_flash.cmd中添加以下代码:ramfuncs : LOAD = FLASH_CD,RUN = RAM_H0,LOAD_START(_RamfuncsLoadStart),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),PAGE = 0最终效果如下:三、编译烧录1、Bulid工程文件,修改相应的错误。
Flash与C#.NET的变量相互通信Flash发送到C# :在Flash中设计一个按钮,事件为:btn.onRelease = function(){fscommand("Send Action", "");};在c#中插入Shockwave Flash Object 对象movie的属性就是Flash[SWF]影片的地址。
在Shockwave Flash Object 的FSCommand 事件中插入:if(mand == "Send Action"){MessageBox.Show("调用FLASH按钮事件成功"+e.args) ;}解释:从Flash中发送函数Send Action 另加一个参数txt 到C#中!而在C#中的FSCommand 事件中判断所发送的函数名:if(mand == "Send Action")如果要获取参数e.args 就是txt 的参数值!C#发送到Flash :在c#中放入一个按钮,事件:private void button1_Click(object sender, System.EventArgs e){string flashData = "一二三四五六七";axShockwaveFlash1.SetVariable("txt",flashData);}而在Flash中就写两句代码就可以了:var mo:Object=new Object();mo.watch("txt");这时在Flash中声明了一个娈量txt 值为"一二三四五六七"就被这两句代码给接收了!你可以再Flash中多添加一个按钮trace(txt) 试试!import Flash.external.ExternalInterface;function loadAndPlayVideo(uri:String):Void{videoPlayer.contentPath = uri;}ExternalInterface.addCallback("loadAndPlayVideo", null, loadAndPlayVideo);/************************************************************************************************* 函数解释****************************************************************************************public static addCallback(methodName:String, instance:Object, method:Function) : Boolea n将ActionScript 方法注册为可从容器调用。
数据存储在程序存储器(flash)空间的定义(1)flash 常量:#include//须增加的头文件const prog_uchar FlashConst = 3;//定义uchar 型的常量n 定义在flash 里(flash 常量)unsigned char RamVar; //定义无符号整型变量(Ram 变量)RamVar = pgm_read_byte(&FlashConst); //读取flash常量到ram 变量(2)flash 一维数据:#includeconst prog_uchar s[5] = { 1, 2, 3, 4,5 };unsigned char RamVar; //定义无符号整型变量(Ram 变量)RamVar = pgm_read_byte( &s[1] ); //读取s[1]的值到RamVar, or RamVar = pgm_read_byte(s+1 );(3)flash 多维数据:#includeconst prog_uchar s[4][16] = { {14, 4,13, 1, 2,15,11, 8, 3,10, 6,12, 5, 9, 0, 7 },{ 0,15, 7, 4,14, 2,13, 1,10, 6,12,11, 9, 5, 3, 8 },{ 4, 1,14, 8,13, 6, 2,11,15,12, 9, 7, 3,10, 5, 0 },{15,12, 8, 2, 4, 9, 1, 7, 5,11, 3,14,10, 0, 6,13 }};unsigned char RamVar[4],[16]; //定义无符号整型变量(Ram 变量)register char i, j;for(i=0; i<4; ++){for(j=0; j<16; j++){RamVar[i][j] = pgm_read_byte( &s[i][j]); //读取数组s 的值到RamVar}//end for 2}//end for 1(4)扩展部分avr 对ram和flash 是独立编址的,ram 是按8 位编址,而flash 却按16 位编址,读ram 和读flash 的汇编指令也是不同的。
实验一 CCS使用和数据存储实验一、实验目的1. 掌握CCS的使用2. 掌握TMS320C54X 程序空间的分配;3. 掌握TMS320C54X 数据空间的分配;4. 能够熟练运用TMS320C54X 数据空间的指令。
二、实验设备计算机,CCS 3.1版软件,DSP仿真器,E300实验箱,DSP-54XP CPU板。
三、实验步骤与内容1. 在进行DSP实验之前,需先连接好仿真器、实验箱及计算机,连接方法如下所示:2. E300 底板的开关SW4 的第1位置ON,其余位置OFF。
其余开关设置为OFF。
3. 上电复位在硬件安装完成后,确认安装正确、各实验部件及电源连接无误后,启动计算机,接通仿真器电源,此时,仿真器上的“红色指示灯”应点亮,否则DSP开发系统与计算机连接存在问题。
4. 运行CCS程序1) 待计算机启动成功后,实验箱220V电源置“ON”,实验箱上电2) 启动CCS3.1,进入CCS界面后,点击“Debug—Connect”3) 此时仿真器上的“绿色指示灯”应点亮,CCS正常启动,表明系统连接正常;否则仿真器的连接、JTAG 接口或CCS 相关设置存在问题,这时需掉电检查仿真器的连接、JTAG 接口连接是否正确,或检查CCS相关设置是否存在问题。
5. 成功运行CCS 程序后,首先应熟悉CCS的用户界面;6. 学会在CCS环境下创建工程文件、添加程序文件、编写程序、编译、装载、调试,学习如何使用观察窗口等。
7. 用“Project\open”打开“\normal\ 01_mem\ mem.pjt”.编译并装载“\ 01_mem\Debug\mem.out”8.用“Edit”下拉菜单中的“Memory/Fill”编辑内存单元,参数设置如下图:单击“OK”此时以0x1000 为起始地址的16个内存单元被修改成:0x00099.用“View”下拉菜单“Memory”观察内存单元变化,输入要查看的内存单元地址,本实验要查看0x1000H~0x100FH 单元的数值变化,输入地址0x1000H;单击“OK”如下图所示:10. 点击“Debug\Go main”进入主程序,在程序中“加软件断点1”和“加软件断点2”处施加软件断点。
CCS中内存分配是嵌入式软件开发中的重要环节,它直接关系着软件的性能和稳定性。
本文将从CCS中内存分配的基本原理、常见的内存分配函数、内存分配的注意事项等方面进行详细的介绍,帮助读者更好地理解和应用CCS中的内存分配技术。
一、内存分配的基本原理在嵌入式系统中,内存分配是指按照程序的需要,从系统的内存池中分配一定大小的内存空间给程序使用。
内存分配的基本原理是将内存空间划分为不同大小的内存块,程序可以根据需要申请和释放这些内存块。
在CCS中,通常使用动态内存分配的方式来进行内存的申请和释放,主要涉及到的是堆内存和栈内存的分配。
二、常见的内存分配函数在CCS中,常见的内存分配函数包括malloc、calloc、realloc和free等。
其中,malloc函数用于分配指定大小的内存空间,calloc函数用于分配指定数量和大小的内存空间并初始化为零,realloc函数用于重新分配已经分配的内存空间的大小,而free函数用于释放之前分配的内存空间。
这些内存分配函数是CCS中内存管理的核心函数,程序员可以根据程序的需要选择合适的函数来进行内存分配和释放操作。
三、内存分配的注意事项在CCS中进行内存分配时,需要注意以下几点:1. 内存泄露:程序在使用完内存后需要及时释放,否则会造成内存泄露,导致系统资源的浪费和程序性能的下降。
2. 内存碎片:频繁地进行内存分配和释放会导致内存碎片问题,影响系统的内存利用率和性能。
3. 内存越界:程序在使用内存时需要注意不要越界访问,否则会导致程序崩溃或者数据损坏。
4. 内存对齐:一些硬件体系结构对内存的访问有一定的要求,程序在进行内存分配时需要考虑到内存对齐的问题。
四、内存分配的优化策略为了提高程序的性能和稳定性,可以采取以下一些内存分配的优化策略:1. 内存池管理:预先分配一块固定大小的内存池,在程序初始化时进行内存的分配和管理,程序在运行过程中直接从内存池中申请和释放内存,减少内存分配和释放的开销。
使用CCSV4加TDS560USB PLUS仿真器读取DSP中Flash的程序和数据一在CCSV4中设置DSP的型号1 确定需要读取Flash中程序和数据的DSP型号(可以直接看目标板上与Jtag接口连接的DSP表面)把仿真器Jtag接口连到目标板,并把仿真器的USB接口连接到电脑,打开目标板电源。
2 打开CCSV4软件5点击上图菜单栏的View 把鼠标移到T arget Configurations 上点击鼠标左键在软件界面中出现下图的Target Configurations对话框6 点击界面上方菜单的T arget把鼠标移到New T arget Configuration上点击鼠标左键出现下面对话框点击Finish(可以修改File name 中的文件名和保存文件路径,可以不修改使用默认)7出现下面对话框出现xml一栏点击Connection右边的下拉式菜单(点击向下的箭头)8 出现下面的选择对话框在其中选择WintechDigital TDS560USB PLUS Emulator9稍等一下出现下面的界面把鼠标移到Device 的右下的框框中看到DSP的型号,找到自己目标板上DSP的型号,在该型号前的方框中打上√号,然后点击右边的Save10 Save按钮变成灰色说明文件已经保存然后把鼠标移到上图界面左面的User Defined 下面的NewT argetConfiguration(如果没有,就点击User Defined前面的+将会出现NewT argeConfiguration)上点击鼠标右键,再把鼠标移到Set As default上点击鼠标左键。
接着把鼠标移到NewT argetConfiguration上点击鼠标右键,再把鼠标移到Launch Selected Configuration上点击鼠标左键。
11 点击CCSV4软件界面上方菜单的View把鼠标移到Debug 上点击鼠标左键出现下面的界面12 把鼠标移到上图Debug下方的框框中找到Disconnect Device点击鼠标右键再点击Connect T arget。
ccs使用说明CCS使用说明CCS(Code Composer Studio)是德州仪器(Texas Instruments)开发的一款集成开发环境(IDE),用于嵌入式系统的软件开发。
本文将介绍CCS的安装、配置和使用方法,帮助用户快速上手。
一、安装CCS1. 下载CCS安装包,并解压缩到指定目录。
2. 运行安装程序,并按照提示进行安装。
3. 安装完成后,启动CCS。
二、配置CCS1. 打开CCS后,选择"Workspace Launcher",选择一个工作空间,用于存储项目文件。
2. 在"Welcome"界面,点击"New Project"创建一个新项目。
3. 在弹出的对话框中,选择目标设备的型号和系列。
4. 配置项目属性,包括编译器选项、源文件、链接器选项等。
5. 点击"Finish"完成项目配置。
三、使用CCS1. 创建源文件:在项目资源管理器中,右键点击源文件夹,选择"New",然后选择"Source File",输入文件名并保存。
2. 编写代码:在新建的源文件中,编写嵌入式软件代码。
3. 编译代码:点击工具栏上的"Build"按钮,或使用快捷键Ctrl+B,进行代码编译。
4. 调试程序:点击工具栏上的"Debug"按钮,或使用快捷键F11,进入调试模式。
5. 设置断点:在源代码中选择需要设置断点的行,右键点击并选择"Toggle Breakpoint"。
6. 运行程序:点击工具栏上的"Resume"按钮,或使用快捷键F8,运行程序。
7. 观察变量:在调试模式下,可以在"Expressions"视图中观察和修改变量的值。
8. 单步执行:在调试模式下,使用工具栏上的"Step Into"、"Step Over"、"Step Return"按钮,或使用相应的快捷键,对程序进行单步执行。
【经验分享】KL25在MDK中将函数指定到flash地址一,经验分享描述在之前的经验分享中写了些在KE02下,CW,IAR以及keil的编译环境中,如何定义constant到指定的flash地址。
但是实际上,大家在使用我们kinetis的过程中,可能也希望能够灵活的将某个函数直接定义到指定的flash地址,这样,如果改变这个函数,实际上,只需要改变函数所在的flash,而不需要更新所有的flash。
所以,为了方便大家操作,我们论坛里已经推出了在CW以及IAR下,如何指定函数到具体的flash地址,本文就讲解下,在MDK的环境下如何实现指定函数到具体的flash地址。
二,经验分享在MDK环境下实现该经验分享要在MDK中实现函数的绝对地址指定,一共有两点需要注意:scatter文件中函数绝对地址的开辟以及程序中将函数定义到定义的绝对地址处。
下面来仔细讲解这两点1.在.sct文件中定义函数要存放的地址.sct文件可以在工程的UV4Build文件夹中找到,找到后可以拖进MDK界面中即可以打开,可以使用如下格式定义这个地址:ER_IROM2 绝对地址 FIXED{*.o (段地址名)}例如,在本次试验中,希望将函数定义到flash地址:0x0001E000这个地址,靠近flash空间的尾部。
实际我们的定义如下图:另外,每次编译之后,编译器都会重新生成.sct文件,所以为了避免写的代码被刷掉,需要做一些配置,禁止使用编译器每次生成的.sct文件,而是使用指定的.sct 文件。
修改方法:project->options for target->linker, 不勾选 use memory layout from target dialog. 如下图所示:这样,你每次修改后的platinum_flash.sct在编译之后就不会被改变掉了。
2. 在主函数中定义函数接下来要做的就是将所定义的函数放到1里面所定义的flash地址段中。
【经验分享】KL25在MDK中将函数指定到flash地址一,经验分享描述在之前的经验分享中写了些在KE02下,CW,IAR以及keil的编译环境中,如何定义constant到指定的flash地址。
但是实际上,大家在使用我们kinetis的过程中,可能也希望能够灵活的将某个函数直接定义到指定的flash地址,这样,如果改变这个函数,实际上,只需要改变函数所在的flash,而不需要更新所有的flash。
所以,为了方便大家操作,我们论坛里已经推出了在CW以及IAR下,如何指定函数到具体的flash地址,本文就讲解下,在MDK的环境下如何实现指定函数到具体的flash地址。
二,经验分享在MDK环境下实现该经验分享要在MDK中实现函数的绝对地址指定,一共有两点需要注意:scatter文件中函数绝对地址的开辟以及程序中将函数定义到定义的绝对地址处。
下面来仔细讲解这两点1.在.sct文件中定义函数要存放的地址.sct文件可以在工程的UV4Build文件夹中找到,找到后可以拖进MDK界面中即可以打开,可以使用如下格式定义这个地址:ER_IROM2 绝对地址 FIXED{*.o (段地址名)}例如,在本次试验中,希望将函数定义到flash地址:0x0001E000这个地址,靠近flash空间的尾部。
实际我们的定义如下图:另外,每次编译之后,编译器都会重新生成.sct文件,所以为了避免写的代码被刷掉,需要做一些配置,禁止使用编译器每次生成的.sct文件,而是使用指定的.sct 文件。
修改方法:project->options for target->linker, 不勾选 use memory layout from target dialog. 如下图所示:这样,你每次修改后的platinum_flash.sct在编译之后就不会被改变掉了。
2. 在主函数中定义函数接下来要做的就是将所定义的函数放到1里面所定义的flash地址段中。