CCS 如何指定函数或变量在FLASH的存储地址
CCS使用指南

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 中的变量值

分享——如何在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:。
CCS5.5的详细操作说明

第十步:配置仿真器 1、FileÆNew->TargetConfigurationFile,如下图:
2、鼠标左键点击
,出现如下对话框,建议把 File name 选项修改为自己仿真芯片的型号,如下图:
3、点击
出现如下对话框,修改选项后如下图:
4、然后点击右边的
按钮,点击后会由高亮
#include "DSP28x_Project.h" #include"Function.h" //自定义函数头文件 #include"Variable.h" //自定义变量头文件
附件
void main(void) {
InitSysCtrl(); DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); InitCpuTimers(); InitGpio();
2、鼠标左键点击 Properties,出现如下对话框,并选择 BuildÆC2000 LinkerÆFile Search Path,如下图:
3、点击 出现如下对话框:
4、点击
出现如下对话框,并选择头文件路径位置 CpuTimer0_RAM\IQmath\include,如下图:
5、点击
后返回如对话框:
上次打开的工程
4、通过点击
选择刚才新建的文件夹,如下图:
5、点击
后,工程文件的存放路径就在
位置,如下界面:
6、点击
后,将会重新打开 CCS5.5 界面,如下图:
7、点击左边 打开
项目窗口,如下图:
第三步:新建一个工程 1、新建一个项目工程:ProjectÆNew CCS Project,如下图:
CCS的使用

第四章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分别调出标准工具条和编辑工具条.工具条上按钮的含义参见附录。
flash常量、变量和自定义函数

• • • • •
1.常量、变量和注释 (1)常量:常量有数值型、字符串型和逻辑型3种,它们的特点如下。 数值型:就是具体的数值。例如129、519和68.9等。 字符串型:用引号括起来的一串字符。例如“Flash 8”和“奥运北京2008”等。 逻辑型:用于判断条件是否成立。True或“1”表示真(成立),False或“0” 表示假(不成立)。逻辑型常量也叫布尔常量。 • (2)变量:变量可以赋值一个数值、字符串、布尔值和对象等。而且,还可 以为变量赋一个Null值,即空值,它既不是数值0,也不是空字符串,是什么 都没有。数值型变量都是双精度浮点型。不必明确地指出或定义变量的类型, Flash 会在变量赋值的时候自动决定变量的类型。在表达式中,Flash 会根据 表达式的需要自动改变数据的类型。 • (3)变量的命名规则:变量的开头字符必须是字母、下画线或美元符号,后 续字符可以是字母、数字等,但不能是空格、句号、保留字(即关键字,它 是ActionScript语言保留的一些标示符,例如play、stop、int等)和逻辑常 量等字符。
• (6)注释: • 2.运算符和表达式 • 运算符(即操作符)是能够提供对常量与变量进行运算的元件。表达式是用 运算符将常量、变量和函数以一定的运算规则组织在一起的式子。表达式可 分为3种:算术表达式、字符串表达式和逻辑表达式。在Flash 8 的表达式中, 同级运算按照从左到右的顺序进行。 • 使用运算符可以在“动作”面板程序编辑区内直接输入。也可以在“动作” 面板命令列表区的“运算符”目录下,双击其中一个运算符来输入。还可以 单击“动作”面板内辅助按钮栏中的【将新项目添加到脚本中】按钮,再单 击“运算符”菜单下的一个运算符。 • 字符串的比较是与字符相应的ASCII码大小的比较。 • 3.文本的3种类型和文本“属性”面板 • 文本的3种是静态文本、动态文本和输入文本。利用文本的“属性”面板中的
CCS5.4烧写FLASH教程

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#的变量通信

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)空间的定义

数据存储在程序存储器(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 的汇编指令也是不同的。