TinyOS 2.0 Overview II

TINYOS 2007. 3. 2. 13:26

4. Booting/Initialization

2.0의 부팅 하는 방법은 1.0과 틀리다. 1.0의 StdControl 은 StdControl, Init로 나뉘었으나 2.0에는 하나 뿐이며 두개의 start, stop 함수만 가지고 있다. 1.0에서는 부팅되며 하드웨어를 켜고 초기화 과정을 했으나 2.0에서는 초기화만 한다. 그리고 하드웨어, 스케줄러등등의 초기화 과정이 끝나면 Boot.boot 이벤트를 발생 시킨다. 어플리케이션에서는 이 이벤트와 start,stop 명령어만 잘 사용하면 될것이다. 부팅에 관한건 TEP107을 참조 하도록

*. 앗.. ~~~!!! 이제 StdControl의 stoop명령어로 Power off이 안되는 것인가 에효 ... 다른걸 궁리 해야 하는군 ㅡ.ㅡ;

5. Virtualization
추상화~~!!!
2.0의 컴포넌트들은 1.0처럼 병렬인터페이스들은 자주 사용하는 것이 아닌 서비스 별로 추상화된 모듈을 많이 사용 한다.

* . 물론 이런 서비스추상화 모듈이 편하긴 하지만 조금만 해보면 좀더 밑으로 가보고 싶을껄 ㅡ.ㅡ;

6. Timers
2.0은 타이머 셋팅에 좀더 많은 옵션을 제공한다. 일단 하드웨어 플랫폼에 따라서 32KHz의 밀리세컨 단위의 타이머는 기본 제공 한다. 그리고 매우 정확한 타이머를 두개 내지 한개 제공 한다.(async 키워드를 사용하는 타이머 물론 모르면 넘어가라. 대충 매우 정확하고 즉시 일들이 일어난다고 생각하면 된다.) 그리고 매우 유용한 기능 타이머 컴포넌트에게 타이머 터질때 까지 얼마나 남았냐고 물어 볼수 있으며, 몇 초 후부터 타이머를 가동해라고 명령 할 수 도 있다.

일단 여기서 보는 예로 2.0에서의 추상화가 1.0과 어떻게 다른지 알수 있다 참조 해라.

1.0에서

components App,TimerC;

App.Timer->TimerC.Timer[unique("Timer")];

2.0에서는

components App, new TimerMilliC();

App.Timer->TimerMilliC;

*뭐여 완전 자바다 이젠 ㅡ.ㅡ;

7. Communication
-일단 많이 바뀌었다 ㅡ.ㅡ;
메세지 구조는 message_t 로 바뀌었고 패킷필드를 직접 참조를 못한다(윽 불편해 ㅡ.ㅡ;)  예로 msg의 목적지 주소에 접근 할려면 ㅡ.ㅡ;; 윽 AMPacket.destination(msg) 를 써야 한단다 ㅡ.ㅡ

send insterface도 구분된다. AMSend interface는 목적지 필요한 인터페이스 이며 , broadcasting 추상화 계층은 Address 없이 사용하는 Send 인터페이스를 써야한다.

그리고 자주 사용 하는 UART_ADDRESS도 못쓴다 대신 따로 있다. SerialActivemessage를 사용 해야 한다.

Active Message(여기서 Active Message는 구조가 아니다.표준 통신 모듈이다.)  시스템은 네개의 추상화 모듈로 구성되며, 큐를 공유 하는 1.0과는 달리 각 센더 컴포넌트 마다 예약된 큐를 따로 가진다.(스케줄러랑 똑같다.) 그리고 각 큐는 동등한 권한을 가진다.(앗 이건 안된다.. 먼저 주고 싶을때도 있을건데.. 음 ㅡ.ㅡ;만들까)

TEP111 은 message_t 에대하여 TEP116은 AM에 대해 나와 있다 참조!!

low power stact 은 CC1000에 대해선 나와 있고 CC2420은 테스트 중이란다.(에효 빨리 해줘 ㅡ.,ㅡ;)

8. Sensors
2.0에서 센서 컴포넌트는 HIL 센서 플랫폼이다. TEP114를 보면 HIL 데이타 획득 인터페이스가 제공 해주는 Read, ReadStream, get이 있으며 그 센서의 제공 능력에 따라 나뉜다.

좀더 정확한 걸 원하면 HAL을 직접 접근 하도록 하라.

9. ERROR_CODE
1.0에서의 반환 값은 result_t 였다 2.0은 error_t로 바뀌었으며 error_t는 SUCCESS,FAIL,EBUSY,ECANCEL의 인자를 가진다.

기존의 1.0 소스

if(call A.b()){
  busy=TRUE;
}

는 다음과 바꿀것을 추천한다.

if(call A.b()==SUCCESS){
busy = TRUE;
}

오늘은 더 할지 안 할지 모르겠다 ㅡ.ㅡ; 빨리 해야쥐 원

, .