社区导航

 

搜索
楼主: 辛昕

[原创] 郭天翔老师,我只想为你擦去一些C51代码里的小小蒙尘

  [复制链接]

214

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2011-11-15 17:23 | 显示全部楼层
刚入门的时候,看看他的视频挺好的。关键是看自己想不想学,真的想学,那些习惯都不是问题。
我就是看他的程序入门的。但是我现在比较习惯直接用unsigned char。因为还没有怎么要移植到32位机上面。但是至于typdef 和#define,也算懂一点,当然不敢说一定全部都懂。这个东西,个人觉得有时候还是需要亲身体会一下比较好。

回复

使用道具 举报

7908

TA的帖子

54

TA的资源

裸片初长成(中级)

Rank: 11Rank: 11Rank: 11Rank: 11

荣誉会员勋章

 楼主| 发表于 2011-11-15 17:45 | 显示全部楼层

回复 18楼 klyz12ss 的帖子

额.....貌似这跟单片机本身倒是关系不大,跟C有关系。

八年一梦,洗尽铅华,重头再来


回复

使用道具 举报

7908

TA的帖子

54

TA的资源

裸片初长成(中级)

Rank: 11Rank: 11Rank: 11Rank: 11

荣誉会员勋章

 楼主| 发表于 2011-11-15 17:46 | 显示全部楼层

回复 19楼 51学习者 的帖子

主要是工作后,内容直接转向ARM。
51没再碰过,所以渐渐疏远了。对于51,我是基本算是混个入门,仅此而已。

八年一梦,洗尽铅华,重头再来


回复

使用道具 举报

216

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2011-11-15 18:17 | 显示全部楼层

回复 23楼 辛昕 的帖子

我现在大四了 想通过学习单片机找个和相关的工作,主要还是对这个有兴趣,我学习2个月51的时候问过同学说看完了51 再看啥 同学的建议是深入学习,可是越来越久的找工作中 觉得51好像用的少了,是不是工作以后也用处少??
还是应该像你一样,直接看看ARM?起码对找工作有点好处?
我最近要考试了 单片机也只能先放下几天了 (还是想我那个没完成的程序啊......)
斑竹推荐个 有关ARM的 入门学习方法 或者视频 或者资料吧 我现在一点都不了解ARM.....

回复

使用道具 举报

575

TA的帖子

0

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

发表于 2011-11-15 19:06 | 显示全部楼层

回复 24楼 51学习者 的帖子

我首先说一下啊,我现在大二啊,一些观点有点不符合实际,之前我对51的所谓的学习,就是看看视频教程,然后照着写写程序,也就这样过了。但是群里的一个牛人,跟我说学习51的目的要理解他是怎么工作的,他建议我深入到51里面去,让我真正了解单片机。我现在正在学习,他和我说他51玩了5年。。。。
我们再说说辛昕吧(俺们原来的版主大大),我感觉他之所以能够玩ARM,在于他对51的理解,有他的教程为证,还有就是他的电子的基础,这个看他发过的帖子就知道了。。。
辛哥说说你的想法啊

评分

1

查看全部评分


回复

使用道具 举报

262

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2011-11-15 19:12 | 显示全部楼层
LZ剖析的很好。但话说回来,郭天祥老师确实挺棒的,试想一下:有多少人能当着学生的面一个字符一个字符的敲程序,还能保证程序结构合理,变量名定义美观,程序运行基本上都能正确!!!而我们大多数人只会静静地自己在那研究程序,或者花很多的时间去自己去一点一点的修改,没什么压力和时间限制!  
  所以,将心比心,郭天祥确实很棒!  
  不过,要想把C学好,还得自己一步一步去努力积累和完善!不能完全依靠那个基础视频。

回复

使用道具 举报

216

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2011-11-15 21:06 | 显示全部楼层

回复 25楼 小小白 的帖子


大二的学弟,单片机的学长。
但是现在面临找工作的问题了.....
还是想听听辛昕斑竹的建议

回复

使用道具 举报

7908

TA的帖子

54

TA的资源

裸片初长成(中级)

Rank: 11Rank: 11Rank: 11Rank: 11

荣誉会员勋章

 楼主| 发表于 2011-11-15 22:32 | 显示全部楼层

回复 25楼 小小白 的帖子

我赞同 51 是所有单片机/嵌入式,甚至是计算机(我说的是X86系统)的基础。

因为我自己未曾真正学过任何 计算机基础课程,但是,在我学51前后,两次看 这类的书籍,感觉完全不一样。
51的基础让我基本理解了一些非常基础的诸如 取指译码 等概念,尽管只是概念,但是却让我看懂了曾经的天书。

但与此同时,我自己上班,不好说是 机遇 还是 倒霉,总之,ARM LINUX,所有这些我曾经回避的东西,是躲一个来一个.......

这个过程是相当痛苦的事情。

