完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
拿到广州创龙TMS320C6748 DSP开发板已有一个多星期。 作为一个从事电子研发工作已有5年的工程师,对这块开发板爱不释手。每天下班吃完晚饭后的第一件事,就是拿出开发板,调试自己的程序。
之前我主要是做单片机方面的开发,接触DSP很少。在这一个多星期的初次接触中,开始总是以开发单片机的经验去学习,结果越来越感觉不妙,DSP的开发比单片机不知要复杂多少倍。 后来我改变了思路,从网上搜索一些前辈的学习经验。 这一期的帖子,就主要以DSP学习的基础要点总结为主。 在DSP开发过程中,CMD文件和GEL有别于单片机开发,它们是DSP开发中不可或缺的重要组成部分。 一、cmd文件分析 1,系统定义: .cinit 存放C程序中的变量初值和常量; .const 存放C程序中的字符常量、浮点常量和用const声明的常量; .switch 存放C程序中switch语句的跳针表; .text 存放C程序的代码; .bss 为C程序中的全局和静态变量保留存储空间; .far 为C程序中用far声明的全局和静态变量保留空间; .stack 为C程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果; .sysmem 用于C程序中malloc、calloc和realloc函数动态分配存储空间。 2,用户定义: #pragma CODE_SECtiON (symbol, "section name"); #pragma DATA_SECTION (symbol, "section name") 单个地址的时候可以使用 #define 如 #define my_data *(volatile unsigned int*)0x000C 在数组变量时 使用#pragma 宏 如 XXX.h/XXX.c #pragma DATA_SECTION(my_data,".data_section") unsigned char my_data[1024]; 在xxx.cmd中建立.data_section并赋予地址就可以了。 3.cmd作用 cmd由3部分组成: 1)输入/输出定义:.obj文件:链接器要链接的目标文件;.lib文件:链接器要链接的库文件;.map文件:链接器生成的交叉索引 文件;.out文件:链接器生成的可执行代码;链接器选项; 2)MEMORY命令:描述系统实际的硬件资源; 3)SECTIONS命令:描述“段”如何定位。 Link的cmd文件用于DSP代码的定位。由于DSP的编译器的编译结果是未定位的,DSP没有操作系统来定位执行代码,每个 客户设计的DSP系统的配置也不尽相同,因此需要用户自己定义代码的安装位置。以C5000为例,基本格式为: -o sample.out -m sample.map -stack 100 sample.obj meminit.obj -l rts.lib MEMORY { PAGE 0: VECT: origin = 0xff80, length 0x80 PAGE 0: PROG: origin = 0x2000, length 0x400 PAGE 1: DATA: origin = 0x800, length 0x400 } SECTIONS { .vectors : {} >PROG PAGE 0 .text : {} >PROG PAGE 0 .data : {} >PROG PAGE 0 .cinit : {} >PROG PAGE 0 .bss : {} >DATA PAGE 1 } 二、gel文件 ccs的gel语言是一种交互式的命令,它是解释执行的,即不能被编译成可执行文件。它的作用在于扩展了ccsstudio的功能, 可以用gel来调用一些菜单命令,对DSP的存储器进行配置等等。但是作者建议对于使用仿真器和DSP功能板的仿真环境用户 来说,这种GEL语言文件是没必要加入到配置中的。gel语言的重要性在于针对计算机模拟环境的用户,使用gel可以为其准备 一个虚拟的DSP仿真环境,但也不是非用不可的。 GEL文件的功能同emuinit.cmd的功能基本相同,用于初始化DSP。但它的功能比emuinit的功能有所增强,GEL在CCS下有一个 菜单,可以根据DSP的对象不同,设置不同的初始化程序。以TMS320LF2407为例: #define SCSR1 0x7018 ;定义scsr1寄存器 #define SCSR2 0X7019 ;定义scsr2寄存器 #define WDKEY 0x7025 ;定义wdkey寄存器 #define WDNTR 0x7029 ;定义wdntr寄存器 StartUp() ; 开始函数 { GEL_MapReset(); ; 存储空间复位 GEL_MapAdd(0x0000,0,0x7fff,1,1); 定义程序空间从0000-7fff 可读写 GEL_MapAdd(0x8000,0,0x7000,1,1); 定义程序空间从8000-f000 可读写 GEL_MapAdd(0x0000,1,0x10000,1,1); 定义数据空间从0000-10000可读写 GEL_MapAdd(0xffff,2,1,1,1); 定义i/o 空间0xffff可读写 GEL_MapOn(); 存储空间打开 GEL_MemoryFill(0xffff,2,1,0x40); 在i/o空间添入数值40h *(int *)SCSR1=0x0200; 给scsr1寄存器赋值 *(int *)SCSR2=0x000C; 给scsr2寄存器赋值,在这里可以进行mp/mc方式的转换 *(int *)WDNTR=0x006f; 给wdntr寄存器赋值 *(int *)WDKEY=0x055; 给wdkey寄存器赋值 *(int *)WDKEY=0x0AA; 给wdkey寄存器赋值 } 总的来说:CMD文件是链接器要用的,决定程序各段怎么连接。 gel文件是通过CCS在线调试要用的。 学习在路上,积累在路上,成功也在路上。 资深工程师就是要多实践,多积累。 我与DSP之路也在路上。 |
|
相关推荐
3个回答
|
|
楼主注意发帖标题哈!以 【TL6748 DSP试用体验】+自拟题目 已经帮你改了 下次注意哦!
|
|
|
|
OK 知道了 谢谢管理员 |
|
|
|
hello 你有没有intcVectorTable这个函数的定义?我最近在调试DSP,少这个函数的定义。能帮我找一下不?谢谢啊。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于 DSP5509 进行数字图像处理中 Sobel 算子边缘检测的硬件连接电路图
1905 浏览 0 评论
647 浏览 0 评论
普中科技F28335开发板中,如何使用aic23播放由代码生成的正弦波
2341 浏览 0 评论
3125 浏览 1 评论
1138 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-8 10:50 , Processed in 0.860520 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号