打印

DSP5402之另类的"数组"访问

[复制链接]
3406|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2008-5-16 20:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define FLASH(x)  (*((volatile unsigned char *) 0x8000 + x))
/*----------------------------------------------------------
另类的"数组"访问,外扩的SST39VF800A从0x8000开始
void FlashObj::ChipErase(void)
{
  FLASH(0x5555) = 0xaa;  
  FLASH(0x2AAA) = 0x55;  
  FLASH(0x5555) = 0x80;
  FLASH(0x5555) = 0xaa;  
  FLASH(0x2AAA) = 0x55;  
  FLASH(0x5555) = 0x10;
  Wait(0x5555);
}
void FlashObj::Wait(unsigned int address)
{
unsigned int temp, val;
  do {
    val = FLASH(address);
    __nop();
    temp = FLASH(address);
    __nop();
  }
  while(((val ^ temp) & (1 << BIT6)) != 0);
}
----------------------------------------------------------*/

相关帖子

沙发
hotpower|  楼主 | 2008-5-16 21:24 | 只看该作者

哈哈~~~准备在DSP上放弃不雅裸奔~~~




使用特权

评论回复
板凳
walnutcy| | 2008-5-16 21:39 | 只看该作者

老HOT要穿衣服了,呵呵,

使用特权

评论回复
地板
hotpower|  楼主 | 2008-5-16 21:43 | 只看该作者

哈哈~~~就害怕是"皇帝的新衣"~~~

使用特权

评论回复
5
hotpower|  楼主 | 2008-5-18 07:30 | 只看该作者

非常感谢simon21ic对宏bug的纠错!!!

simon21ic 发表于 2008-5-17 22:21 侃单片机 ←返回版面   举报该贴 

所以讨论一个没人用的写法没意义啊

映像中途只有看到过一次&a的用法
#define sizeof(a)  ((char*)(&(a)+1) - (char*)&(a))

顺便提一下32楼的宏:
#define FLASH(x)  (*((volatile unsigned char *) 0x8000 + x))
最好写成
#define FLASH(x)  (*((volatile unsigned char *) 0x8000 + (x)))
 
 

相关链接:https://bbs.21ic.com/club/bbs/ShowAnnounce.asp?v=&ID=2967209

使用特权

评论回复
6
ATmega32L| | 2008-5-18 07:48 | 只看该作者

不如用类似KEIL的方法:

不如用类似KEIL的方法:

#define FLASH  ((volatile unsigned char *) 0x8000)

  FLASH[0x5555] = 0xaa;  
  FLASH[0x2AAA] = 0x55;  

使用特权

评论回复
7
hotpower|  楼主 | 2008-5-18 08:02 | 只看该作者

哈哈~~~ATmega32L看看ccs听你的有多悲惨~~~

//#define FLASH(x)  (*((volatile unsigned char *) 0x8000 + (x)))
#define FLASH  ((volatile unsigned char *) 0x8000)

编译后:
"flash.cpp", line 109: error: expression must have (pointer-to-) function type

Build Complete,
  36 Errors, 0 Warnings, 0 Remarks.

何况俺想每个数组都自动偏移0x8000,所以宏必须带参数

而参数在()内,要想和数组的[],就必须修改cmd文件.

可dsp/bios不允许~~~


相关链接:https://bbs.21ic.com/club/bbs/list.asp?boardid=10&t=2951291

使用特权

评论回复
8
ATmega32L| | 2008-5-18 08:46 | 只看该作者

按理说不应该抱错啊

没用过CCS。

#define FLASH  ((volatile unsigned char *) 0x8000)
这应该是符合标准C的写法,按理说不应该抱错啊。
FLASH[0XAA]相当于 ((volatile unsigned char *) 0x8000)[0xaa]
语法上没错啊。

使用特权

评论回复
9
HWM| | 2008-5-18 08:54 | 只看该作者

一个是(),一个是[],南辕北辙。

使用特权

评论回复
10
hotpower|  楼主 | 2008-5-18 20:43 | 只看该作者

很是不困难接收[]符号的~~~它是数组的专利~~~

再LS:

()实际为指针,而[]为数组.
在很多编译器编译时结果是一样的.

使用特权

评论回复
11
hotpower|  楼主 | 2011-11-4 10:28 | 只看该作者
最近被逼迫再次搞DSP

使用特权

评论回复
12
kethon| | 2011-11-4 11:30 | 只看该作者
严重挖坟啊:lol

使用特权

评论回复
13
keken| | 2011-11-4 12:57 | 只看该作者
时间好早啊

使用特权

评论回复
14
keken| | 2011-11-4 12:57 | 只看该作者
晕死我了

使用特权

评论回复
15
hotpower|  楼主 | 2011-11-5 00:03 | 只看该作者
严重挖坟啊:lol
kethon 发表于 2011-11-4 11:30


哈哈,菜农俺三天把古老的F206的汇编学习完毕,而且每行全部注解~~~

使用特权

评论回复
16
Cortex-M0| | 2011-11-5 07:13 | 只看该作者
菜农精力旺盛,像个二十岁的小伙子,佩服~~~

使用特权

评论回复
17
keken| | 2011-11-5 13:36 | 只看该作者
看看老帖 也蛮不错的呢

使用特权

评论回复
18
keken| | 2011-11-5 13:36 | 只看该作者
收获很大

使用特权

评论回复
19
hotpower|  楼主 | 2011-11-5 16:58 | 只看该作者
DSP的指令集还是非常强大的。

使用特权

评论回复
20
tianyu01| | 2011-11-5 22:14 | 只看该作者
DSP依然是那么的强大啊

使用特权

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

本版积分规则

1538

主题

21697

帖子

506

粉丝