amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 1322|回复: 22

菜鸟同事问俺C51指针,写了个demo,居然出糗了...

[复制链接]
发表于 2015-1-17 19:22:40 | 显示全部楼层 |阅读模式
本帖最后由 azeng 于 2015-1-18 18:12 编辑

菜鸟同事最近买了个STC90C516的开发板,自娱自乐玩的很high,学到指针,百思不得其解,让俺给他写个demo,于是花了几分钟写了一个给他,于是俺就出糗了...           好吧,俺真没怎么用过51。

代码在这里:

  1. #include “reg52.h”

  2. void delay(void);

  3. void main(void)
  4. {
  5.         unsigned char * ptr;
  6.        
  7.         ptr = (unsigned char *)0x90;
  8.        
  9.         while(1)
  10.         {
  11.                 *ptr += 1;
  12.                 delay();
  13.         }
  14. }

  15. void delay(void)
  16. {
  17.         unsigned int count = 5000;
  18.        
  19.         while(--count);
  20. }
复制代码
发表于 2015-1-17 19:33:44 | 显示全部楼层
51的地址是8位的?好像印象中是不是24位的地址?
发表于 2015-1-17 19:37:42 来自手机 | 显示全部楼层
楼主想表达什么?
发表于 2015-1-17 19:40:16 | 显示全部楼层
C51指针比较特殊,分通用指针和指向不同存储区域的指针。需要特别注意。
发表于 2015-1-17 19:40:19 | 显示全部楼层
no zuo no die,虽然不知道楼主写的是什么!
发表于 2015-1-17 19:40:55 | 显示全部楼层
楼主是想指针指向端口?

51比较特殊,端口地址和RAM是有重叠的,51寄存器需要用sfr定义后来访问,所以你现在这个只是把0x90的RAM++,而不是端口寄存器++。
发表于 2015-1-17 19:51:11 | 显示全部楼层
51指针分为 data idata xdata code, 分别映射到不同地址空间, 如果未声明, 默认指针是3个字节, 一个字节是指针类型, 2个字节是地址, 指针赋值为000090H, 可能作者原意是idada, 但指向了xdata或code
发表于 2015-1-17 19:57:01 | 显示全部楼层
没怎么看懂,楼主在哪里出糗的。我理解这是在while里给ptr指针指向的地址里存储的内容循环加1,不知道对不对
发表于 2015-1-17 19:57:40 | 显示全部楼层
有啥问题?
 楼主| 发表于 2015-1-17 20:00:57 | 显示全部楼层
mcu_lover 发表于 2015-1-17 19:40
C51指针比较特殊,分通用指针和指向不同存储区域的指针。需要特别注意。

唉,学艺不精...
发表于 2015-1-17 20:03:17 | 显示全部楼层
没看懂
 楼主| 发表于 2015-1-17 20:07:19 | 显示全部楼层
lusson 发表于 2015-1-17 19:40
楼主是想指针指向端口?

51比较特殊,端口地址和RAM是有重叠的,51寄存器需要用sfr定义后来访问,所以你现 ...

对啊,唉,出糗了...
发表于 2015-1-17 20:36:38 | 显示全部楼层
是啊,51的寄存器地址和RAM地址是分开的,这点比较坑爹,不知道LZ有什么好的备份寄存器的值的方案~^_^
发表于 2015-1-17 22:26:41 | 显示全部楼层
数据溢出了吧
发表于 2015-1-17 22:33:46 | 显示全部楼层
sfr好像不能被指针指向 呵呵
发表于 2015-1-17 22:34:03 | 显示全部楼层
菜鸟同事问菜鸟同事,结果被问的菜鸟同事因为想耍帅,结果出糗了。
 楼主| 发表于 2015-1-17 22:42:28 | 显示全部楼层
hantnt 发表于 2015-1-17 22:34
菜鸟同事问菜鸟同事,结果被问的菜鸟同事因为想耍帅,结果出糗了。

俺真没怎么用过51...  当初AVR起家,后来ARM,全是RISC架构。
发表于 2015-1-18 08:47:53 | 显示全部楼层
azeng 发表于 2015-1-17 22:42
俺真没怎么用过51...  当初AVR起家,后来ARM,全是RISC架构。

看你头像,大家都明白了这种事情的必然性,哈哈。
发表于 2015-1-18 08:53:09 | 显示全部楼层
楼主出糗的不止这一处
请自行查阅delay函数里的变量名
发表于 2015-1-18 09:19:53 | 显示全部楼层
阴道不少!
 楼主| 发表于 2015-1-18 11:19:01 | 显示全部楼层
iamseer 发表于 2015-1-18 08:53
楼主出糗的不止这一处
请自行查阅delay函数里的变量名

靠,这是不小心写错了,原本是count   
发表于 2015-1-18 11:57:44 来自手机 | 显示全部楼层
不止是rom  ram不是统一编址的  而且寄存器跟内存都不统一编址
发表于 2015-1-18 12:14:10 来自手机 | 显示全部楼层
azeng 发表于 2015-1-18 11:19
靠,这是不小心写错了,原本是count

第一处cunt是写错。第二处,再错,难道是复制粘贴?
这种代码还要动鼠标足以证明水平有多菜。
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-6-16 09:43

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表