1. Trang chủ
  2. » Luận Văn - Báo Cáo

Làm quen với hệ điều hành contiki trên KIT MSP430G2553

29 1,5K 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 29
Dung lượng 1,39 MB

Nội dung

Làm quen với hệ điều hành contiki trên KIT MSP430G2553

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ - VIỄN THÔNG

Trang 2

MỤC LỤC

MỤC LỤC 2

Mở Đầu 3

Phần 1 Giới thiệu về hệ điều hành Contiki và kit lunchpad MSP430 3

1.1 Hệ điều hành Contiki 3

1.1.1 Tổng quan và lịch sử phát triển 3

1.1.2 Đặc điểm của hệ điều hành Contiki 4

1.2 Kit MSP430G2553 4

1.2.1 Tổng quan 4

1.2.2 Cấu trúc 6

1.2.3 Kết nối UART 7

1.3 Cài đặt và nạp code lên Kit 8

1.3.1 Cài đặt Contiki 8

1.3.2Cài đặt eclip 9

1.3.3 Cài contiki launchpad và các trình biên dịch 9

Phần 2 Tổ chức và hệ thống Contiki 11

2.1 Process Contiki 11

2.1.1 The Structure of a Process 11

2.1.1.1 The Process Control Block 12

2.1.1.2 The Process Thread 12

2.1.2 Protothreads 13

2.1.3 Protothreads in Processes 13

2.1.4 Events 14

2.1.4.1 Asynchronous Events 15

2.1.4.2 Synchronous Events 15

2.1.4.3 Polling 15

2.1.5 The Process Scheduler 15

2.1.5.1 Starting Processes 16

2.1.5.2 Exiting and Killing Processes 16

2.1.5.3 Autostarting Processes 16

2.2.1 The Contiki Timer Modules 16

2.2.2 The Clock Module 17

2.2.3 The Timer Library 17

2.3.1 Serial Communication 18

2.1.2 LEDs 19

Phần 3 Giải thích code mẫu và bài tập 21

3.1.1 Blink example 21

3.1.2 Button example 23

3.2.1 Sử dụng các cấu trúc tuần tự, lặp, rẽ nhánh 24

3.2.2 Điều khiển leds bằng tập lệnh thông qua uart 26

Trang 3

Mở Đầu

Đối với ngành Điện tử truyền thông nói chung và Điện tử nói riêng thì việclập trình cho vi xử lý là vô cùng quan trọng Các phong cách lập trình cũ sẽ bị hạnchế nhiều bởi tính song song của chương trình Do đó, đồ án sẽ nghiên cứu mộtcách lập trình mới cho vi xử lý sử dụng hệ điều hành contiki Để đơn giản và thuậnlợi cho quá trình làm việc cũng như sự liền mạch cho các đồ án sau này, chúng ta sửdụng mạch mô phỏng là kit MSP430G2533 của TI

Do thời gian thực hiện và kiến thức còn hạn chế nên còn nhiều sai sót trongquá trình thực hiện đề tài, rất mong được sự bổ sung đóng góp của các thầy cô vàcác bạn

Chúng em xin chân trọng cảm ơn thầy Nguyễn Nam Phong và anh NguyễnVăn Giang đã nhiệt tình hướng dẫn chúng em suốt quá trình học tập

Phần 1 Giới thiệu về hệ điều hành Contiki và kit

lunchpad MSP430

1.1 Hệ điều hành Contiki

1.1.1 Tổng quan và lịch sử phát triển

Hệ điều hành contiki là hệ điều hành mã nguồn mở, được nghiên cứu, thiết

kế và phát triển bởi một nhóm các nhà phát triển từ viện khoa học máy tính ThụyĐiển, người đứng đầu là Adam Dunkels Nhóm phát triển Contiki gồm nhiều thànhviên đến từ SICS, CISCO, cùng nhiều tổ chức và các trường đại học khác trên thếgiới Hệ điều hành Contiki được thiết kế cho các vi điều khiển có bộ nhớ nhỏ, vớithông số 2KB RAM và 40KB ROM Nhờ đó, Contiki được sử dụng cho các hệthống nhúng và các ứng dụng trong mạng cảm biến không dây Contiki bắt đầuđược nghiên cứu từ năm 2001 và phát hành phiên bản đầu tiên Contiki 1.0 năm