所以我形成另一种观点:
如果你要学ARM,那你就学吧,不要想着什么,先51,再AVR,再ARM......没用。
真正学的进去的人,你让他直接ARM,他也能学出来。
而学不进去的人,你让他把所有单片机都学一遍,估计也费劲。

因为道理是相通的,既然是相通的,那么,直接走和绕着走区别不大。
为啥我说 学不进去的人 学再多也白搭——我不是鄙视人更没有骂人的意思,只是我见过这样的人不在少数,在他看来,写程序就是找例程,修改参数,他甚至连这个程序是怎么一个结构都没看出来。
当然了不是他没看,是他看了也没看懂,你能想象一个连 带参宏都不懂的人能看懂什么?
要是让他遇上几个条件编译 和 内联函数,估计他就傻了。

我是对51比较熟悉,但是,这对我玩ARM有帮助么?
不能说没有,但至少没有直接帮助。
ARM和51压根是两回事。

而那些真正有帮助的东西,都是“独立于平台”的。
比如C语言。在嵌入式单片机的世界里,C一直是万国通用语言语言,它的应用范围超乎你的想象,惊喜着我,让我觉得我以它为终生语言的选择,无怨无悔。

我可以负责的告诉你们一个我的观点:
C51首先是C语言。
我在学51以前,花了几个月,先学了一遍标准的C语言语法。

后来我玩LINUX时,看过很多所谓的LINUX C,其实这本身就是外行人才说得出来的话。
因为天下没有LINUX C这个说法,天下只有一个C语言,当然你非要说C51,C430增加了几个新的关键字,就说它不是,那我也没办法。
更别说,LINUX本身就是在C的基础上构造出来的一个超级C程序。

所以,你要问我,要想吃这口饭,混这行当,要学什么?
那首先把C学好,别的都多余。
什么平台也罢,除去一些基本的底层设置,在写程序这个层面上,除了C,别无他物。
会51?会什么什么芯片.......也许有一天你上班遇到的是一个你压根听都没听说过的芯片,但是不要紧,只要你看到熟悉的C代码,然后你本身懂C语言,那么,一切无关紧要。

点评

太对了  详情 回复 发表于 2015-7-2 09:36

评分

1

查看全部评分

八年一梦,洗尽铅华,重头再来


回复

使用道具 举报

7908

TA的帖子

54

TA的资源

裸片初长成(中级)

Rank: 11Rank: 11Rank: 11Rank: 11

荣誉会员勋章

 楼主| 发表于 2011-11-15 22:34 | 显示全部楼层

回复 26楼 风亦路 的帖子

他的确很棒,但这不能作为理由。
何况有一些程序真的挺简单,对于熟悉的人来说,随手写出来并不是太夸张的事情。

而且很多时候 那是习惯问题。
一旦养成,至少形式上并不是太困难的事情。

但是要一下手就能够想到代码背后实际运行起来的效果,特别是深入到 反汇编 那种层次。
比如说可以分析出特定平台上特定语句的不同效果,那一种倒可以说是临时写不一样。

比如说,51里,写for(i = 0;i  < 8;i++)
和for(i = 0;i >= 0;i--)
这两句话,实际运行起来的效率差别在哪里?

这种问题能够在那一瞬间想好,那就的确是不该苛求的事情。

这个问题,不要小看,我自己就没想明白。
这个问题的提出者是本论坛的 richengfeng,他才是一个真正C和51方面的行家,跟他比,我什么都不是。

[ 本帖最后由 辛昕 于 2011-11-15 22:39 编辑 ]

八年一梦,洗尽铅华,重头再来


回复

使用道具 举报

262

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2011-11-15 22:55 | 显示全部楼层

回复 29楼 辛昕 的帖子

嗯,LZ说的很有道理。 我们都是平心而论。
说来也巧,多年前我也遇到过这个问题:
51里,写for(i = 0;i < 8;i++)
和for(i = 8;i >= 0;i--)的差别。
用STC89C51写DS1302的读一个字节程序时,用前者不能,用后者却可以。 当时这个程序的错误我整整用了一天才查找出来(当时没仿真器)。所以这两者的效率也就是在那一天我才知道有那么大的差别!!!
其实,我也挺敬重楼主的,谦虚,实在!

回复

使用道具 举报

575

TA的帖子

0

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

发表于 2011-11-16 02:41 | 显示全部楼层
学习51单片机到底我们在学什么?这是一个一直疑惑得问题,我们学习得最终目标是什么?我想要理解他,从硬件和软件上理解他,只有理解他,你才会用好他,正如现在三级管在电路中已经不常见了,但为什么我们还要学习三级管,不仅仅是在好多集成电路得内部有他得影子,更因为它代表着是一种学习的思路

回复

使用道具 举报

3574

TA的帖子

6

TA的资源

