打印

汇编写多了,c语言不知咋写了?请看:

[复制链接]
1953|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
doob|  楼主 | 2007-7-2 21:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
wjy1107| | 2007-7-2 21:52 | 只看该作者

经常使用的单片机

在程序开始的时候会有一个头文件
在这个文件里就会把整个单片机上的特殊寄存器进行宏定义,然后你按宏定义进行操作就行了。

使用特权

评论回复
板凳
gyt| | 2007-7-3 07:49 | 只看该作者

是啊

使用特权

评论回复
地板
ayb_ice| | 2007-7-3 07:57 | 只看该作者

随便说说

汇编写多了吗?
SFR不知道吗?

使用特权

评论回复
5
doob|  楼主 | 2007-7-4 23:01 | 只看该作者

hehe,c语言寄存器

hehe,c语言寄存器不是编译器自己分配的吗?
     如果我没用到的特殊寄存器,c语言会自动避开吗?
  呵呵,假设,,,一个寄存器作用是uart buffer
        头文件有定义假设在 0x80吧,我没用到,
        c语言就不会再定义的头文件范围进行分配地址吧。。
     呵呵,估计是这样。。
        

使用特权

评论回复
6
tjsheep| | 2007-7-4 23:13 | 只看该作者

很多人都问过了,帖子也很多,我就再打一遍吧

#define    REG   (*(int *)0x0000)

REG = xxx;
xxx = REG;
就可以用了

使用特权

评论回复
7
doob|  楼主 | 2007-7-5 21:24 | 只看该作者

我是奇怪c语言自动分配寄存器地址为什么

我是奇怪c语言不是自动分配寄存器地址吗?
为什么能避开我没没用到的特殊寄存器呢?
   这些东西在哪里有讲呢?

使用特权

评论回复
8
dreambird| | 2007-7-5 21:31 | 只看该作者

不是c自动分配,是编译器分配,但每种编译器的做法是不一

使用特权

评论回复
9
winds| | 2007-7-6 00:00 | 只看该作者

如果是单片机内部

特殊寄存器,用 sfr beep=P3^3 之类定义
如果是Ram 最好不要指定,否则程序容易崩溃
如果是外部 RAM 用 
#define  XBYTE ((unsigned char volatile xdata *) 0)
#define         R8155               0x5f00
#define ReadIO(addr)          XBYTE[R8155 + (addr)]
#define WriteIO(addr,value)   XBYTE[R8155 + addr] = value
来访问

使用特权

评论回复
10
gyt| | 2007-7-6 06:42 | 只看该作者

LS说的是

尽量不要自己指定RAM地址

使用特权

评论回复
11
doob|  楼主 | 2007-7-7 14:01 | 只看该作者

ls

  但是单片机内部一部分寄存器,如fifo,地址都是固定的!
不指定不行的!

使用特权

评论回复
12
一朝成名| | 2007-7-7 14:33 | 只看该作者

特殊&非特殊分开

不知道俺说的对不

使用特权

评论回复
13
感觉不错| | 2007-7-7 15:04 | 只看该作者

地址的概念,指针的概念。

使用特权

评论回复
14
gyt| | 2007-7-8 12:06 | 只看该作者

特殊寄存器确实要指定

应该在头文件或者最前面一起先设定好

使用特权

评论回复
15
doob|  楼主 | 2007-7-8 18:24 | 只看该作者

呵呵

  是啊,用到的特殊寄存器要指定,
        没用到的还要指定吗?
        如不指定,c编译器分配给其他c寄存器用了,系统不就崩溃了??

使用特权

评论回复
16
starlite_jason| | 2007-7-9 09:47 | 只看该作者

特殊功能寄存器要在头文件中定义好

即使是没有用到的,一样也要定义好,不然编译器会把它当作普通RAM使用的

使用特权

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

本版积分规则

165

主题

1113

帖子

3

粉丝