51单片机变量 51的单片机变量是怎么个定义法。全局变量,局部变量都放在什么存储器里的

51的单片机变量是怎么个定义法。全局变量,局部变量都放在什么存储器里的,还有如果我想定义个变量放在用户RAM里地址为0x32,定义变量放在位寻址区那(如0X22)有怎么定... 51的单片机变量是怎么个定义法。全局变量,局部变量都放在什么存储器里的,还有如果我想定义个变量放在用户RAM里地址为0x32,定义变量放在位寻址区那(如0X22)有怎么定义呢?
bdata unsigned char ss=0x22;这样定义了下 如果在程序里给它赋值,在memory window 处D:0X22 没看到有值。各位大神来个解释下 谢谢了,俺初次用这个51单片机
展开
 我来答
匿名用户
推荐于2017-11-25
展开全部
不能这样定义,这样定义是错的。你这个是赋值,不是定义在0x22单元格里。
unsigned char bdata SS _at_ 0x22;
只有在Keil编译环境下才可以这样使用。还有,这种语法不适合用C语言,我说的是不适合,不是不能用。C语言里面的指针就是针对这个的,不建议使用 _at_ 进行变量在RAM中固定,这样对程序编译优化时,带来很多麻烦,也得不到充分的优化。
其实用C语言指针的方法是可行的。
bdata区虽然有自己独立的位地址,但你用的是char型 ,是一个字节的,所以你说的0x22只是bdata区的字节地址,而不是位地址,那麽用C语言的方式实现 就是这样:
unsigned char *p;
p=0x22;
*p=50;
*p 表示指向0x22所在的单元格,就是将50赋值到0x22地址所指向的单元格里。
再从另一个角度讲,如果你没于传参或改变实参的情况下,不建议使用这类,即使有,也不是很建议。因为单片机高手是不会用_at_这类关键字进行变量定位的。
有什么疑问可以一起探讨。
希望我的回答对你有帮助,谢谢。
追问
哦,明白了。。。谢谢!
再问个问题 keil u2能软仿真那种波形么 比如用延时产生一个方波,在u2能看到么?它上面有performance analyzer窗口 ,是看波形的吗 怎么用的? 还有像mplab sim中的外加激励一样的东东u2有吗?
布镶岚R
2012-06-30 · 超过24用户采纳过TA的回答
知道答主
回答量:51
采纳率:0%
帮助的人:57.8万
展开全部
这个应该是汇编时才要考虑的吧?地址寻址一般都有专用的地址寄存器
C语言的话都是编译软件自动反汇编下载到单片机的,这些都不用考虑的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式