裸片初长成(初级)

Rank: 10Rank: 10Rank: 10

荣誉会员勋章

发表于 2011-11-16 09:49 | 显示全部楼层
向老斑竹学习~~~
老版主提的这个问题很关键,对于初学者来说,一开始就有一个比较规范的标准是比较好的。对于程序的规范性问题其实有很多,比较清晰的程序不仅利于别人看,对自己也有好处。以前体会不深,这多半年一直在看以前同事留下的程序,费死劲了。
老版主这次说的主要是C语言的基础,学单片机的大部分应该都学C语言,其实很多东西书上都有的,希望大家多看看书,别只要能用就行,要知其然并且知其所以然。
对于程序的规范性还有很对,老版主也提到了一个很重要的就是变量命名,对于变量命名,我开始也很少注意,wei1这样的用法也出现过,不过那时候还没有郭天翔的视频。变量的命名要本着大家都能看懂的原则,我并不主张一定用英文,英文基础不好的同学完全可以用拼音代替。wei1的写法我也不反感,我觉得只要做过数码管动态扫描的都能看懂这个意思。我看程序发现了一种变态写法,中英结合的写法,举个例子啊,变量HY,我不信你能猜出来,这个是高压(电压值)的变量,hight和ya(压),我以前的同事写的,我是通过显示函数猜出来的。
关于程序的规范性还有一个看起来不太重要的部分就是格式,包括文件注释,函数注释,语句注释以及对齐等。这些程序之外的东西对程序的执行没有任何帮助,但对于程序的阅读却帮助很大。

评分

1

查看全部评分


回复

使用道具 举报

399

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

发表于 2011-11-16 10:22 | 显示全部楼层
顶起来吧,

回复

使用道具 举报

214

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2011-11-16 11:23 | 显示全部楼层

回复 30楼 风亦路 的帖子

是你的程序问题么?
我自己试了一下,用for(i=8; i>0; i--)不会有问题啊。。。当然你要是把i>0改成i>=0,那显然是必须有问题的。

回复

使用道具 举报

119

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2011-11-16 11:29 | 显示全部楼层

回复 29楼 辛昕 的帖子

你现在明白这两者的区别了吗,求指教,貌似是和变量变为0时处理的速度有关吧?我还是不知其所以然,求指点

回复

使用道具 举报

214

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2011-11-16 12:33 | 显示全部楼层

回复 29楼 辛昕 的帖子

楼主的这个问题好啊。我用keil来查看了一下,得出了结果。汇编还是得好好学。编译器还是得好好了解啊。谢谢!
    11:         for(i=8; i>0; i--);
C:0x0095    751608   MOV      i(0x16),#time(0x08)
C:0x0098    D516FD   DJNZ     i(0x16),C:0098
    12:         for(i=0; i<8; i++);
C:0x009B    E4       CLR      A
C:0x009C    F516     MOV      i(0x16),A
C:0x009E    0516     INC      i(0x16)
C:0x00A0    E516     MOV      A,i(0x16)
C:0x00A2    B408F9   CJNE     A,#time(0x08),C:009E

上面的是汇编代码。keil  C51的.

回复

使用道具 举报

2803

TA的帖子

0

TA的资源

裸片初长成(初级)

Rank: 10Rank: 10Rank: 10

发表于 2011-11-16 15:44 | 显示全部楼层
我感觉不是卖弄,楼主很给力,给楼主顶一个帖子,算是对于楼主给大家做贡献的一个鼓励吧,嗯嗯,值得值得,希望楼主继续努力啊!加油
我爱电子!

回复

使用道具 举报

59

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2011-11-16 17:02 | 显示全部楼层
见微知著~~~楼主有心了~

回复

使用道具 举报

25

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2011-11-16 17:16 | 显示全部楼层

谈谈我的想法

呵呵,我是看谭浩强的C学的,你说的这几个人我一个都不熟悉。
汇编是在学校的教材,谁的也忘了。

看要看重点,人家是教给你学51的?还是教给你学C语言的?
你51没学会,倒是把他的C给学过来了。

人家给你的是渔,你却当成了鱼。

还是一句话:尽信书则不如无书。
为什么要博览群书呀,就是要对比啊,哪家对就信哪个。

命名法很多种,windows的好不好?但是如果让你点个灯的小程序,你去学windows?弄那么一长串的变量?

适合的就是最好的。

回复

使用道具 举报

415

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2011-11-16 18:57 | 显示全部楼层
#define 这个我也常这样写,难道错了,我并没有看过啥郭的书!就是为了少写几个字母而已,心里就没有想把它写成typedef,我的typedef一定用在结构体中,不知道楼主为何说#define错误
zhouyuannian#126.com(#换成@)有问题交流

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 1/8 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-5-28 05:58 , Processed in 0.566095 second(s), 39 queries , Gzip On, MemCache On.

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