2003 Phiên bản hiện nay của Contiki là 2.4, với nhiều thay đổi, bổ sung và pháttriển vượt bậc Trong thực tế, Contiki đã được ứng dụng trong nhiều dự án nhưgiám sát đường hầm xe lửa, theo dõi nước trong biển Baltic Nhiều cơ chế, ý tưởng

Trang 4

trong Contiki đã được ứng dụng rộng rãi trong công nghiệp Điển hình như mô hìnhuIP được phát hành năm 2001 đã được sử dụng trong hệ thống ứng dụng củahàng trăm công ty trong các lĩnh vực hàng hải, thông tin vệ tinh, khai thác dầu mỏ,

…;

Mô hình Protothreads được công bố lần đầu tiên năm 2005, đến nay đã được

sử dụng trong nhiều ứng dụng như bộ giải mã kỹ thuật số và thiết bị cảm biến rungkhông dây

1.1.2 Đặc điểm của hệ điều hành Contiki

Contiki OS được lập trình bằng ngôn ngữ C, hoạt động dựa trên cơ chếevent – driven và có những đặc điểm phù hợp với các hệ thống nhúng và mạng cảmbiến không dây:

• Contiki được chia thành nhiều modul hoạt động độc lập Nhờ đó các ứngdụng có thể sử dụng các modul một cách lih động và chỉ load những modulcần thiết

• Cơ chế hoạt động điều khiển sự kiện làm giảm năng lượng tiêu hao và hạnchế dung lượng bộ nhớ cần sử dụng

• Có thể sử dụng IP trong mạng cảm biến thông qua uIP stack được xây dựngdựa trên nền TCP/IP

• Có những modul cho phép ước lượng và quản lý năng lượng một cách hiệuquả

• Các giao thức tương tác giữa các lớp và các node trong mạng dễ dàng hơn

• Sử dụng RIME stack phục vụ các giao thức dành cho mạng năng lượng thấpmột cách hiệu quả

Bên cạnh đó, Contiki còn cung cấp những công cụ hỗ trợ mô phỏng vớigiao diện đơn giản, dễ sử dụng và hỗ trợ tốt những thiết bị trong thực tế, phục vụnhững mục đích nghiên cứu, mô phỏng và triển khia những giao thức mới

1.2 Kit MSP430G2553

1.2.1 Tổng quan

Các dòng vi điều khiển msp430 này do hãng TI ( Texas Instruments) sảnxuất, ngoài ra thì TI còn sản xuất và cung cấp nhiều linh kiện điện tử và các module

Trang 5

khác, để tìm hiểu thì các bạn có thể tham khảo ở địa chỉ : www.ti.com để biết rõhơn Vi điều khiển( Micro controller unit – MCU ) là đơn vị xử lý nhỏ, nó được tíchhợp toàn bộ các bộ nhớ như ROM , RAM , các port truy xuất , giao tiếp ngoại vitrực tiếp trên 1 con chip hết sức nhỏ gọn Được thiết kế dựa trên cấu trúc VON-NEUMAN , đặc điểm của cấu trúc này là chỉ có duy nhất 1 bus giữa CPU và bộ nhớ(data và chương trình) , do đó mà chúng phải có độ rộng bit tương tự nhau.

MSP430 có một số phiênbản như: MSP430x1xx, MSP430x2xx, MSP430x3xx,MSP430x4xx, MSP430x5xx Dưới đây là những đặc điểm tổng quát của họ vi điềukhiển MSP430:

+ Cấu trúc sử dụng nguồn thấp giúp kéo dài tuổi thọ của Pin

• Duy trì 0.1µA dòng nuôi RAM

• Chỉ 0.8µA real-time clock

• 250 µA/ MIPS

+ Bộ tương tự hiệu suất cao cho các phép đo chính xác

• 12 bit hoặc 10 bit ADC-200 kskp, cảm biến nhiệt độ, Vref

• 12 bit DAC

+Bộ giám sát điện áp nguồn

16 bit RISC CPU cho phép được nhiều ứng dụng, thể hiện một phần ở kíchthước Code lập trình

- Thanh ghi lớn nên loại trừ được trường hợp tắt nghẽn tập tin khi đang làmviệc

- Thiết kế nhỏ gọn làm giảm lượng tiêu thụ điện và giảm giá thành

- Tối ưu hóa cho những chương trình ngôn ngữ bậc cao như C, C++

- Có 7 chế độ định địa chỉ

- Khả năng ngắt theo véc tơ lớn

