EDA365电子工程师网

标题: 单片机初学者的误区(非常接地气) [打印本页]

作者: 奋斗者    时间: 2015-2-16 11:08
标题: 单片机初学者的误区(非常接地气)
$ `- t, `" c. y( @7 R0 [) f3 X

/ b! E- g5 l1 }) L( Y

. L' F5 |9 Y. c1 A
(1)很难记住繁杂的寄存器?
6 o0 [  E" B2 ?3 Y: c) H7 @2 y, [7 n: `% p) r
寄存器不用死记硬背,做了那么久单片机项目的开发,连一个寄存器都记不住。
2 {7 Z# h3 w2 @% b% ^- \5 j0 g9 o  }- s3 C$ ?* B5 h3 s
需要配置寄存器的时候,直接在网上或者书本上参考别人现成的配置程序是上策,查找芯片数据手册是中策,死记硬背寄存器是最最下策。+ k$ F5 ^' p+ f+ E, T
" `% X" m- G, e. E, K- Z

+ A: V. L- }+ s0 R(2)很难记住繁杂的汇编语言指令?$ S+ F& f; s' x/ ]

8 d; T+ I( `' f: Q4 x3 q除非是在校学生要应付考试或者少数工作中绕不开汇编,否则学汇编就是浪费时间。从来就没有用汇编帮客户做过一个项目。4 T1 @& r7 g' U
# C  c* j& L; J' ]

9 h5 N& _) @3 v: B2 x( X. v(3)C语言很难学?
& y# x) R( s5 O& Q  O# |0 ]0 R
! p+ s9 |. k  v你不用学指针,你不用学带形参的函数,你不用学结构体,你不用学宏定义,你不用学文件操作,你也不用死记繁琐的数据类型。% z6 p' a- H0 n' |" D
* C  s3 O- J0 u0 K
你只要会:, H$ L2 b# c& k: S7 T, e8 S" I

) @: N9 J% }. W. s% `8 R/ h8 t5条指令语句switch语句,if else语句,while语句,for语句,=赋值语句。
% r, R. j+ F4 o# P' d* c- T7个运算符+,-,*,/,|,&,!。6 l1 v8 Y# ^( N  j/ C6 s9 ?2 n
4个逻辑关系符||,&&,!=,==.- `' o9 c$ i$ O1 P
3个数据类型unsigned char, unsigned int, unsigned long。
; U( W/ q5 [! H3个进制相互转化,二进制,十六进制,十进制。/ v# }2 q/ {$ |4 ^  ~# z5 E0 [
1个void函数。
6 W) S4 O1 n; Z0 N2 u# D1个一维数组code(或const) unsigned char array[]。, |  s! ~: g* b" i( S
那么世界上任何一种逻辑功能的单片机软件你都能做出来。! N* d6 m) f! N% D
我当年刚毕业出来工作的时候才知道可以用C语言开发单片机,一开始只用if语句就把项目做出来了,没有用指针,没有用带形参的函数等复杂的功能。8 f* s& y, c5 S0 e+ K! p; M$ l
8 O) G- I) {9 \
再到后来才慢慢开始用C语言其他的高级功能,但是我发现C语言其他的高级功能,本质上都是用我前面列举出来的最基本功能集合而成,只是书写更加简单方便了一点,编译后的机器码都大同小异。
3 v4 c9 r+ e& S1 a0 W
1 _! M8 [3 \  m- s# E& O+ t所以不会指针等高级功能你不用自卑,恰恰相反,当你会最简单的几个语句,就把这些高级功能的程序都做出来了,你才发现你对底层了解得更加透切,再学那些高级功能轻而易举。
& h% z' w& u4 k9 R1 l5 V% T% R$ O4 D8 t( I
当你裸机跑的程序都能够协调得很好的时候,你才发现所谓高深的操作系统也不过如此,只要给你时间和金钱你也可以写个操作系统来玩玩。6 D# _" e3 @4 W$ c

5 B7 S4 k7 A5 U: y5 Q. f
" e5 ^& X0 r; U! X" d: a7 K(4)很难记住精确时间的计算公式?2 v8 g/ I* T4 ~6 k

3 r7 w* }7 b+ m! K+ {/ `! ~+ C经常看到时间公式等于晶振,时钟周期,执行指令次数他们之间的乘除关系式。/ }( R! E% x5 S, O! A# c& d: \

) r4 u; A0 Z5 J9 e2 r9 v我认为这些都是浮云,不用纠结也不用去记,大概了解一下就可以了。不管你对公式掌握得有多精确,你都不可能做出非常精确的时间。
8 u1 O. N5 v0 f& V" [/ @" ~- I7 p/ C( i
想用单片机做一个非常精确的时间这种想法一开始就是错的,不可能的。# v" I2 l1 h: R9 l* x# D# C0 i

& ]2 e% i& u+ H8 P( I1 n真想做一个比较精确的时间,应该用外围时钟芯片或者FPGA和CPLD,而不是单片机。+ m+ z  t0 S+ k* w& [
+ b1 v+ L; [  t: N: x" K" S- Y
; {- k+ s7 n4 ?
(5)很难记住繁杂的各种通信协议?0 L6 I) \3 i7 j, w6 o- D* f6 C& v
( ^6 A( c# ~5 Z0 q' r1 D: r
什么IIC,SPI,232串口通讯,CAN,USB等等。
  x4 k2 J/ b* ]1 Q/ x) n' f- ^% t% k- w
这些都是浮云,你不用记那么多,你只要理解两种通讯方式就够了,那就是串行通讯方式和并行通讯方式。; _) H% k$ A7 f* _
% W5 ~! P0 K  P4 h' ?  m% k$ i
不管世界上有多少种通讯协议,物理世界上只有这两种通讯方式,其他各种名称的通讯协议都基于此两种方式演变而来。# L5 n' `8 V7 F4 E% [6 G

/ u9 }. \6 M3 N+ J5 g
1 q3 [( V  ^& f- t2 [! v5 E9 g(6)很难写短小精悍的程序?
4 r0 S! b  q" I% O3 Y: O. w6 i- ~8 _0 c1 d1 c+ c2 u
初学者不要纠结于此。做项目开发,程序容量不是刻意追求的目标,程序多一点少一点没关系。
0 \: q3 \1 a, [
, p# l. x' t2 T7 j- W- x4 s现在大容量的单片机品种非常多,容量不会是寸土寸金的事情,我们更加要关注程序的运行效率,可读性和可修改性。
, |! K. g! O" M8 O$ C

: L+ ?& ]' U: k: c; L* P7 `$ r& E/ K% F1 q

0 d, t# G4 l" S

8 U0 d  C* L/ N! _

5 l5 ~# R" }. f2 K& R6 ]! p1 e; m' P
- H( u7 u3 y, D' c9 ?1 K" ~
作者: 15167890278    时间: 2015-3-7 09:35
哥  我是单片机初学者,你的描述太震撼我了,能方便加个QQ以后讨教你几招吗
作者: jimmyvivi    时间: 2015-4-19 21:57
说在点上了
作者: finastic    时间: 2015-4-20 11:20
精辟啊
作者: seawolf1939    时间: 2015-4-20 15:29
对的!!!每一句话都戳心坎!) g6 g- W  {" \0 k) b
做了那么多项目,至今不会用指针,结构体。。。因为发现汇编出来的机器指令都差不多!
作者: tomhawk    时间: 2015-5-1 11:05
说的好, 全新开发一个project 不如先用现成来改
作者: wbr972    时间: 2015-6-9 10:10
只能说楼主,水平一般....
作者: 1136524314    时间: 2015-6-17 11:04
精辟,好!
作者: 独孤无剑心    时间: 2015-6-19 11:42
虽然刚了解单片机,但楼主说的精髓一定要收藏,感谢!
! z: p3 Y; |1 s, @
作者: SHUZHEN    时间: 2015-7-16 18:18
说的太精辟了
作者: tuzhiquan    时间: 2015-7-20 16:50
说得非常好啊,我也是二年的初学者了,我也不是很懂C,我真的就像楼说的一样,我只会几条语句
作者: cartman    时间: 2015-8-28 11:46
学起单片机好费劲,我觉得自己还没开窍
作者: visualzz    时间: 2015-9-1 09:48
那需要记的是啥呢
作者: 电子-爱好者    时间: 2015-9-6 11:29
谢谢分享.............
作者: zpf    时间: 2015-9-15 17:50
有点意思!
作者: zsl    时间: 2015-11-5 16:24
被震撼了
作者: wangwo    时间: 2015-12-23 09:51
楼主发帖辛苦了,谢谢分享!!!!!!!!
作者: k2316314075    时间: 2018-7-10 22:02
谢谢分享
作者: V-zhong    时间: 2018-7-14 08:41
真说得那么简单就好咯
作者: zhaoxiyao5210    时间: 2018-7-14 09:07
学习




欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/) Powered by Discuz! X3.2