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

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.

pdf88 trang | Chia sẻ: lylyngoc | Ngày: 27/11/2013 | Lượt xem: 3050 | Lượt tải: 1download
Bạn đang xem nội dung 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, để tải tài liệu về máy 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:

  • pdftcp_congestion_control_8383.pdf