Dễ thấy có nhiều lỗi xảy ra trên đường truyền nhưng chương trình vẫn theo đúng kịch
bản:
TCP out of order: gói tin bị lỗi
TCP fast retransmission: cơ chế hoạt động như sau nếu người gửi nhận được 3 bản sao
ACK cùng giá trị ACK number thì TCP sender sẽ chắc chắn rằng segmet( đoạn) tiếp
theo sẽ bị drop (mất) và không đến theo trật tự và TCp sender sẽ gửi lại gói bị drop đó.
Kết luận : Chương trình xây dựng đúng với kịch bản đã đề ra đo đạc 1 quá trình gửi dữ
liệu xảy ra trên mạng.
Về công thức thông lượng sử dụng chúng em dựa trên các tài liệu tham khảo và các phần
mềm đo băng thông , thông lượng đều dựa trên cùng định nghĩa để xây dựng công thức.
88 trang |
Chia sẻ: lylyngoc | Lượt xem: 3901 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Luận văn Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
r , server phải mở port cho kết nối đó. Ba bước diễn ra
như sau:
29
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
_Client yêu cầu mở cổng dịch vụ bằng cách gửi một gói tin SYN đến server,
trong gói tin này tham số sequence number gán giá trị ngẫu nhiên X.
_Server hồi đáp bằng cách gửi lại client gói tin SYN-ACK, trong gói tin này
ACK number gán X+1, sequence number gán Y.
_Để hoàn tất bắt tay 3 bước, client gửi tới server gói tin tin ACK, trong gói tin
này tham số sequence number gán X+1, ACK number gán Y+1.
Như vậy sau khi có kết nối ta đã có đủ thông tin: Từ IP nào, port nào , giao thức
vận chuyển (TCP/UDP) đến địa chỉ IP và port bên kia để bắt đầu việc truyền và nhận dữ
liệu.
1.6 Kịch bản đo
1.6.1 Đo trễ RTT
Trễ được xác định bởi thời gian bắt đầu gói tin Ping được gửi từ MC đến TC và
thời gian kết thúc gói Pong được gửi từ TC trả về MC.
Hình 2.15 Công thức tính trễ RTT
Trên đường truyền khảo sát là đường truyền Powerline, khoảng thời gian trễ giữa
MC – Modem và Modem – TC là rất nhỏ và có thể bỏ qua so với khoảng thời gian trễ
giữa Modem – Modem (đoạn đường truyền chính cần đo). Vì thế kết quả nhận được có
thể được coi là trễ trên đường truyền Powerline.
Chú ý phân biệt Ping và Pong qua trường Type và Code của gói tin ICMP.
30
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Hình 2.16 Kịch bản đo trễ RTT
1.6.2 Đo thông lượng
Hình 2.17 Kịch bản đo thông lượng
31
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Để đo thông lượng, ta định nghĩa thông lượng là lượng dữ liệu gửi thành công
trên đường truyền trong một đơn vị thời gian.
Quá trình đo được thực hiện theo trình tự sau:
_Thực hiện kết nối giữa MC – TC theo mô hình Client – Server. Đặt MC và TC
vào trạng thái sẵn sàng cho quá trình truyền và gửi dữ liệu.
_Bắt đầu đo, MC gửi gói tin Request đến TC để thông báo bắt đầu quá trình đo.
TC nhận và gửi trả lại MC gói Request_ACK để báo hiệu TC đã sẵn sàng nhận dữ liệu.
_Nhận được gói Request_ACK, MC thực hiện truyền một lượng lớn dữ liệu
được phân thành nhiều gói Data có kích thước định sẵn cho TC. Trong quá trình này TC
nhận và cập nhật bộ đếm dữ liệu đã nhận.
_Khi lượng dữ liệu truyền đã đủ, MC gửi gói Fin để thông báo kết thúc quá trình
truyền dữ liệu. TC nhận và gửi trả lại MC gói Fin_ACK để báo hiệu TC dã kết thúc
trạng thái nhận dữ liệu và chuẩn bị gửi kết quả nhận được cho MC.
_TC tạo và gửi gói Result chứa thông tin lượng dữ liệu đã nhận cho MC. MC lấy
thông tin này để tổng hợp ra thông lượng đo được theo công thức:
Hình 2.18 Công thức tính thông lượng
1.6.3 Cấu trúc gói tin
Để thực hiện việc đo, ta phải định nghĩa các gói tin được sử dụng trong quá trình
truyền dữ liệu để đảm bảo thực hiện đúng kịch bản đo. Cụ thể là các gói Request, Data,
Fin, Result và ACK.
Dưới đây là mô tả cấu trúc một gói tin dữ liệu được sử dụng trong quá trình đo,
độ dài dữ liệu được cố định trong hai trường hợp là 1000 bytes và 100 bytes.
32
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Bảng 2.1 Cấu trúc gói tin sử dụng
IP header TCP header Data
20 bytes 20 bytes 1000/100 bytes
Sau phần IP header và TCP header, 5 bytes đầu tiên của phần dữ liệu gói tin sẽ
được sử dụng để định dạng gói tin theo cấu trúc 1 – 4. Giá trị byte đầu tiên Code xác
định loại gói trong các gói tin kể trên. Dãy 4 bytes tiếp theo Parameter lưu thông số đặc
trưng tùy thuộc vào loại gói tin đó. Sau dãy 5 bytes này sẽ là dữ liệu ngẫu nhiên có độ
dài tùy thuộc vào kích thước gói tin đã được định sẵn.
Bảng 2.2 Cấu trúc dữ liệu các gói tin
Code Parameter Restbytes
1 byte 4 byte Changeable
1.7 Điều khiển qua Internet
1.7.1 Gửi và nhận dữ liệu
Sử dụng mô hình Client – Server, MC và Web server đóng vai trò hai điểm gửi
nhận dữ liệu. Gồm có hai luồng chính là từ Web server gửi yêu cầu điều khiển quá trình
đo đến MC và từ MC gửi kết quả đến Web server. Quá trình gửi nhận được thực hiện
qua một Server ảo đặt tại MC.
Để truyền dữ liệu ta phải tạo socket, thực hiện kết nối từ MC đến Web server
thông qua địa chỉ IP và cổng kết nối. Sau khi kết nối thành công, dữ liệu cần gửi được
đóng vào trong một struct với hai trường cơ bản là nội dung dữ liệu cần gửi và địa chỉ
của bên gửi.
Ở Server ảo đặt tại MC, khi có dữ liệu đến, Server thực hiện việc bóc tách nội
dung dữ liệu nhận được và cập nhật nội dung đó vào cơ sở dữ liệu. Server ảo đóng vai
trò trung gian giữa Web server và MC.
33
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
1.7.2 Hiển thị dữ liệu lên Web
Để thuận tiện cho việc điều khiển, ta phải thiết kế giao diện Web giúp người dùng
nhập các thông số điều khiển, hiển thị kết quả đo được và tra cứu cơ sở dữ liệu đo.
Ngôn ngữ sử dụng là PHP, HTML và MySQL.
1.8 Tổng quan về STR9-comstick
1.8.1 Tổng quan
Hình 2.19 STR9-comstick
Các thông số chính:
Sử dụng ARM966E – 96Mhz.
544 Kb flash memory – 96 Kb SRAM.
3xUART, 2xSPI, 80 I/Os, 4xTimers.
10-bit ADC, CAN, USB, Real Time Clock, AC Motor Control.
Ethernet MAC.
34
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Hình 2.20 Các thông số chính của STR9-comstick
Một số ưu điểm của STR9-comstick:
_Hỗ trợ Ethernet.
_SRAM và Flash Memories lớn.
_Thiết kế nhỏ gọn, dễ dàng cho việc triển khai cài đặt hệ thống.
_Tiêu thụ điện năng thấp.
_Hỗ trợ công cụ phát triển phần mềm độc lập và bộ thư viện đầy đủ.
35
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
1.9 Thư viện MicroIP (uIP)
Cùng với thành công của Internet, bộ giao thức TCP/IP đã trở thành chuẩn giao
tiếp toàn cầu. TCP/IP là giao thức cơ bản được sử dụng để chuyển trang web, email, file
v.v… trên Internet. Đối với các hệ thống nhúng, khả năng hỗ trợ TCP/IP có thể làm
chúng kết nối trực tiếp vào mạng nội bộ hoặc thậm chí là mạng Internet toàn cầu. Các
thiết bị nhúng hỗ trợ đầy đủ TCP/IP sẽ là những công dân mạng hạng nhất do có thể giao
tiếp đầy đủ với các máy khác trong mạng.
TCP/IP truyền thống yêu cầu quá nhiều cả về kích thước mã lệnh và cách sử dụng
bộ nhớ trong các hệ thống 8 hoặc 16-bit. Kích thước mã khoảng vài trăm KB và yêu cầu
bộ nhớ ram hàng trăm KB khiến các hệ thống với vài chục KB RAM và bộ nhớ không
thể đáp ứng đầy đủ bộ giao thức này.
Bộ giao thứ uIP được thiết kế theo chỉ định tuyệt đối tối thiểu các tính năng cần
thiết cho để giao tiếp với một thiết bị hỗ trợ TCP/IP đầy đủ. Hầu hết các hệ thống nhúng
luôn luôn tương tác với các hệ thống hỗ trợ đầy đủ TCP/IP. Theo giả định này, uIP loại
bỏ một số cơ chế của TCP/IP hiếm khi được sử dụng và chỉ giữ lại những cơ chế cần
thiết. Nó chỉ có thể xử lý một giao diện mạng duy nhất và có chứa các giao thức IP,
ICMP, UDP và TCP. uIP được viết bằng ngôn ngữ lập trình C.
Do đặc điểm hệ thống nên STR9-comstick chỉ hỗ trợ thư viện MicroIP và ta sẽ
phát triển hệ thống dựa trên nghiên cứu thư viện này.
36
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Xây dựng chương trình
1.10 Giải thuật
1.10.1Đo Trễ (RTT)
Hình 3.21 Giải thuật đo trễ RTT
Phía TC, TC thực hiện vòng lặp liên tục đọc bộ đệm gói tin gửi đến. Trạng thái
lúc này của TC là trạng thái chờ (Standby).
Bằng cách kiểm tra bộ đệm này, TC nhận biết được đó có phải là gói PING gửi
từ MC hay không. Nếu không phải thì TC tiếp tục ở trạng thái chờ.
37
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Nếu gói tin gửi đến là gói PING, chương trình nhảy khỏi vòng lặp và chuyển
trạng thái thành “Ping”. Lúc này TC đã nhận được yêu cầu ping từ MC.
Chương trình thực hiện việc chuyển trường Type của gói PING gửi đến thành 0
(từ giá trị là 8), đảo ngược giá trị của hai trường Source IP Address và Destination IP
Address. Lúc này TC đã có một gói tin PONG đúng yêu cầu.
Gói PONG vừa được tạo sẽ được gán cho biến dữ liệu gửi để thực hiện việc
truyền lại cho MC. Kết thúc quá trình gửi, TC chuyển trở lại trạng thái chờ và thực hiện
vòng lặp mới.
1.10.2Đo thông lượng
Bắt đầu tiến trình đo, TC thực hiện việc khởi tạo socket, thiết lập lắng nghe TCP
ở cổng định trước (Mặc định là 2001).
MC thực hiện lệnh kết nối TCP (cụ thể gồm 3 bước SYN, SYN+ACK, ACK) qua
cổng định trước với TC. MC sẽ bắt đầu tiến trình đo nếu kết nối thành công.
TC lúc này ở trạng thái chờ và thực hiện vòng lặp liên tục đọc bộ đệm. Nếu đó là
gói tin TCP thì chương trình thực hiện việc kiểm tra 5 bytes đầu tiên của dữ liệu gói tin
đó và thực hiện các tiến trình tương ứng theo kịch bản đo.
_Là gói Request, TC tạo gói Request_ACK và gửi lại MC. TC chuyển sang
trạng thái “Throughput”.
_Là gói Data, TC cập nhật bộ đếm dữ liệu nhận được.
_Là gói Fin, TC tạo gói Fin_ACK và gửi lại MC. Tiếp đó TC tạo gói Result và
gửi lại MC.
Kết thúc tiến trình, TC chuyển sang trạng thái chờ và thực hiện vòng lặp mới.
38
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Hình 3.22 Giải thuật đo thông lượng
1.10.3Cấu trúc gói tin phục vụ giải thuật
Dựa trên cơ sở các giải thuật chương trình đã được đưa ra, ta định nghĩa cụ thể
các gói tin điều khiển, gói tin dữ liệu phục vụ cho quá trình đo thông lượng, bao gồm hai
39
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
quá trình riêng biệt: đo thông lượng hướng lên và thông lượng hướng xuống. Các gói tin
được phân biệt dựa trên Code.
Bảng 3.3 Cấu trúc gói tin đo thông lượng
Name Code
(1 byte)
Parameter
(4 bytes)
Restbytes
Packetdata 0 Packet ID
Packet ACK 1 Code of packet
Gen request (small) 2 Number of packet to generate (small packet)
Gen request (big) 3 Number of packet to generate (big packet)
Gen fin 4
Rec request (small) 5
Rec request (big) 6
Rec fin 7
Rec result 8 Number of received packet
(a) Thông lượng hướng lên (Uplink Transmission Throughput)
MC nhận, TC tạo dữ liệu.
Hình 3.23 Quá trình đo thông lượng hướng lên
_MC gửi gói tin gen_req bao gồm thông tin về lượng dữ liệu cần tạo và gửi trong
quá trình đo để yêu cầu TC gửi dữ liệu. Thông tin này được lưu trong trường Parameter.
40
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
_TC nhận gen_req và gửi lại gói ACK để xác nhận và bắt đầu gửi dữ liệu theo
yêu cầu của gen_req. Gói tin ACK kèm theo thông số phụ là Code của gói tin cần phản
hồi. Ví dụ phản hồi cho gen_req thì gói ACK có Parameter bằng Code của gói
gen_req. Tiếp đó TC bắt đầu quá trình gửi liên tục các gói data cho đến khi lượng dữ
liệu gửi đủ yêu cầu. Sau quá trình này, TC gửi gói gen_fin để thông báo đến MC biết đã
kết thúc phiên gửi dữ liệu.
_MC nhận dữ liệu gồm các gói data cho đến khi nhận được gói tin gen_fin thì
tổng hợp đưa ra kết quả đo.
(b) Thông lượng hướng xuống (Downlink Transmission Throughput)
Ngược lại với hướng lên, MC tạo dữ liệu, TC nhận dữ liệu.
Hình 3.24 Quá trình đo thông lượng hướng xuống
_MC gửi gói tin rec_req đến TC để thông báo bắt đầu quá trình đo.
_TD nhận rec_req và gửi lại gói ACK để xác nhận sẵn sàng nhận dữ liệu.
_Khi MC nhận được gói ACK của rec_req liền lập tức gửi dữ liệu được phân
thành các gói data đến TC. TC nhận các gói data và thực hiện việc đếm số dữ liệu nhận
được.
_Khi đã gửi đủ dữ liệu, MC kết thúc quá trình gửi bằng cách gửi gói rec_fin.
41
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
_TC nhận gói rec_fin và gửi lại gói ACK để xác nhận kết thúc quá trình nhận.
Sau đó TC tổng hợp lượng dữ liệu nhận được và gửi gói rec_result chứa thông tin về
lượng dữ liệu nhận được trong quá trình đo cho MC. Thông tin này được lưu ở
Parameter.
_MC nhận gói rec_result và tổng hợp đưa ra kết quả đo.
1.11 Chương trình đo phía MC – MC Tool
1.11.1Tổng quan
Chương trình được viết trên nền Microsoft Visual C# giao diện winform.
Hình 3.25 Giao diện chương trình MC Tool
Chương trình có hai kiểu đo chính là Auto Mode và Manual Mode. Auto Mode
là đo với các thông số điều khiển được đọc từ file config.txt nhận được từ người dùng
qua Internet. Manual Mode là đo với các thông số điều khiển được thiết lập trực tiếp từ
MC.
42
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Hình 3.26 Giao diện chọn kiểu đo
Các thiết lập chính bao gồm địa chỉ IP của TC (mặc định là 192.168.1.10), cổng
lắng nghe của TC (mặc định là 2001). Thời gian chờ ACK timeout (mặc định 1000ms).
Số lần Ping, lượng dữ liệu truyền trong một lần đo thông lượng. Kiểu đo thông lượng
(hướng lên – Uplink, hướng xuống – Downlink), kích thước gói tin sử dụng (1000 bytes
hoặc 100 bytes).
1.11.2Các khối hàm chính
Để xây dựng chương trình đo tại MC, ta phải chia thành nhiều khối hàm đảm
nhận các nhiệm vụ khác nhau. MC Tool bao gồm 5 khối hàm chính như sau.
(a) Khối giao tiếp hệ thống
Nhiệm vụ chính của khối này là đọc và ghi dữ liệu các file. Ứng dụng trong hệ
thống đó là việc đọc các file thiết lập thông số (config.txt) được gửi đến MC từ máy chủ
web, việc ghi kết quả đo được ra file rồi gửi lại máy chủ web.
Thao tác đọc/ghi file được thực hiện bởi thư viện System.IO với các hàm
StreamReader, file.ReadLine(), file.WriteLine().
Khối này cũng làm nhiệm vụ cập nhật các thông số điều khiển quá trình đo từ các
textbox do người dùng nhập vào hoăc từ file config nhận được qua máy chủ web.
(b) Khối ping
Nhiệm vụ chính của khối này là thực hiện lệnh ping theo yêu cầu. Ứng dụng
trong hệ thống đó là việc thực hiện kịch bản đo trễ, gửi gói ping theo yêu cầu và xử lý
kết quả đo nhận được.
43
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Thao tác được thực hiện nhờ thư viện System.Net.NetworkInformation.
(c) Khối socket
Nhiệm vụ chính của khối này là khởi tạo socket để gửi nhận dữ liệu. Ứng dụng
trong hệ thống đó là việc thực hiện kịch bản đo thông lượng.
Thao tác được thực hiện nhờ thư viện System.Net và System.Net.Sockets.
Khởi tạo socket TCP với các khai báo TCPClient, các hàm TCPClient.Connect(),
TCPClient.Close(). Gửi và nhận dữ liệu với khai báo NetworkStream, các hàm
networkstream.Read() và hàm networkstream.Write().
Quá trình đo thông lượng cũng được thực hiện trong khối này bằng cách thiết lập
quá trình gửi nhận các gói tin TCP theo kịch bản được định sẵn.
(d) Khối giao diện
Nhiệm vụ chính của khối này là xây dựng giao diện tương tác người dùng. Ứng
dụng trong hệ thống đó là việc xây dựng một phần mềm đo với giao diện khoa học, cụ
thể, dễ điều khiển.
Thao tác được thực hiện nhờ các thư viện System.Windows.Forms, System.Text,
System.Drawing.
(e) Khối phụ trợ
Nhiệm vụ chính của khối này là khởi tạo các công cụ cần thiết trong quá trình xây
dựng chương trình. Ứng dụng trong hệ thống đó là việc xây dựng bộ đếm thời gian có
độ chính xác rất cao theo xung nhịp CPU dùng để đo thời gian gửi nhận dữ liệu, việc
xây dựng cơ chế điều khiển luồng để đảm bảo các tiến trình đo được thông suốt và quả
lý bộ nhớ một cách khoa học.
Thao tác được thực hiện bởi thư viện System.Threading và
System.Runtime.InteropServices.
44
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
1.11.3Chương trình đo
(a) Khởi tạo
Khởi tạo các thông số chính để chương trình đo hoạt động bình thường.
Hình 3.27 Khởi tạo chương trình
(b) Các module chính
Bộ đếm thời gian độ chính xác cao: dùng để đo thời gian tiến trình gửi nhận dữ
liệu một cách chính xác theo xung nhịp của bộ vi xử lý máy tính chạy MC.
Pingsender: phục vụ cho khối Ping.
Uplink: phục vụ cho đo thông lượng hướng lên.
Downlink: phục vu cho đo thông lượng hướng xuống.
45
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Hình 3.28 Bộ đếm thời gian
46
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Hình 3.29 Thời gian truyền
1.12 Chương trình nhúng trên TC
1.12.1Cấu trúc chương trình
Trước khi đi vào cụ thể chương trình nhúng trên TC, ta cần có một cái nhìn tổng
quát về cấu trúc của chương trình. Do yêu cầu hệ thống đòi hỏi tập trung vào phần
Ethernet nên chương trình được xây dựng cũng dựa trên sườn lấy thư viện uIP là chủ
đạo. Để TC có thể hoạt động thì ta phải xây dựng chương trình dựa trên các module
chính như đề cập ở bảng dưới đây.
Bảng 3.4 Các module chính của chương trình
Main.c Mã chính của chương trình
Startup912.s File ASM khởi tạo cho STR9
Startup_generic.s File ASM chứa trong Startup912.s
Interrupt.c Xử lý ngắt
Memcopy.s Xử lý bộ nhớ
91x_fmi.c Thư viện cơ bản quản lý bộ nhớ
91x_gpio.c Thư viện cơ bản quản lý giao tiếp IO
91x_scu.c Thư viện cơ bản quản lý hoạt động điều khiển hệ thống
91x_enet.c Thư viện cơ bản quản lý Ethernet
47
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
91x_vic.c Thư viện cơ bản quản lý vector ngắt
Uipmain.c uIP stack main
Uip.c uIP stack core
Uip_arp.c Xử lý giao thức ARP
Uip_arch.c Xử lý kiến trúc đặc biệt
Cgi.c Mã CGI
Fs.c Mô phỏng file system
Fsdata.c Nội dung web
Httpd.c Web server
Memb.c Web server
Telnettd-shell.c Máy chủ telnet
Main.c Chương trình chính bắt đầu bằng việc thiết lập các thủ tục phần cứng liên quan
(SCU, GPIO và Ethernet). Mã khởi động trong “startup912.s” khởi tạo những thành
phần như PLL, clock và memory. Sau lần cấu hình này ta sẽ không thay đổi những thành
phần đó nữa. Tiếp đó là vòng lặp chính của chương trình.
Startup912.s Như tên của nó bao hàm, code khởi động được đặt để chạy từ vector reset.
Nó cung cấp bảng vector ngoại lệ, cũng như khởi đẩu stack pointer cho các chế độ hoạt
động khác nhau. Ta sử dụng code mặc định.
Interrupt.c Chứa các vector ngắt.
uIPMain.c Khởi tạo uIP stack với các chức năng cơ bản của ARP. Khởi tạo cũng bắt
đầu WEB server bằng cách gọi hàm “httpd_init()”. Giao thức được xử lý trong một vòng
lặp vô tận. Bằng cách gọi (size = ENET_HandleRxPkt(uip_buf);) ta kiểm tra được trạng
thái bộ đệm đầu vào. Nếu dữ liệu nhận được trả về giá trị lớn hơn 0 thì hàm tương ứng
sẽ được thực hiện.
uip.c Chứa phần chính của uIP và xử lý giao tiếp TCP/IP.
uip_arp.c Xử lý ARP.
uip_arch.c Xử lý kiến trúc đặc biệt.
cgi.c Cung cấp các hàm theo ngôn ngữ web CGI phục vụ cho web server.
48
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
fs.c Chứa các file hệ thống cơ bản của WEB server, được gọi bởi mã CGI. Vòng lặp
chính “fsopen()” cho phép WEB server mở đúng file cần thiết cho trình duyệt.
fsdata.c Chứa nội dung của chương trình WEB server. Các file HTML, CGI, ảnh được
mã hóa thành mảng ký tự được chứa trong đây. Ta sử dụng công cụ đi kèm để thực hiện
điều này.
httpd.c Chứa các thủ tục của WEB server. Các chức năng cơ bản của CGI nằm ở đây.
Khởi tạo bằng hàm “httpd_init()” từ vòng lặp chính.
1.12.2Thư viện STR9
Thư viện chương trình của TC dùng trong việc xây dựng hệ thống sẽ được miêu
tả dưới đây.
Bảng 3.5 Các chức năng hỗ trợ bởi thư viện STR9
Chức năng Miêu tả
ADC Analog-to-Digital Converter
CAN Controller Area Network
SCU System Control Unit
DMA DMA Controller
VIC Vectored Interrupt Controller
GPIO General Purpose I/O Ports
I2C I2C Interface module
RTC Real Time Clock
WIU Wake-Up Interrupt Unit
AHBAPB AHB/APB Bridges
MC 3-phase induction Motor Controller (MC)
FMI Flash Memory Interface
EMI External Memory Interface
SSP Synchronous Serial Peripheral
TIM Standard Timer
UART Universal Asynchronous Receiver Transmitter
WDG Watchdog Timer
49
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Hình 3.30 Cấu trúc thư viện STR9
50
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Hình 3.31 Nội dung thư viện
Folder này chứa các thành phần chính của thư viện.
Folder inc chứa các file header, người dùng không được khuyến khích thay đổi
nội dung các file này, bao gồm:
91x_type.h: Chứa các thiết lập về loại dữ liệu và biến được sử dụng trong các
thư viện khác.
91x_map.h: Chứa bản đồ bộ nhớ và cấu trúc các thanh ghi.
91x_lib.h: Header chính chứa các header khác.
91x_ppp.h: Chứa các cấu trúc hàm, dữ liệu và biến.
51
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Folder src chứa mã nguồn thư viện, người dùng không được khuyến khích thay
đổi nội dung các file này, bao gồm:
91x_ppp.c: Chứa mã nguồn cấu trúc hàm.
Chú ý: Các thư viện được lập trình theo Strict ANSI-C và không phụ thuộc vào
bất cứ sự liên kết phần mềm nào khác.
Hình 3.32 Kiến trúc thư viện phần mềm
1.12.3Quy tắc xây dựng mã nguồn
Những quy tắc và chú ý sau được sử dụng khi xây dựng thư viện phần mềm.
(a) Các types cụ thể được quy định cho các biến có kiểu và kích thước là cố định.
Các types này được định nghĩa trong thư viện 91x_type.h:
typedef unsigned long u32;
typedef unsigned short u16;
typedef unsigned char u8;
52
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
typedef signed long s32;
typedef signed shorts16;
typedef signed char s8;
typedef volatile unsigned long vu32;
typedef volatile unsigned short vu16;
typedef volatile unsigned char vu8;
typedef volatile signed long vs32;
typedef volatile signed short vs16;
typedef volatile signed char vs8;
(b) Kiểu bool
Được định nghĩa trong 91x_type.h như sau:
typedef enum
{
FALSE = 0,
TRUE = !FALSE
} bool;
(c) FlagStatus và ITStatus
Hai types này được định nghĩa trong 91x_type.h. Hai giá trị có thể được gán cho
biến này: SET hoặc RESET.
53
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
(d) FunctionalState
Type này được định nghĩa trong 91x_type.h. Hai giá trị có thể được gán cho biến
này: ENABLE hoặc DISABLE.
(e) ErrorStatus
Type này được định nghĩa trong 91x_type.h. Hai giá trị có thể được gán cho biến
này: SUCCESS hoặc ERROR.
(f) Con trỏ
Con trỏ tới thiết bị ngoại vi được sử dụng để truy cập vào các thanh ghi điều
khiển kiểm soát các thiết bị ngoại vi. Con trò trỏ đến cấu trúc dữ liệu đại diện cho sự ánh
xạ các thanh ghi điều khiển. Cấu trúc được định nghĩa cho mỗi một thiết bị ngoại vi
được thực hiện trong 91x_map.h.
Bảng 3.6 Cấu trúc thanh ghi bộ nhớ
Register Description
BBSR Boot Bank Size Register
NBBSR Non-Boot Bank Size Register
BBADR Boot Bank Base Address Register
NBBADR Non-Boot Bank Base Address Register
CR Control Register
SR Status Register
BCE5ADDR BC Fifth Entry Target Address Register
Bảng 3.7 FMI_BootBankSize
FMI_BootBankSize Meaning
0 32 KBytes
1 64 KBytes
2 128 KBytes
3 256 KBytes
4 512 KBytes
... ...
0xB 64 MBytes
54
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Bảng 3.8 FMI_NonBootBankSize
FMI_NonBootBank
Size
Meaning
0 8 KBytes
1 16 KBytes
2 32 KBytes
3 64 KBytes
... ...
0xD 64 MBytes
1.12.4Khối hàm uIP
(a) Các hàm thiết lập
#define uip_sethostaddr(addr)
Thiết lập địa chỉ IP.
#define uip_gethost addr(addr)
Lấy địa chỉ IP.
#define uip_setdraddr(addr)
Thiết lập địa chỉ IP của router.
#define uip_setnetmask(addr)
Thiết lập netmask.
#define uip_getdraddr(addr)
Lấy địa chỉ IP của router.
#define uip_getnetmask(addr)
Lấy netmask.
55
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
#define uip_setethaddr(eaddr)
Thiết lập địa chỉ MAC.
(b) Các hàm khởi tạo
#void uip_init(void)
#void uip_setipid(u16_t id)
Khởi tạo khối microIP.
(c) Các hàm ứng dụng
#define uip_datalen()
Độ dài hiện tại của dữ liệu đến.
#define uip_close()
Đóng kết nối hiện tại.
#define uip_abort()
Hủy kết nối hiện tại.
#define uip_stop()
Gửi yêu cầu dừng truyền dữ liệu tới đối tượng đang truyền.
#define uip_stopped(conn)
Kiểm tra kết nối hiện tại đã bị dừng trước đó bởi hàm uip_stop() chưa?
#define uip_newdata()
Kiểm tra có dữ liệu mới hay không?
#define uip_acked()
Kiểm tra dữ liệu gửi trước đó đã được nhận chưa?
56
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
#define uip_connected()
Kiểm tra kết nối đã thành công chưa?
#define uip_closed()
Kiểm tra kết nối có bị đóng bởi phía bên kia?
#define uip_aborted()
Kiểm tra kết nối có bị hủy bởi phía bên kia?
#define uip_timedout()
Kiểm tra kết nối bị timed out?
#define uip_listen(u16_t port)
Bắt đầu lắng nghe TCP trên cổng port.
#define uip_unlisten(u16_t port)
Dừng lắng nghe TCP trên cổng port.
#uip_conn * uip_connect(uip_ipaddr_t*ripaddr, u16_t port)
Kết nối đến địa chỉ ripaddr và cổng port.
#uip_send(const void *data, int len)
Gửi dữ liệu data, độ dài len trên kết nối hiện tại.
57
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Hình 3.33 Các thiết lập uIP
58
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
1.12.5Liên kết thư viện uIP
(a) Vòng lặp điều khiển chính
Khối uIP có thể chạy như là một tiến trình trong hệ thống đa nhiệm hoặc đảm
nhận vai trò là chương trình chính trong hệ thống đơn nhiệm. Trong cả hai trường hợp,
vòng lặp chính của chương trình thực hiện liên tục hai việc:
_Kiểm tra xem có gói tin được gửi đến từ mạng?
_Kiểm tra xem timeout định kỳ có xảy ra?
Nếu một gói tin được gửi đến, chức năng xử lý đầu vào uip_input() được kích
hoạt trong vòng lặp điều khiển chính. Hàm uip_input() gọi chương trình tương ứng với
gói tin gửi đến, chương trình này có thể tạo ra một hoặc nhiều gói tin trả lời để gửi lại.
Nếu vậy, hàm điều khiển thiết bị mạng sẽ được gọi để gửi các gói tin đó.
(b) Ứng dụng gói tin
Ứng dụng các gói tin phải được thực hiện trong hàm uip_appcall(), hàm được gọi
mỗi khi có bất cứ một sự kiện nào xảy ra. Mỗi sự kiện có một chức năng kiểm tra tương
ứng được sử dụng để phân biệt giữa các sự kiện khác nhau. Chú ý rằng các sự kiện nhất
định có thể xảy ra trong sự kết hợp với nhau (ví dụ: sự kiện dữ liệu mới gửi đến có thể
xảy ra cùng một lúc với sự kiện dữ liệu gửi đã được công nhận).
(c) Con trỏ kết nối
Khi các ứng dụng được gọi bởi uIP, biến toàn cục uip_conn được thiết lập trỏ đến
cấu trúc uip_conn cho kết nối đang được xử lý hiện thời, và được gọi là “kết nối hiện
thời” (current connection). Các trường trong cấu trúc uip_conn cho kết nối hiện thời có
thể được sử dụng. Ví dụ, để phân biệt giữa các dịch vụ khác nhau, hoặc để kiểm tra địa
chỉ IP mà kết nối được kết nối. Một điển hình sẽ được sử dụng là việc kiểm tra trường
uip_conn->lport (thông tin cổng TCP) để quyết định dịch vụ kết nối cần cung cấp. Ngoài
ra, một ứng dụng có thể hoạt động như một máy chủ HTTP nếu giá trị uip_conn-lport
bằng 80 và hoạt động như một máy chủ Telnet nếu giá trị đó bằng 23.
59
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
(d) Nhận dữ liệu
Nếu kiểm tra thấy hàm uip_newdata() trả về giá trị khác 0, điều đó cho thấy máy
chủ từ xa của kết nối đã gửi dữ liệu mới. Con trỏ uip_appdata dược trỏ tới dữ liệu thực
tế. Kích thước của dữ liệu có thể thu được thông qua hàm uip_datalen(). Dữ liệu không
phải là bộ đệm của uIP, nhưng sẽ bị ghi đè lên sau khi ứng dụng trả về giá trị tương ứng.
Bởi vậy các ứng dụng sẽ phải hoặc là xử lý trực tiếp trên dữ liệu gửi đến hoặc là phải tự
sao chép các dữ liệu gửi đến vào một bộ đệm để xử lý sau.
(e) Gửi dữ liệu
Khi gửi dữ liệu, uIP điều chỉnh độ dài dữ liệu gửi bằng cách áp dụng theo không
gian bộ đệm có sẵn và kích thước cửa sổ TCP của bên nhận. Kích thước không gian bộ
đệm được quyết định bởi cấu hình bộ nhớ. Do đó có thể các dữ liệu gửi sẽ không đến
được nơi nhận, và ứng dụng có thể sử dụng hàm uip_mss() để xem có bao nhiêu dữ liệu
sẽ được gửi thực tế qua các ngăn xếp.
Các ứng dụng gửi dữ liệu bằng cách sử dụng hàm uip_send(). Hàm này có hai
thông số: một trỏ tới dữ liệu cần gửi đi và một là chiều dài của dữ liệu. Nếu ứng dụng
cần sử dụng bộ nhớ RAM để tạo các dữ liệu thực tế được gửi đi, bộ đệm gói tin (được
trỏ đến bởi con trỏ uip_appdata) có thể được sử dụng cho mục đích này.
Các ứng dụng chỉ có thể gửi đi một đoạn dữ liệu tai một thời điểm trên một kết
nối và không thể gọi nhiều hơn một lần hàm uip_send() cho mỗi một ứng dụng được
kích hoạt. Chỉ có dữ liệu từ lần gọi cuối cùng sẽ được gửi đi.
(f) Truyền lại dữ liệu
Cơ chế truyền lại dữ liệu được điều khiển bởi bộ đếm thời gian định kì TCP. Mỗi
khi bộ đếm thời gian định kì được gọi, bộ đếm giờ truyền lại cho mỗi kết nối bị giảm đi.
Nếu bộ đếm giờ giảm đến 0, dữ liệu sẽ được truyền lại bằng cahcs thiết lập cờ
uip_rexmit(). Ứng dụng phải kiểm tra cờ uip_rexmit() và tạo dữ liệu giống với dữ liệu
đã được gửi trước đó.
60
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
(g) Đóng kết nối
Ứng dụng đóng kết nối hiện tại bằng cách gọi hàm uip_close(). Thực hiện điều
này sẽ khiến kết nối được đóng lại một cách sạch sẽ. Trong trường hợp có lỗi nghiêm
trọng, các ứng dụng có thể hủy bỏ kết nối bằng cách gọi hàm uip_abort().
Nếu kết nối được ngắt bởi phía bên kia, hàm uip_closed() sẽ trả về giá trị true.
Các ứng dụng có thể thực hiện những lệnh dọn dẹp bộ nhớ cần thiết.
(h) Lắng nghe cổng TCP
uIP duy trì một danh sách các cổng TCP. Một cổng mới được mở ra để lắng nghe
khi gọi hạm uip_listen(). Khi một yêu cầu kết nối được gửi đến cổng đó, uIP tạo ra một
kết nối mới và gọi các hàm ứng dụng tương ứng. Hàm uip_connected() trả về giá trị true
nếu ứng dụng được gọi bởi một kết nối mới được tạo ra.
Các ứng dụng có thể kiểm tra trường uip_conn->lport để kiểm tra xem kết nối
được tạo trên cổng nào.
(i) Tạo kết nối
Kết nối mới có thể được mở ra từ bên trong khối uIP bằng cách gọi hàm
uip_connect(). Hàm này cấp phát một kết nối TCP mới đến địa chỉ IP và cổng được chỉ
định. Hàm uip_connect() trả về con trỏ đến cấu trúc uip_conn dành cho kết nối mới. Nếu
không có kết nối, hàm trả về giá trị NULL.
Hàm uip_ipaddr() có thể được sử dụng để đóng gọi một địa chỉ IP vào mảng hai
thành phần 16bit được sử dụng bởi uIP để đại diện các địa chỉ IP.
61
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
1.12.6Mã khởi động
Ở project ví dụ của chúng ta có một số source file. Các file .c là file source,
startup912.s là module assembler cung cấp bởi Hitex để hỗ trợ STR9. Như tên của nó
bao hàm, code khởi động được đặt để chạy từ vector reset. Nó cung cấp bảng vector
ngoại lệ, cũng như khởi đẩu stack pointer cho các chế độ hoạt động khác nhau. Code
khởi động sẽ tùy biến, dựa trên thiết bị ARM9 nào và trình biên dịch nào bạn đang dùng,
nên việc chắc chắn bạn dùng đúng file sẽ quan trọng cho project của bạn.
Trước hết code khởi động cung cấp bảng vector ngoại lệ như dưới đây:
Hình 3.34 Vector ngoại lệ
Bảng vector được đặt ở 0x00000000 và cung cấp 1 bước nhảy đến vòng lặp ngắt
(ISR) ở mỗi vector. Nếu code của bạn để chạy từ 0x00000000 thì bảng vector có thể
được tạo từ một loạt các chỉ dẫn nhãn. Bạn phải nhớ đệm thêm vào vector ngắt không sử
62
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
dụng 1 lệnh NOP, ngoài ra chú ý các chỉ dẫn Assembler khác nhau trong vector ngắt
IRQ ở trên.
Sử dụng chỉ dẫn nhãn nghĩa là chỉ mục của phần mềm và các vòng lặp ngắt phải
được đặt trong 32Mb đầu bản đồ memory của STR9 vì đây là khoảng địa chỉ của chỉ dẫn
nhãn. Một cách tổng quát hơn để xử lý bảng vector là dùng chỉ dẫn LDR để load một 32
bit liên tục vào PC. Cách này tốn nhiều bộ nhớ hơn, nhưng cho phép bạn đặt code ở bất
cứ đâu trong 4Gb địa chỉ của ARM9.
Bảng vector và bảng các hằng số mất đến 64 byte đầu tiên của bộ nhớ.Trên STR9
bộ nhớ tại 0x00000000 có thể được ánh xạ từ một số nguồn khác nhau hoặc trên chip
FLASH, RAM hoặc bộ nhớ Flash bên ngoài. Dù bạn dùng cách nào, bạn có trách nhiệm
quản lý các bảng vector trong code khởi động, vì nó không được thực hiện tự động bởi
trình biên dịch.
Mã khởi động cũng chịu trách nhiệm cấu hình ngăn xếp con trỏ cho mỗi phương
thức điều hành.
Hình 3.35 Cấu hình ngăn xếp
6 ngăn xếp con trỏ trên chip (R13) được khởi tạo ở trên cùng của bộ nhớ on-chip.
Buộc phải đảm bảo cấp phát bộ nhớ đủ cho kích thước tối đa của mỗi stack.
63
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Vì mỗi chế độ hoạt động có một R13 riêng, có sáu ngăn xếp hiệu dụng trong
ARM9 này. Các chiến lược được sử dụng bởi trình biên dịch này là để xác định vị trí các
biến của người dùng từ sự khởi đầu của RAM trên chip và tăng trưởng trở lên. Các ngăn
xếp được đặt ở phía trên của bộ nhớ và phát triển xuống dưới. Mã khởi động vào mỗi
chế độ khác nhau của ARM9 và tải mỗi R13 với địa chỉ bắt đầu của ngăn xếp.
Các User Stack là quan trọng nhất và phải được đặt tại địa chỉ thấp nhất.Các
Heap được đặt ở dưới cùng của khu vực User Stack và điều này cần để có thể sử dụng
bộ nhớ giữa các User Stack và dữ liệu khu vực chưa khởi tạo (BSS).
Hình 3.36 User stack
Giống như bảng vector, bạn có trách nhiệm cấu hình kích thước ngăn xếp. Điều
này có thể được thực hiện bằng cách chỉnh sửa trực tiếp mã khởi động.
64
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Hình 3.37 Kích thước ngăn xếp
Các ngăn xếp CPU được thiết lập và kiểm tra trong trình sửa lỗi. Các lĩnh vực
quan trọng khác của mã khởi động cũng được xem xét.
(a) The ARM Procedure Call Standard (APCS)
APCS định nghĩa cách các thanh ghi file ARM9 được sử dụng bởi trình biên dịch
trong thời gian chạy. Về lý thuyết, APCS cho phép mã được xây dựng trong bộ công cụ
khác nhau để làm việc cùng nhau, từ đó bạn có thể lấy một thư viện được biên soạn bởi
các trình biên dịch ARM và sử dụng nó với các công cụ GCC.
Hình 3.38 ARM Procedure Call Standard (APCS)
65
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
APCS định nghĩa cách các thanh ghi CPU người dùng được sử dụng bởi các trình
biên dịch. Tôn trọng những tiêu chuẩn này cho phép làm việc giữa các công cụ sản xuất
khác nhau.
APCS chia tách thanh ghi file vào một số khu vực. R0 tới R3 được sử dụng cho
tham số truyền giữa các chức năng. Nếu bạn cần phải vượt qua hơn 16 byte thì các tham
số tràn được truyền qua các ngăn xếp. Các biến địa phương được phân bổ R4 - R11 và
R12 được dành làm vị trí bộ nhớ cho mã intra-call veneer. Khi bạn chọn thêm tùy chọn
cho các mã đã tạo ra như nhập lại và kiểm tra-stack, trình biên dịch cho thêm mã
Assembler bổ sung để hỗ trợ các tính năng này. Các veneer Assembler thêm chi phí cho
mã của bạn, do đó chỉ cho phép các tính năng mà bạn có ý định sử dụng. APCS cũng
định nghĩa một stack frame để giữ trạng thái của các thanh ghi CPU kèm theo một con
trỏ tới stack frame trước đó.
Đây là một nhiệm vụ sửa lỗi phần mềm rất hữu ích trong hệ điều hành như Linux,
nhưng nó không phải là hữu ích cho một trình gỡ rối JTAG. Chuẩn ACPS có tác động
lớn vào tốc độ thực hiện và kích thước ngăn xếp cho ứng dụng cuối cùng. Do đó đối với
một vi điều khiển nhúng nhỏ như STR9 tốt nhất là ngăn chặn các trình biên dịch tiêu
chuẩn này. Lệnh được sử dụng để bật tiêu chuẩn APCS là:
-mapcs-frame or -apcs
Và để vô hiệu hóa nó
-mno-apcs-frame
Theo mặc định StartEasy tạo ra một dự án đã vô hiệu hóa việc sử dụng các
APCS.
(b) ARM và THUMB
Một trong những tính năng quan trọng nhất của CPU ARM9 là khả năng chạy mã
THUMB 16 bit và mã ARM 32 bit. Để có được một ứng dụng phức tạp-hợp lý phù hợp
với các bộ nhớ Flash trên chip, nó là rất quan trọng để interwork những hướng dẫn hai
66
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
bộ để có hầu hết các mã ứng dụng được mã hóa trong các tập lệnh THUMB và có hiệu
quả nén để có không gian tối thiểu trong bộ nhớ Flash trên chip. Bất kỳ thời gian thói
quen quan trọng, nơi sức mạnh xử lý đầy đủ của ARM 7 là yêu cầu cần phải được mã
hóa trong tập 32 ARM hướng dẫn bit. Khi tạo mã, trình biên dịch phải được cho phép để
cho phép ảnh hưởng lẫn nhau. Điều này đạt được với sự chuyển đổi sau đây:
-mTHUMB-interwork
Các trình biên dịch GCC được thiết kế để biên dịch một module C đưa ra trong
hoặc là THUMB hoặc tập lệnh ARM. Vì vậy, bạn phải đặt ra mã nguồn của bạn để mỗi
môn chỉ có chức năng đó sẽ được mã hóa theo chức năng ARM hoặc THUMB. Theo
mặc định các trình biên dịch sẽ mã hóa tất cả các mã nguồn trong các tập lệnh ARM.
Buộc một mô-đun được mã hóa trong các tập lệnh THUMB, sử dụng các chỉ thị sau khi
bạn biên dịch mã:
-mTHUMB
Tùy chọn này có thể được thêm vào một module được trong IDE HiTOP.
67
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
1.12.7Chương trình nhúng – HiTOP Debugger
Chương trình được viết bằng ngôn ngữ C++ trên công cụ phát triển HiTOP
Debugger được cung cấp kèm theo STR9-comstick.
Hình 3.39 Giao diện HiTOP Debugger
HiTOP là kết thúc cho tất cả các trình sửa lỗi Hitex và giả lập in-circuit. Trong
trường hợp của STR9, HiTOP kết nối đến trình sửa lỗi JTAG TantinoARM 7-9. JTAG
cho phép HiTOP tải các đoạn mã vào STR9 FLASH hoặc RAM và sau đó sửa lỗi mã
như nó chạy trên vi điều khiển. Ngoài tính năng sửa lỗi của nó, HiTOP bao gồm editor
của người lập trình, hỗ trợ cho các công cụ biên dịch khác nhau và tạo các tiện ích cho
phép bạn duy trì các chương trình STR9 hiện có.
Môi trường HiTOP phát triển có thể được sử dụng với công cụ biên dịch khác
nhau. Chúng bao gồm các trình biên dịch từ ARM, Keil, Greenhills, tác vụ và IAR.
Ngoài ra còn có một cổng của trình biên dịch GNU GCC có sẵn cho các dòng CPU của
68
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
ARM. GCC có lợi thế là một trình biên dịch tự do biên dịch C và C + + cho tất cả các
dòng CPU của ARM.
Các trình biên dịch thương mại là con đường phía trước của những công cụ GNU
về mật mã và tốc độ thực thi. Càng ngày, các trình biên dịch thương mại bao gồm hỗ trợ
trực tiếp cho vi điều khiển ARM-based trong các hình thức trình gỡ rối với sự hỗ trợ cho
các STR9 và thiết bị chuyển mạch biên dịch chuyên dụng. Những lý do để sử dụng mỗi
trình biên dịch đưa ra có thể được tóm tắt như sau: nếu bạn muốn mã nhanh nhất và các
công cụ tiêu chuẩn với sự hỗ trợ kỹ thuật thích hợp sử dụng một công cụ thương mại
như các trình biên dịch Keil ARM RealView. Nếu bạn không có ngân sách, một dự án
đơn giản hoặc có kinh nghiệm đáng kể trước đó của nó, sử dụng GNU. Cung cấp với các
bộ STR9 starter là một cài đặt miễn phí của các trình biên dịch GNU, được tích hợp với
trình gỡ rối HiTOP IDE để bạn có thể biên dịch chương trình đơn giản. Các ví dụ đưa ra
ở đây sử dụng các trình biên dịch GNU.
Hình 3.40 Các cửa sổ thao tác HiTOP
Cũng bao gồm trong chuỗi công cụ phát triển là một biên tập viên thứ hai gọi là
Trợ lý Phát triển cho C. Đây là một biên tập viên cao cấp ứng mục tiêu phát triển các hệ
69
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
thống nhúng. Cũng như có tất cả các tính năng bạn mong đợi ở một trình soạn thảo của
lập trình, DA-C bao gồm một số tính năng nâng cao giúp bạn để sản xuất chất lượng cao
và được tài liệu mã nguồn C. DA-C bao gồm một kiểm tra tĩnh sẽ phân tích mã của bạn
cho các lỗi lập trình thông thường, tạo ra các biểu đồ dòng chảy và phân cấp gọi. DA-C
cũng bao gồm một trình duyệt mã, vì vậy bạn có thể dễ dàng di chuyển mã của bạn và
một số liệu module nên các mã nguồn có thể được phân tích bằng cách sử dụng các biện
pháp tiêu chuẩn chất lượng.
Các mục cuối cùng của phần mềm trên là một thử nghiệm bộ phần mềm công cụ
gọi là TESSY. Các công cụ tự động hóa TESSY thử nghiệm chức năng của vi điều khiển
nhúng và phần cứng mục tiêu của họ. Trong nhiều ngành công nghiệp (đặc biệt là hàng
không vũ trụ và y tế), xác nhận các phần mềm vi điều khiển là một quá trình dài và quan
trọng. TESSY đặc biệt thích hợp để thử nghiệm vi điều khiển dấu chân nhỏ chỉ có một
lượng nhỏ trên chip bộ nhớ. Thay vì xây dựng khai thác thử nghiệm sẽ được tải vào bộ
nhớ mục tiêu của thiết bị đo kiểm, TESSY làm cho không có thay đổi mã theo thử
nghiệm, nhưng xây dựng khai thác thử nghiệm của nó trong ngôn ngữ HiScript được xây
dựng trong trình sửa lỗi. Bằng cách này, việc áp dụng đầy đủ các mục tiêu có thể được
thực hiện mà không mất bất kỳ tài nguyên trên chip.
Trên đây là các kiến thức cần biết về công cụ HiTOP Debugger để có thể sử dụng
tốt cho việc xây dựng hệ thống. Các bước xây dựng được mô tả ở phần dưới đây.
TC được khởi tạo với IP được cấp sẵn. Khi vừa khởi động, chương trình sẽ thực
hiện việc khởi tạo socket TCP lắng nghe trên cổng 2001. Tiếp sau đó là vòng lặp uIP
kiểm tra bộ đệm gói tin gửi đến và thực hiện các ứng dụng tương ứng. Thân chương
trình được chia làm 5 khối chính như sau:
70
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Hình 3.41 Sơ đồ khối chương trình nhúng
(a) Khối khởi tạo (init)
Nhiệm vụ chính của khối này là khởi tạo các thông số chính lúc khởi động cho
TC. Ứng dụng trong hệ thống đó là việc thực hiện khởi tạo IP cho TC, khởi tạo socket
TCP lắng nghe trên cổng định trước để sẵn sàng cho quá trình đo.
Thao tác được thực hiện nhờ thư viện 91x và uIP.
Khởi tạo địa chỉ IP, default gateway, subnet mask với hàm uip_ipaddr().
Khởi tạo socket TCP lắng nghe với hàm uip_listen().
Hình 3.42 Hàm khởi tạo sơ lược
71
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
(b) Khối chương trình chính (main)
Nhiệm vụ chính của khối này là thực hiện các hàm giúp TC hoạt động bình
thường. Ứng dụng trong hệ thống đó là việc khởi tạo vòng lặp uIP để hỗ trợ Ethernet
phục vụ kịch bản đo.
Thao tác được thực hiện nhờ thư viện 91x.
Hình 3.43 Hàm Main sơ lược
72
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
(c) Khối uIP
Nhiệm vụ chính của khối này là thực hiện các hàm hỗ trợ bởi thư viện uIP. Ứng
dụng trong hệ thống đó là làm cơ sở cho các khối xử lý gói tin gửi đến theo giao thức
TCP/IP.
Thao tác được thực hiện nhờ thư viện 91x và uIP.
Kiểm tra các gói tin gửi đến và thực hiện gọi các khối tương ứng.
Hình 3.44 Hàm uip sơ lược
73
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
(d) Khối ICMP
Nhiệm vụ chính của khối này là gọi các ứng dụng tương ứng với gói tin ICMP
được gửi đến TC. Ứng dụng trong hệ thống đó là việc thực hiện phản hồi gói ping từ
MC bằng cách gửi gói pong trở lại.
Thao tác được thực hiện nhờ thư viện uIP.
Định nghĩa cấu trúc gói ICMP bao gồm các trường tương ứng để TC hiểu được.
Thực hiện việc tạo gói pong phản hồi khi có gói ping gửi đến TC bằng cách thay
đổi trường type của gói ping từ 8 thành 0, đảo ngược hai trường source IP address và
destination IP address. Sau đó sử dụng hàm uip_send() để gửi trả lại MC.
74
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Hình 3.45 Hàm ICMP sơ lược
75
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
(e) Khối TCP
Nhiệm vụ chính của khối này là gọi các ứng dụng tương ứng với gói tin TCP
được gửi đến TC. Ứng dụng trong hệ thống đó là thực hiện kết nối TCP với MC và gửi
nhận các gói tin theo kịch bản đo.
Thao tác được thực hiện nhờ thư viện uIP.
Định nghĩa cấu trúc gói TCP bao gồm các trường tương ứng để TC hiểu được.
Khi có gói TCP gửi đến, khối TCP thực hiện gọi hàm uip_appcall(). Bằng các
hàm kiểm tra uip_newdata(), uip_acked(), uip_rexmit(), uip_closed(), uip_abort(), ta sẽ
thực hiện các lệnh gửi gói tin tương ứng để hoàn thành kịch bản đo.
76
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Hình 3.46 Hàm TCP sơ lược
77
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Kiểm tra – đánh giá hệ thống
1.13 Kiểm tra – đánh giá
1.13.1Mạng PLC
(a) Cấu trúc mạng PLC
Mạng truy nhập PLC dựa trên mạng lưới truyền tải và cung cấp điện hạ thế (lưới
hạ thế kết nối với lưới điện trung thế và cao thế thông qua các máy biến áp). Có thể thấy
trên hình 1.2, mạng truy nhập PLC có thể kết nối với mạng diện rộng WAN thông qua
các trạm gốc đặt tại vị trí các máy biến thế, còn các thuê bao PLC kết nối với các trạm
gốc thông qua các modem PLC đặt tại vị trí các công tơ đo đếm điện hoặc ổ cắm điện
trong nhà.
Hình 4.47 Cấu trúc mạng PLC
Mạng PLC trong nhà sử dụng mạng điện trong nhà làm phương tiện truyền dẫn,
để kết nối các thiết bị sử dụng trong nhà như máy tính, điện thoại, máy in và các thiết bị
video, gọi là hệ thống mạng PLC LAN. Về cấu trúc, mạng PLC trong nhà không khác
78
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
nhiều so với cấu trúc mạng truy nhập PLC sử dụng lưới điện hạ thế. Trong cấu trúc này,
có một trạm gốc PLC (BS) đặt tại vị trí công tơ điện để kết nối với mạng PLC backbone.
Các thiết bị trong nhà kết nối với trạm gốc thông qua các modem PLC đặt tại các ổ cắm
điện. Mạng PLC trong nhà không chỉ có thể kết nối đến mạng truy nhập sử dụng công
nghệ PLC mà còn có thể kết nối đến các mạng truy nhập khác.
Hình 4.48 Cấu trúc mạng PLC trong nhà
(b) Các phần tử của mạng PLC
Các phần tử mạng cơ bản
_Modem PLC: Là thiết bị đơn vị PLC, dùng để kết nối các thiết bị người sử
dụng (máy tính, điện thoại…) với đường dây điện. Modem PLC ngoài chức
năng chuyển đổi tín hiệu, còn có vai trò là bộ phối hợp trở kháng, bộ lọc tách tín
hiệu điện (tần số 50 hoặc 60Hz) và tín hiệu thông tin (tần số trên 9kHz). Modem
PLC không chỉ thực hiện tất cả các chức năng lớp vật lý (Physical layer) như
mã hoá, điều chế mà còn thực hiện các chức năng lớp Data link (MAC và LLC)
trong mô hình tham chiếu OSI .
_Trạm gốc PLC: Là nút trung tâm nắm quyền kiểm soát cả mạng PLC, làm nhiệm
vụ tập trung lưu lượng tải lên và tải xuống từ/tới tất cả các modem PLC trong cell
79
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
của nó. Ngoài ra nó còn có chức năng kết nối mạng truy nhập PLC với mạng
backbone.
Trạm lặp: Trong trường hợp khoảng cách giữa các modem PLC với trạm gốc là
rất xa, cần sử dụng các bộ lặp tín hiệu (repeater). Các bộ lặp này có chức năng khuếch
đại tín hiệu.
Hình 4.49 PLC sử dụng trạm lặp
PLC Gateway: Các thuê bao PLC có thể kết nối vào mạng truy nhập PLC
bằng hai cách:
_Kết nối trực tiếp.
Hình 4.50 Thuê bao PLC kết nối trực tiếp
_Kết nối gián tiếp qua PLC gateway.
80
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Hình 4.51 Thuê bao PLC kết nối gián tiếp
1.13.2Kiểm tra đánh giá
Để đánh giá kết quả và kịch bản đã chính xác hay chưa chúng em sử dụng phần
mềm Wireshark chuyên bắt gói tin.
Lợi ích Wireshark đem lại đã giúp cho nó trở nên phổ biến như hiện nay. Nó có
thể đáp ứng nhu cầu của cả các nhà phân tích chuyên nghiệp và nghiệp dư và nó đưa ra
nhiều tính năng để thu hút mỗi đối tượng khác nhau.
Các giao thực được hỗ trợ bởi WireShark:
WireShark vượt trội về khả năng hỗ trợ các giao thức (khoảng 850 loại), từ
những loại phổ biến như TCP, IP đến những loại đặc biệt như là AppleTalk và Bit
Torrent và quan trọng Wireshark hỗ trợ hầu hết các loại hệ điều hành hiện nay.
Quá trình kiểm tra đánh giá được trình bày dưới đây:
81
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
(a) Lệnh ping
Hình 4.52 Mô tả lệnh Ping qua wireshark
Gồm 2 gói tin echo request và echo reply , giao thức ICMP đã chính xác với lí thuyết.
82
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
(b) Thông lượng
Hình 4.53 Quá trình bắt tay 3 bước
Ở đây wireshark sẽ cung cấp cho ta những thông tin sau :
IP nguồn đến Ip đích 192.168.1.5 -192.168.1.10
Giao thức truyền tải ở đây là TCP
Port nguồn và port đích 54243 và dc(2001)
1 vài trường cơ bản của TCP header sẽ được giải thích ở dưới
Các trạng thái gói tin và kích thước phần data.
Quá trình đo thông lượng diễn ra như sau:
*Đầu tiên la quá trình bắt tay 3 bước khởi tạo 1 phiên kết nối :
- MC gửi tin TCP syn biến sequence number ( giúp gói tin truyền 1 cách tuần tự ) bằng 0
-STR gửi lại TCP syn ack xác nhận đã nhận gói TCP syn bằng gói tin có biến ack
number= 1( xác nhận đã nhận gói syn=0) và thêm tham số sequence number = 0.
83
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
-MC nhận được TCP syn ack cũng gửi tiếp cho STR 1 gói tin xác nhận đã nhận được
(ack = 1 , sequence=1 )
* Sau khi bắt tay 3 bước là các gói báo hiệu và các gói dữ liệu dùng cho việc đo thông
lượng:
Hình 4.54 Khảo sát thông lượng mạng Ethernet
-Trường hợp mạng băng thông rông ôn định diễn ra đúng với kịch bản không có lỗi xảy
ra trên đường truyền.
Chú ý: hàm Push đẩy dữ liệu ra ngoài bộ đệm cho các ứng dụng nhận
-Trường hợp mạng điện mà chúng ta khảo sát
84
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Hình 4.55 Khảo sát thông lượng đường điện
Dễ thấy có nhiều lỗi xảy ra trên đường truyền nhưng chương trình vẫn theo đúng kịch
bản:
TCP out of order: gói tin bị lỗi
TCP fast retransmission: cơ chế hoạt động như sau nếu người gửi nhận được 3 bản sao
ACK cùng giá trị ACK number thì TCP sender sẽ chắc chắn rằng segmet( đoạn) tiếp
theo sẽ bị drop (mất) và không đến theo trật tự và TCp sender sẽ gửi lại gói bị drop đó.
Kết luận : Chương trình xây dựng đúng với kịch bản đã đề ra đo đạc 1 quá trình gửi dữ
liệu xảy ra trên mạng.
Về công thức thông lượng sử dụng chúng em dựa trên các tài liệu tham khảo và các phần
mềm đo băng thông , thông lượng đều dựa trên cùng định nghĩa để xây dựng công thức.
85
Hệ thống đo các thông số mạng trên đường truyền băng hẹp điều khiển qua Internet
Tài liệu tham khảo
[1] Adam Dunkels, The uIP Embedded TCP/IP Stack, June 2006.
[2] www.hitex.co.uk, The Insider’s Guide To The STR91x ARM®9, June 2006.
[3] www.st.com, STR91x softwar library, May 2006.
[4] www.wikipedia.com
[5] www.msdn.com
[6] www.php.net
[7] www.codeproject.com
[8] www.congdongcviet.com
86
Các file đính kèm theo tài liệu này:
- tcp_congestion_control_8383.pdf