+ Trong lập trình cho bộ nhớ Flash cho phép thay đổi Code một cách linh hoạt,phạm vi rộng, bộ nhớ Flash còn có thể lưu lại như nhật ký của dữ liệu

Trang 6

1.2.2 Cấu trúc

Hình 1.1 Hình minh họa kit LaunchPad Rev.1.1 (bản ổn định hiện tại là Rev.1.5)

Một kit LaunchPad gồm hai thành phần, với GND được phủ chung:

- Nửa trên: Là phần mạch nạp theo chuẩn spy-bi-wire Jtag (2 dây), kết hợpvới chuyển đổi giao tiếp UART với máy tính Trên cùng là đầu USBmini để nối vớimáy tính, phía dưới là hàng Header để nối ra đối tượng cần giao tiếp, bao gồm cácchân:

TXD, RXD: phục vụ giao tiếp UART với máy tính

RST, TEST: phục vụ nạp và debug (sửa lỗi) theo chuẩn spy-bi-wire Jtag.VCC: cấp nguồn 3V3 cho đối tượng (thường là nửa dưới LaunchPad)

Hình1.2 Các chân cơ bản

Trang 7

- Nửa dưới: là một mạch phát triển MSP430 đơn giản, bao gồm:

Socket cắm MSP430 (thường gắn sẵn chip MSP430G2553), Pad hàn thạch anh, Nút nhấn Reset chip

Nút nhấn gắn vào P1.3, hai Led hiển thị có jumper để gắn vào P1.0 và P1.6 Hai hàng header để kết nối hai hàng chân của chip ra ngoài, một hàng header

nguồn GND-GND-VCC để lấy nguồn 3V3 trên LaunchPad

1.2.3 Kết nối UART

UART (Universal Asynchronous Receive/Transmit) – Truyền nhận dữ liệu không đồng bộ Đây là một trong những giao thức truyền thong phổ biến trong các dòng vi điều khiển

Kết nối phần cứng cơ bản :

Hình 1.3 Cấu trúc khung truyền/nhận

Hình 1.4 Khung truyền nhận dữ liệu

Trang 8

Để sử dụng được ở chế độ này, ta phải thay đổi chân cắm jump như hình sau:

Hình 1.5 Tinh chỉnh jump ở chế độ UART

1.3 Cài đặt và nạp code lên Kit

1.3.1 Cài đặt Contiki

• Step 1: Install Ubuntu

- Nên cài bản Ubuntu mới nhất là Ubuntu 14.04 64bit

- Link hướng dẫn: song-ubuntu-va-window-7-8

http://topthuthuat.com/thu-thuat-ubuntu/cach-cai-dat-dual-song Lưu ý: Làm đúng theo các bước Nếu làm sai có thể dẫn tới tình trạng Ubuntu cài

đè lên Windows

Trang 9

• Step 2: Install GIT:

GIT là phần mềm quản lý mã nguồn Mở Terminal lên: Ctrl+Alt+T sudo apt-get update sudo install git

• Step 3: Install CONTIKI từ Git Clone git clone

https://github.com/contiki-os/contiki.git

1.3.2 Cài đặt eclip

• Step 1: Install Java 8 on Ubuntu

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

sudo apt-get install oracle-java8-installer

• Step 2: Download Eclipse Lunar

http://www.eclipse.org/downloads/download.php?

gtk.tar.gz

file=/technology/epp/downloads/release/luna/SR1a/eclipse-cpp-luna-SR1a-linux-• Step 3: Giải nén và sử dụng

- Khởi động Eclipse

- Để Import Contiki vào Eclipse: Chọn Project/Import Chọn Browse và chọn thư mục contiki Nhấn Finish

1.3.3 Cài contiki launchpad và các trình biên dịch

• Step 1: Install Build Dependencies

sudo apt-get install subversion gcc-4.4 texinfo patch \ libncurses5-dev zlibc dev libx11-dev libusb-dev \ libreadline6-dev

zlib1g-• Step 2: Install Compiler MSPDebug

Trang 10

tar xvfz mspdebug-0.9.tar.gz

cd mspdebug-0.9

make

sudo make install

• Step 3: Install MSP-GCC sudo apt-get install gcc-msp430

• Step 4: Download Contiki for Launchpad

git clone git://github.com/msloth/contiki-launchpad.git

• Step 5: Make a example

cd contiki-launchpad/example/blink

