|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ z. b+ J- @7 e* I9 }
摘要1 i) [2 C: ]9 ~0 R4 s/ q, s
主要阐述了单片机用于网络应用时,在确定架构方案时应着重考虑的几个问题,这也是确定系统性价比的重要因素。5 O9 q, G# a! H! C; ?6 @: Q
包括RTOS的使用问题;阻塞或非阻塞调用的问题;采用单线程设计还是采用多线程设计的问题;存储器管理问题;采用何
, U/ S! @- D/ S$ {种网络接口的问题。并例举了典型的单片机网络应用系统的软硬件架构。在此架构基础上可进行多种用途的单片机网络应
" Y' Y2 p) T' l! G6 {+ T用系统的开发。& e- U% `# i3 F+ e0 f
o8 a( [( k$ Z; m' A/ C( `5 j
关键词:单片机,网络,RTOS,TCP/IP,阻塞,线程
) k. K$ X% c' b
8 l1 u1 ]8 L: V' V& V" a以单片机作为嵌人式系统的控制处理器件,实现嵌人式系- s! K* t. p& j5 V
统接人Internet的功能,从而实现远程控制、监视等服务,是目
9 ~- U2 L- `0 h d! b8 v前单片机应用的一个方面。如何架构一个高性价比,经济实用的( M3 c* n3 a& O/ x2 H+ |( |
系统是值得思考的问题。, v) y# o9 ]# M4 a: d/ Q
1首要考虑的几个问题
5 f5 a; r8 T$ J! T! l _( ]' Q1.1是否使用实时操作系统5 m" d# V/ r& R7 i
对于嵌人式系统是否使用操作系统-直是一个颇具争议的
8 c6 W7 e- C% H2 \7 O* K& _0 P- P问题。操作系统提供了基本的服务层,简化嵌人式应用程序开发
+ k6 [) o2 O8 V- w( A0 H. E者的工作。从另一个角度看,OS对于资源的使用有较多约束,导
3 E, \5 M* D3 r) C+ d' l致最终设备的费用提高。对于一些硬件资源比较有限,处理能力. d) O# c; X( |0 }
低的mcu来说,使用RTOS是-一个很大的负担。现在提出不使
( P1 O3 q" B; \7 G+ g用操作系统或核心是非常困难的,特别是当设备必须使用因特
4 H0 A) o4 P2 ?+ _% T' w网协议通信时。TCP/IP 栈会给嵌人式系统设计设置其他约束。
+ j+ H5 }! A7 `7 k; X如:TCP/IP栈必须有一个相对的准确时间源,以便进行时间管
" A* d( E6 I" q5 v# v* I理,处理各种发生在栈中的超时和定时活动。栈还必须对数据包
/ z6 Z6 U0 t* v9 k有一个资源管理系统,有可能是一个标准的动态存储管理系统。0 B- ]8 H* ]# i/ x: v2 t9 B
最理想的情况是使用本身自带TCP/IP协议栈的操作系, F4 C" ?* ]. m/ E4 S, n6 r+ Q
统。例如,全嵌人式的Linux版本(μCLinux)自动包括一个标准9 ?& }: m' m) s6 m+ X
的TCP/IP栈。这种模式的最大优点是软件的可使用性。桌面系
8 o+ ~2 D- Q$ T3 |/ N统和嵌入式设备上的Linux版本实际上是相同的,所以网络协; [8 W! ~ |; g& B/ A! B' z
议和应用程序可以很快地和十分容易地移植。这意味着针对标# R8 \9 W% ]: r% w9 Z/ s* a* z
准桌面系统使用的大量代码可以十分容易地经简化用于嵌人式, [/ }4 [* I% z# N) t9 q) E+ U
环境,节省了时间和精力。
* D* Y" K4 [/ V' x6 g$ \. u即便是μCLinux这样高度优化的、代码紧凑的嵌人式Lin-! A, O, {4 J# Q( r. K( _7 \
ux,其编译后产生的目标代码也在几百K的数量级,显然并不! F: r: ?# y( s2 c9 _
适用于低配的单片机中。但这并不意味着没有RTOS就无法用
' V G. B# U- D( T+ `: [4 Y单片机实现TCP/IP协议,意味着- -些使用低档单片机的嵌人
6 e, {( D: V+ U1 l+ r% N* Y* a; T式系统失去接人Internet的能力。只要可以提供所需的服务(时
: f* ]0 {# F% |1 Y钟、存储管理器等),即便没有RTOS,也可使用低档单片机如518 c# h1 \' n8 ]
等实现TCP/IP协议栈的功能,完成TCP/IP协议中的ARP、
" a7 B. G, B& s8 y2 uUDP、TCP、IP等协议。这样的实现对资源的要求较少,且实现速+ _9 G0 O# K A8 g: }
# ^# n9 e6 M7 S7 G W/ S
度较快。
) D& I9 N* L- \' C' c* ~0 D1.2阻塞或非阻塞调用5 \6 v8 I2 }; q6 I$ G4 w: y
阻塞调用是指调用结果返回之前,当前线程会被挂起,函数只
' |; J3 F$ w; i有在得到结果之后才会返回。非阻塞和阻塞的概念相对应,指在不% i. m% {4 J. L% \3 ~
能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。3 E3 X5 e: T0 V' ~* m4 F: C1 f6 {
标准的套接字层要定义阻塞语义,如果套接字中没有可用/ _6 e: w" ~! T! s7 p6 b: t1 D4 ^
数据,对其进行的读调用将会引起调用阻塞,直到有可用的数
% D& N2 f* b5 F) d, g据。写调用也是如此。如果写的字节数大于缓存中可用空间,写.
" k K7 B( x! M% V5 J8 H5 ?) ~调用被阻塞,直到写缓存中有足够的空间。如果无法使用操作系& O x8 o, o5 c5 Q K7 L
统,那么对于这些阻塞语义也不可用。套接字层也可以以非阻塞
+ y7 D- M4 I/ e- w9 g9 p, w M+ d方式工作,但效率有可能下降。有些商用的协议栈可以提供回调
7 Q' R' m- N7 d& p; j/ @机制,比如当针对某个套接字发生了某些类型事件时,就调用用
' z e9 ]" a+ i, ~* x+ @户定义的应用程序。
9 x1 ~- B) a' D1.3单线程和多线程设计
$ o0 M1 Y3 I) m/ V6 p0 X当使用RTOS时,ICP/IP协议栈可以定义成单任务,或者4 t% g; D: G/ ?7 e2 Y2 F
根据协议的不同层来进行划分。大多数情况,在栈和数据链路层.4 ?$ g8 ]$ @5 K3 S
之间存在着区别。媒体访问控制(MAC)或串行端口(针对PPP/ ^! m9 ~1 n B4 \/ ~, K# H
SLIP)因为其异步性质,通常是在TCP/IP栈软件上划分。
/ [& a* ~, K# I5 }% x0 m3 C7 G1.4存储器管理问题. h7 n; e* O" ~5 G
嵌入式系统在设计中要考虑降低成本。这就意味着可以使
8 P0 L8 I: }( M用的硬件资源也会相应减少,比如存储器件,闪存/非易失存储( k6 ~9 y1 a7 k& ?: L
和RAM。RAM数量小意味着要特别注意确定TCP/IP栈用来分
4 h' F: @. X1 U: ^) d3 j$ f8 _配数据包的方法。
4 x1 I0 Q; V/ t0 ]' ~! ~9 l分配数据包的方法通常可以在嵌人栈中配置,特别是对OS/ I6 X1 b: j5 @! k j. Q& K
核心未知的情况下。可以采用的两种主要方法是动态分配或者+ e3 L# X% x" Z+ f
预先分配。
5 g2 l% N6 I# d6 w# ^包的动态分配意味着只要需要包,就可以通过堆栈子系统: ?6 a5 x0 i9 K! s& _3 [2 f% O4 W
进行动态分配。堆栈只不过是可以根据应用程序的需要划分成 y/ K! W8 Z& T, Q/ X4 ?1 N( {/ u
小块的一一个大块的存储器。堆栈还被用做一般化资 源管理,所以4 u7 S; A4 m; m1 n
它是一个系统存储器管理的基本基地。动态存储器管理存在的
6 q9 p" e6 H6 n9 b& W0 T9 W# F2 p/ J基本问题是垃圾收集。当包返回到堆栈时,只要这可能是大的可- M n, P) j8 z: o9 s2 S
3 y. G, |" {- L6 S& D& ]. H4 M7 o; x/ p, Q* {
0 c$ P0 V# [/ `- O; V附件下载:
0 t) c6 @) e* ^$ o- X
' Q' \8 A0 o; D5 ]& s8 k+ v |
|