打印

关于DSP281X变量地址定位问题

[复制链接]
2701|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2008-4-17 01:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DSP, TI, LCD, CD, LED
在结合硬件的编程中,有些变量需要特定地址.

一般可以采用指针变量.
例如:
unsigned int *LedReg   = (unsigned int *)0x5f00;//发光二极管地址
*LedReg = 0xFF;

但有些时候感觉不是太好时,可以像Keil那样

unsigned int LedReg at 0x5f00;//发光二极管地址
LedReg = 0xFF;

这样看着"比较顺眼"~~~
但在TIDSP的CCS环境下,不能采用at或__at等来定位地址.
不过CCS也提供了类似的手段,不过有些"麻烦".

具体实现:

1.在CMD文件中

MEMORY
{
 PAGE 0:    /* Program Memory */

 PAGE 1:    /* Data Memory */
 
   LED_REG     : origin = 0x005f00, length = 0x00001 /*发光二极管地址*/
   LCD_ComL    : origin = 0x005100, length = 0x00001 
   LCD_ComH    : origin = 0x005200, length = 0x00001
   LCD_DatL    : origin = 0x005300, length = 0x00001
   LCD_DatH    : origin = 0x005400, length = 0x00001
   EINT_REG    : origin = 0x005c00, length = 0x00001
   KEY_REG     : origin = 0x005b00, length = 0x00001
   RCLK_REG    : origin = 0x005500, length = 0x00001 /*数码管锁存地址*/
}

 
SECTIONS
{
   LedDataRegsFile   : > LED_REG,     PAGE = 1
   LcdComlRegsFile   : > LCD_ComL,    PAGE = 1
   LcdComhRegsFile   : > LCD_ComH,    PAGE = 1
   LcdDatlRegsFile   : > LCD_DatL,    PAGE = 1
   LcdDathRegsFile   : > LCD_DatH,    PAGE = 1
   KeyRegsFile       : > KEY_REG,     PAGE = 1
   EintRegsFile      : > EINT_REG,    PAGE = 1
   RclkRegsFile      : > RCLK_REG,    PAGE = 1
}

2.在C/C++文件中


#ifdef __cplusplus 
#pragma DATA_SECTION("LedDataRegsFile") /*C++语言格式*/
#else 
#pragma DATA_SECTION(LedRegs,"LedDataRegsFile");/*C语言格式*/
#endif
volatile unsigned int LedRegs;

/*以下为C++语言格式*/

#pragma DATA_SECTION("LcdComlRegsFile") 
volatile unsigned int LcdComL;
#pragma DATA_SECTION("LcdComhRegsFile") 
volatile unsigned int LcdComH;
#pragma DATA_SECTION("LcdDatlRegsFile") 
volatile unsigned int LcdDatL;
#pragma DATA_SECTION("LcdDathRegsFile") 
volatile unsigned int LcdDatH;

#pragma DATA_SECTION("EintRegsFile") 
volatile unsigned int EintRegs;

#pragma DATA_SECTION("KeyRegsFile") 
volatile unsigned char KeyRegs;

#pragma DATA_SECTION("RclkRegsFile") 
volatile bool SpiRclkRegs;


3.在应用程序中

extern unsigned int LedRegs;
extern volatile unsigned int EintRegs;
extern volatile unsigned char KeyRegs;
extern volatile bool SpiRclkRegs;
//............
LedRegs = 0xff;//这样就不需要指针变量的写法了
//..................

//HotPower@126.com 2008.4.17 1:34

相关帖子

沙发
zgl7903| | 2008-4-17 09:06 | 只看该作者

可以使用宏定义阿,是不是更简单些?

#define LedReg (*(unsigned int *)0x5f00)//发光二极管地址

应用时
LedReg = 0xFF;
GetLed = LedReg;

使用特权

评论回复
板凳
hotpower|  楼主 | 2008-4-17 09:14 | 只看该作者

哈哈~~~正在当28菜鸟~~~

俺也是喜欢宏的~~~
相关链接:http://blog.**/hotpower/85874/message.aspx

使用特权

评论回复
地板
hotpower|  楼主 | 2008-4-17 12:31 | 只看该作者

哈哈~~~两者的差异在于能否在变量窗口中查看具体的数值~~~

#define LedReg (*((unsigned int *)0x5f00))//发光二极管地址

使用特权

评论回复
5
zealane| | 2008-4-17 15:45 | 只看该作者

re

unsigned int *LedReg   = (unsigned int *)0x5f00;//发光二极管地址
*LedReg = 0xFF;

汗,我一直这么用的。
可能是因为用的少吧,也不觉得有什么不方便

使用特权

评论回复
6
hotpower|  楼主 | 2008-4-18 20:51 | 只看该作者

有空说说三种方法的不同和优缺点~~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1538

主题

21697

帖子

506

粉丝