make clean

make

make blink.upload

Trang 11

Phần 2 Tổ chức và hệ thống Contiki

2.1 Process Contiki

Code trong Contiki được chia làm một trong hai loại:

• Cooperative code: Đoạn code này sẽ chạy tuần tự, code trước hoàn thành thì

nó mới thực hiện

• Preemptive code: Đoạn mã này được dùng để ngắt hoặc khi sử dụng time timers

real-Hình 2.1 Các loại code processes

Tất cả các chương trình trong contiki được gọi là processes Mỗi processesthường được bắt đầu khi khởi động hệ thống, một modul được nạp vào thống Và

nó sẽ chạy khi một sự kiện nào đó xảy ra, chẳng hạn như timer xả, một điều kiện từbên ngoài,…

2.1.1 The Structure of a Process

Contiki process bao gồm 2 phần: Process control block và Process thread.Process control block được lưu trữ trong RAM, chứa các thông tin tức thời như: tên,trạng thái, con trỏ Process Thread là đoạn mã và được lưu trữ trong ROM

Trang 12

2.1.1.1 The Process Control Block

Process Control Block chứa thông tin về mỗi process, chẳng hạn như trạngthái, con trỏ, và tên mô tả Khối này chỉ được sử dụng bởi kernel và không bao giờđược truy cập trực tiếp bằng process

Cấu trúc bên trong của Process Control Block:

struct process {

struct process *next;

const char *name;

int (* thread)( struct pt *,

cờ needspoll được thiết lập bởi hàm process_poll() khi process được hỏi

Quá trình phức tạp trên được sử dụng trực tiếp thông qua lệnh:

PROCESS (name, "strname" );

Example PROCESS (hello_world_process, "Hello world process" );

2.1.1.2 The Process Thread

Process Thread là code của process

Cấu trúc của như sau:

PROCESS_THREAD (name, ev, data)

Trang 13

2.1.2 Protothreads

Protothreads là một cấu trúc code cho phép hệ thống chạy các hoạt độngkhác khi đợi một điều gì đó xảy ra Protothreads ở đây khai thác trực tiếp trong hệđiều hành contiki, ngoài ra nó được sử dụng tốt trong các lĩnh vực khác

Protothread cho phép sử dụng các hàm có trong C giống như trong threads

mà không bị tràn bộ nhớ Nó giảm dung lượng bộ nhớ và là điều rất quan trọngtrong các hệ thống có bộ nhớ khiêm tốn sử dụng Contiki

Protothread là 1 hàm C Hàm này bắt đầu và kết thúc bởi 2 lệnh PT_BEGIN()

# define PT_INIT ( pt ) LC_INIT(pt->lc)

# define PT_BEGIN ( pt ) LC_RESUME(pt->lc)

# define PT_END ( pt ) LC_END(pt->lc); \

return PT_ENDED

# define PT_WAIT_UNTIL ( pt, c ) LC_SET(pt->lc); \

if (!(c)) \

return PT_WAITING

# define PT_EXIT ( pt ) return PT_EXITED

Local continuations implemented with the C switch statement:

typedef unsigned short lc_t ;

# define LC_INIT ( ) c = 0

# define LC_RESUME ( ) switch (c) { case :

# define LC_SET ( ) c = LINE ; case LINE :

# define LC_END ( ) }

2.1.3 Protothreads in Processes

Trong Contiki, protothread được sử dụng dưới những câu lệnh riêng, có phầnkhác biệt so với nguyên bản ở trên

Các hàm trong Contiki processes:

PROCESS_BEGIN (); // Khai báo bắt đầu process' protothread

PROCESS_END (); // Khai báo kết thức process' protothread

PROCESS_EXIT (); // Thoát ra khỏi the process

PROCESS_WAIT_EVENT (); // Đợi 1 event nào đó

PROCESS_WAIT_EVENT_UNTIL (c); // Đợi 1 event nào đó nhưng có điều kiện

PROCESS_YIELD (); // Giống PROCESS_WAIT_EVENT().Khác ở chỗ nó đảm bảo sẽ chạy ít nhất 1 lần, process không kết thúc trong 1 vòng lặp vô hạn chiếm CPU

PROCESS_WAIT_UNTIL (c); // Chờ 1 điều kiện, có thể không thuc hiện

PROCESS_PAUSE (c); // Tạm dừng process đang thực hiện

Trang 14

2.1.4 Events

Trong Contiki, mỗi process khi chạy sẽ nhận 1 event Có 2 loại event:asynchronous events(sự kiện đồng bộ) and synchronous events(sự kiện không đồngbộ)

Hình 2.2 Mô tả sự kiện không đồng bộ

Khi một sự kiện không động bộ được gửi, sự kiện đó được đặt vào kernel's eventqueue(hàng đợi sự kiện) và chuyển tiếp đến một process vào thời gian sau đó

Hình 2.3 Mô tả sự kiện đồng bộ

Khi một sự kiện đồng bộ được gửi, sự kiện đó ngay lập tức được chuyển choprocess

Trang 15

2.1.4.1 Asynchronous Events

Asynchronous events được chuyển tiếp đến process sau khi được gửi đi.Giữa khoảng thời gian gửi đi và được chuyển tiếp, nó nằm ở hàng đợi sự kiện trongContiki kernel

Process nhận event có thể là một process cụ thể, hoặc tất cả các process đangchạy Nếu là 1 process cụ thể, kernel sẽ gọi nó lên đển cung cấp sự kiện Nếu lànhiều process, kernel sẽ tuần tự cung cấp các sự kiện giống nhau cho tất cả cácprocesss, cái này đến cái khác

Asynchronous events được gửi đi bằng hàm process_post(). Đầu tiên hàmkiểm tra kích cỡ của hàng đợi lệnh Nếu còn trống sẽ đưa vào, nếu hết chỗ sẽ báolỗi

2.1.4.2 Synchronous Events

Khác với Asynchronous events, synchronous events được gửi trực tiếp đếnmột process cụ thể Do đó, process này được gọi trực tiếp và sẽ không được nhậnevent tiếp theo cho đến khi xử lý xong event này

2.1.5 The Process Scheduler

Mục tiêu của process scheduler là để gọi process lên chạy khi được phép.Quá trình này được thực hiện bằng cách gọi hàm thực hiện Process Thread Processscheduler được gọi là để đáp ứng với một sự kiện được gửi tới nó, hoặc một yêu cầupoll

Trong quá trình gọi, một con trỏ chưa xác định sẽ được duyệt Con trỏ đượccung cấp bởi lệnh gọi có thể lấy giá trị NULL ứng với việc không có dữ liệu đượcduyệt Khi dùng poll, mặc định không có dữ liệu được duyệt

Trang 16

2.1.5.1 Starting Processes

Hàm process_start(). Mục tiêu của hàm là thiết lập cấu trúc điều khiểnprocess, thêm process vào danh sách thực thi của kernel, và gọi code cài đặt processlên Khi hàm process_start() được gọi, process sẽ bắt đầu

Đầu tiên, hàm sẽ kiểm tra xem process đã được bắt đầu chưa, nếu chạy rồithì hoàn thành Nếu process chưa được bắt đầu, process sẽ được đặt vào danh sáchkhởi động, trạng thái của process được thiết lập PROCESS_STATE_RUNNING vàprotothread được cài đặt bằng PT_INIT().

Cuối cùng, process gửi một synchronous event, PROCESS_EVENT_INIT Đồngthời con trỏ sẽ đi tới process cần khởi động kèm theo dữ liệu Tuy nhiên, thôngthường dữ liệu được gửi kèm theo là NULL Process cần khởi động sẽ được kernel gọilên để nhận synchronous event

2.1.5.2 Exiting and Killing Processes

Thoát ra khỏi process có hai cách:

• Tự thoát ra: khi chương trình tìm đến dòng PROCESS_END()

• Thoát ra bởi 1 chương trình khác PROCESS_EXIT()

Khi một chương trình được thoát, kernel sẽ gửi thông báo thoát của process cầnthoát cho tất cả các process khác đang sử dụng nó

2.1.5.3 Autostarting Processes

Contiki cung cấp một cơ chế giúp tự động bắt đầu một process chỉ định trướckhi hệ thống khởi động

2.2 Timer

2.2.1 The Contiki Timer Modules

Contiki có một mô-đun clock và nhiều mô-đun timer: timer, stimer, ctimer,etimer, and rtimer Các mô-đun khác nhau thực hiện các công việc khác nhau

Mô-đun clock cung cấp các hàm để điều khiển thời gian của hệ thống cũngnhư chặn CPU trong một khoảng thời gian ngắn

Ngày đăng: 26/05/2016, 15:41

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w