DSP编程技巧---在main函数运行之前,你需要知道的

发布者:心有归属最新更新时间:2014-09-30 来源: 互联网关键字:DSP  编程技巧  main函数 手机看文章 扫描二维码
随时随地手机看文章
  在一个程序能正常运行之前,相关的运行时(run-time)环境首先要正确建立。在CCS软件编程的情况下,的实时运行库RTS的源程序库rts.src中包含了名为boot.c或者boot.asm的启动程序(在一些TI的例子里,则使用了CodeStartBranch.asm来完成启动工作,它会自动调用库文件中的boot.asm),用于在系统启动后调用c_int00函数,并通过其中的操作来完成运行时环境的建立。通常情况下,c_int00函数位于rts2800.lib库函数中的boot.obj(即TI官方编译boot.c或者boot.asm生成的目标文件)下,这也就是为什么我们在C28x编程的情况下通常要把rts2800.lib库函数加入工程中的原因(其它器件则根据型号、系列添加对应的库文件;否则就会出现初学者经常遇到的找不到boot.c之类的错误)。

  注:小型内存模型含义是已初始化的段被链接至低 64Kw(字)可寻址空间内的非易失性内存,它使用rts2800.lib。对于定点器件,如果使用大内存模型(超过64K字),则需要使用库 rts2800_ml.lib;对于含有FPU的器件,用于标准 C 语言代码的为 rts2800_fpu32.lib,或者用于 C++ 代码的 rts2800_fpu32_eh.lib(没有针对浮点器件的较小内存模型库)。在 CCS v5/v6 中,有一个针对库的“自动”设置,此设置可据项目的设置(例如,浮点支持和内存模型选择)让 CCS 自动选择正确的库来使用。对于 /BIOS 项目,/BIOS 将负责将所需的库包括在内,我们用户不需要在项目中包含任何运行支持库。

  如果在链接器选项中我们使用了--ram_model或者--rom_mode(具体含义请参考http://www.eepw.com.cn/article/249328.htm),则_c_int00函数自动被配置为整个程序执行的入口点。此外,在CPU复位之后(相当于一个软件或者硬件的复位中断),我们也可以把整个程序的入口点指向_c_int00,例如:

  .def _Reset

  .ref _c_int00

  _Reset: .vec _c_int00, USE_RETA

  则在执行CPU复位操作之后,系统自动跳转到_c_int00函数。

  在c_int00函数中完成的功能主要有:

  1. 设置/初始化CPU的状态和配置寄存器。

  2. 为系统的栈定义一个.stack段(关于各个段的含义,请参考http://www.eepw.com.cn/article/256732.htm),然后建立并初始化栈的指针。其中,栈需要被分配在单一的、连续的一段地址中,起始点为低地址,终点为高地址,栈指针SP的初始化值指向栈的顶端。

  3. 从初始化表中,把数据复制到.bss段中,从而初始化全局变量。如果使用了—ram_model选项在加载程序时就初始化变量,则在程序运行前,会首先运行一个加载程序来完成变量的初始化。如果使用了--rom_model选项,则使用.cinit中的运行时初始化表来完成变量的初始化。

  默认情况下,链接器使用--rom_model选项,在程序运行时完成变量的自动初始化。在程序运行时,.cinit段和其它初始化的段会被一起加载到内存中,从而使得C/C++的启动程序可以自动把.cinit中的初始化表格复制到.bss段中,完成全局变量的自动初始化。这种方法的特点在于,初始化的表格可以被存放在更加便宜且大容量的ROM或者FLASH,而不是RAM中,并且可以在程序启动时再自动加载到RAM中,这种方法在我们把程序烧写到FLASH中再运行的时候是经常使用的。关于Flash运行的更多信息,可以参考TI的的一个应用报告:http://www.ti.com.cn/cn/lit/an/zhca550l/zhca550l.pdf,从 TMS320F28xxx 数字信号处理器 () 上的内部闪存存储器上运行一个应用。

  如果使用—ram_model的链接器选项,则链接器会在.cinit段的开头中配置STYP_COPY位(0010h),告诉加载器不要把.cinit段自动加载到内存中,并且把cinit这个符号设置为-1(默认情况下符号cinit指向初始化表格),从而向启动程序表明,内存中没有初始化表格,在启动时不需要执行运行时的初始化工作。在这种情况下,需要我们自定义一个加载程序,从而在加载程序时就完成初始化,它的主要内容包括:

  ü 在目标文件中检测.cinit段的存在;

  ü 在.cinit段的开头配置STYP_COPY位,使得该段不会被自动复制到内存中;

  ü 需要我们理解并正确遵循初始化表格的格式。

  这三个注意点貌似比较复杂,不过有读者可能会问,我们在直接把程序通过JTAG下载到DSP的RAM中并运行的时候,貌似并没有配置这么麻烦的步骤啊?那是因为CCS编程环境已经帮我们承担了这一重要任务,在我们用仿真器来调试、运行的时候经常会使用到这个方式。

  注意:在C/C++程序运行之前,一些全局变量必须被赋予初始值。在ANSI/ISO C中,未明确初始化的全局和静态变量在程序执行前都需要被初始化为0,C/C++的编译器并不会对它们进行自动初始化。在把程序加载到RAM而不是ROM中的情况下,比较方便的方法是直接把.bss段初始化为0。

  而在C28x DSP的编程中,如果一个全局变量的初值并不会对程序的运行结果产生任何影响,则我们一般不用考虑给它们赋初值,因为编译器会使用.cinit段中的初始化表格来初始化变量,叫做自动初始化autoinitialization,其示意图为:DSP编程技巧之21---在main函数运行之前,你需要知道的

  在使用了--ram_model或者--rom_mode选项的情况下,链接器在把所有C/C++模块中的相关变量初始化的内容链接入.cinit段之后,会自动在其末尾加入null关键字,来标明初始化表格的末尾。

  4.调用.pinit中的所有的全局构造函数。

  .pinit段中的内容相对简单,它主要包含了构造的地址列表。在.cinit初始化完成之后,构造函数的地址就出现在构造函数地址列表中了。

  在使用了--ram_model或者--rom_mode选项的情况下,链接器在把所有C/C++模块中的构造函数的地址链接入.pinit段之后,会自动在其末尾加入null关键字,来标明构造函数地址的结束。

  与.cinit段不同的时,不管使用--ram_model还是--rom_mode选项,.pinit段都会在运行时被加载和处理。

  5.调用main()函数,执行我们的程序。

  6.在main()函数返回时,调用exit函数。

  根据需要,我们可以自定义启动函数,但是一定要保证我们的自定义函数能够正确完成以上的步骤以建立C/C++的实时运行库环境,否则我们的程序将无法正常运行,甚至根本无法运行。

关键字:DSP  编程技巧  main函数 引用地址:DSP编程技巧---在main函数运行之前,你需要知道的

上一篇:DSP编程技巧之20---理解函数的调用过程
下一篇:单片DSP处理器功能系统的SOPC技术设计

推荐阅读最新更新时间:2024-05-02 23:12

基于DSP和模糊逻辑技术的超声波干扰探测器US0012
摘要:US0012是一种基于数字信号处理器和模糊逻辑技术的高性能智能化超声波干扰探测器集成电路。它具有价格低、适用面广、便于安装等优点,可广泛用于车辆内部的安全系统。文中介绍了US0012的主要特点和功能原理,给出了US0012的典型应用电路及其连接方法。 关键词:超声波;干扰探测器;干扰识别;报警;US0012 1 主要特性 US0012是一种采用CMOS工艺制成的超声波干扰探测器信号处理专用集成电路,它兼有干扰探测、干扰识别和干扰报警三大功能。其主要性能特点如下: (1)内含超声波发送与接收电路、模拟信号处理器、数字信号处理器(DSP)、基于模糊逻辑技术(Fuzzy-Logic Techniques,简称FLT)的鉴相
[应用]
“华睿1号”创国产多核DSP芯片“三个之最”
“华睿1号”是中国电科14所牵头研制的国内首款具有国际先进水平的高端四核DSP芯片,填补了我国多核DSP领域的空白。经过七年艰苦卓绝的奋斗,芯片设计、软件开发、平台研制、应用验证等工作顺利完成,目前华睿1号信号处理平台已成功应用于十多型雷达产品中,为我国雷达装备高端处理芯片国产化写下浓墨重彩的一笔。往昔历历在目,今朝点点于心。 筚路蓝缕,开拓创新,华睿1号芯动出岫 相信“华睿1号”项目团队的所有成员仍会清晰记得2010年12月27日北京人民大会堂北京厅里那场振奋人心的“核高基”重大专项——“华睿1号”DSP芯片发布会。那一天,我所正式对外宣布“华睿1号”这颗备受集成电路业界瞩目、填补国内多核DSP领域空白的芯片诞生了。 “产学研用
[半导体设计/制造]
关于DSP应用电源系统的低功耗设计研究
自从美国TI公司推出通用可编程DSP芯片以来,DSP技术得到了突飞猛进的发展。DSP电源设计是DSP应用系统设计的一个重要组成部分,低功耗是DSP电源系统设计的发展方向。由于DSP一般在系统中要承担大量的实时数据计算,在CPU内部,频繁的部件转换会使系统功耗大大增加,降低DSP内部CPU供电的核电压是降低系统功耗的有效方法,因此TI公司的DSP大多采用低电压供电方式。   从一定程度上说,选择什么样的DSP就决定系统处于什么样的功耗层次。在实际应用中,电源系统直接决定了DSP能否在高性能低功耗的情况下工作,因此,一个稳定而可靠的电源系统是至关重要的。   TI公司最新推出的TPS6229X系列开关电源芯片有两种工作模式:
[嵌入式]
JTAG口及其对F1aSh的在线编程
随着嵌入式技术的发展,在一些高端的掌上设备中,都使用了Flash芯片,如Compaq的iPAQ、联想的天祺系列等产品。但对于研发人员来说,在开发阶段需要大量的程序调试,就意味着要对F1ash进行擦除和改写的工作,因此,如何对F1ash进行在线编程是问题的关键所在。本文介绍一种通过JTAG对Flash进行的在线编程方法。 1 JTAG简介 JTAG(Joint Test Action Group)是1985年制定的检测PCB和IC芯片的一个标准,1990年被修改后成为IEEE的一个标准,即IEEEll49.1-1990。通过这个标准,可对具有JTAG口芯片的硬件电路进行边界扫描和故障检测。 具有JTAG口的芯片都有如下JTAG
[应用]
江苏宏云陶建平:MCU+DSP芯片架构用于无线充电
拥有8/16/32位单片机(MCU)设计技术,陶建平说宏云切入无线充电市场的时间不长,但是核心竞争力已经形成,设计有自定义指令集的数字信号处理器(DSP),是宏云在市场竞争中最大的差异化优势。 基于DSP架构的处理器可以采用单个或多MAC运算单元。比如,JMT018内核是当前世界上最小的DSP芯片,单MAC运算和除法指令等,16比特指令编码,且大多指令为单周期指令,其极低的功耗和通用的指令,非常适合智能硬件,可穿戴设备的应用。 DSP产品规划 宏云最突出的是特色是,拥有自定义指令集数字信号处理器(DSP)设计技术,公司先后建立了单核MCU和MCU+DSP双核平台,在这两个平台上推出了两个系列的MCU SOC芯片。
[电源管理]
西门子PLC程序编程技巧
OB1:主程序; OB100:初始化程序(无需主程序调用); OB35:100ms(可修改)中断(无需主程序调用),可以调用PID模块; OB80、OB82、OB85、OB86、OB87、OB121、OB122:故障诊断模块(无需主程序调用、无需编程); FC1:系统模式; FC2:输入处理; FC3:输出处理; FC4:运行处理; FC5:停止处理; FC6:手自动切换; FC100:之后用来建立一些可以循环调用的子程序; FC105:系统自带,模拟量输入子程序(可以循环调用); FC106:系统自带,模拟量输出子程序(可以循环调用); modbus通讯(CP341):FB7:P_RCV_RK,FB8:P_SND_RK; 通讯C
[嵌入式]
用ST16C2552实现DSP高速串行通讯扩展
1 引言 随着大规模集成电路工艺技术的迅速发展,DSP已经越来越广泛地应用于工业场合。工业现场由于许多场合通讯双方相距较远,为了保证通讯成本和可靠性,必须采用串行方式进行通讯。目前TI公司DSP都只有一个UART口,比如TMS320LF2407,当同时需要与上位机和下面的被控对象进行通讯,或者同时连接几个上位机时,则需要对DSP进行串行通讯口扩展,而使用可编程的ST16C2552可以一次扩展两组相互独立的串口,满足各种条件下串行通讯的要求。 2 ST16C2552介绍 ST16C2552是Exar公司生产的通用异步通讯扩展器件,并与飞利浦公司的SC16C2552相兼容,可扩展2路独立的串行通讯,可编程设定通讯起始位、停止位和
[嵌入式]
CEVA和香科院达成合作联手为中国地区开发新一代多媒体解决方案
专业向半导体行业提供数字信号处理器 (DSP) 内核、多媒体及存储平台使用权证的全球领先厂商 CEVA 公司 与香港应用科技研究院有限公司 ( 简称香科院; ASTRI) 宣布,香科院的 IC 设计部已决定选用 CEVA-TeakLite DSP 及相关之多媒体软件,开发成为全面集成的低功耗音频 SoC ( 系统级芯片 ) 平台解决方案。这是由香科院 IC 设计部之多媒体平台 (MMP) 计划所推动的项目之一。 MMP 计划的任务旨在为中国地区的半导体公司提供以平台为基础的解决方案,具备全面的视频 / 音频编解码器知识产权 (IP) ,用以开发别具成本效益的系统级芯片,针对各
[焦点新闻]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved