TinyOS2009/06/22 09:27


전혀 몰랐던 사실을 아는 기분이란 ? 킇ㅋㅋ
나는 Retransmission을 따로 설정하는지 모르고 Protocol을 내가 만들어 사용하려 하였다.
그러나 !!! 간단한 설정만으로 Retransmission기능을 사용할 수 있다는것을 알게 되었따. !
위 그림을 보면 A가 패킷을 보내고 B는 받게 된다. 만약 그림과 같이 Ack가 깨지가 된다면, A는 다시 전송한다. Ack 가 제대로 올때 까지.

TinyOs에서 설정해야 하는 내용은 무엇이 있을까 ?? 알아 보자

Tos/폴더에서 (기본설정)
platform/cricket/CC1000RadioIntM.nc:      bAckEnable = FALSE;
system/AMPromiscuous.nc:    crc_check = TRUE;
lib/Queue/QueuedSendM.nc:    retransmit = FALSE;

Tos/폴더에서 (변경 후 )
platform/cricket/CC1000RadioIntM.nc:      bAckEnable = TRUE;
system/AMPromiscuous.nc:    crc_check = TRUE;
lib/Queue/QueuedSendM.nc:    retransmit = TRUE;


그리고 Configuration 파일과 Module파일의 MacControl사용을 명시하여 설정한다.

implementation {
  components CC1000RadioIntM as Radio,

  CricketSensorM.MacControl -> Radio.MacControl;
}

uses {
            interface MacControl;
}

command result_t StdControl.start() {
       call MacControl.enableAck();
}
저작자 표시 비영리 동일 조건 변경 허락
Posted by Lws
TinyOS2009/03/02 19:56

고민 고민 해서 실험에 성공하였다.;;
많은 에러와. 여러가지 문제들이 많았지만.. 문제를 찾고난 후. 간단한 것들 이란것을 알았다.

1. /opt/tinyos-1.x/tools/java/net/tinyos/sim/msg 폴더에 간다.
make all 실행

2. /opt/tinyos-1.x/tools/java/net/tinyos/sim/ 폴더로 간다.
make all 실행

3. 2개의 cygwin을 띄운다.
1) apps/TestTinyViz 폴더로 간다.
make pc
build/pc/main.exe -gui 30
2) /opt/tinyos-1.x/tools/java/net/tinyos/sim 폴더로 간다.
tinyviz 실행.


저작자 표시 비영리 동일 조건 변경 허락
Posted by Lws
TinyOS2009/02/10 13:29
RF 통신을 잘 활용하면 특정 mote에 데이터를 보낼수 있다.

IntToRfmM.nc
  bool pending;
  struct TOS_Msg data;

  /* ... */ 

  command result_t IntOutput.output(uint16_t value) {
    IntMsg *message = (IntMsg *)data.data;

    if (!pending) {
      pending = TRUE;

      message->val = value;
      atomic {
      message->src = TOS_LOCAL_ADDRESS;
      }

      if (call Send.send(TOS_BCAST_ADDR, sizeof(IntMsg), &data))
        return SUCCESS;

      pending = FALSE;
    }  
    return FAIL;
  }
 
TOS_LOCAL_ADDRESS : 지역 주소
TOS_BCAST_ADDR : 전역 주소.
/opt/tinyos-1.x/apps/RfmToLeds : RF 수신하고 LED로 표시한다
/opt/tinyos-1.x/apps/CntToLedsAndRfm : RF 송신하고 LED로 표시한다.
 
call Send.send(TOS_LOCAL_ADDRESS, sizeof(IntMsg), &data)) 로 바꿀경우 특정 모트에만 전송을 하게 할수가 있다.
인스톨 방식 : make cricket install.주소
저작자 표시 비영리 동일 조건 변경 허락
Posted by Lws
TinyOS2009/02/04 11:21

MTS310 보드엔.
조도, 온도, 사운드(부저),마이크,가속,자력 센서등이 달려있다.
이런것들을 잘이용한다면, 현재 환경속에서 많은 정보를 얻을수 있다.

사운드 컴포넌트와 연결.
SenseM.SounderControl -> Sounder;
인터페이스 추가.
interface StdControl as SounderControl;
초기화
call SounderControl.init();
사운드 on.
call SounderControl.start();
사운드 off.
call SounderControl.stop();

빛이 어두워졌을경우. LED의 빨간색이 밝혀지고 센서보드에서 소리가 나게된다.
if (value &4) {
    call Leds.redOn();
    call SounderControl.start();
}
else {
    call Leds.redOff();
    call SounderControl.stop();
}
저작자 표시 비영리 동일 조건 변경 허락
Posted by Lws
TinyOS2009/02/03 12:00

Lesson2를 보던도중.
생소한 함수가 나왔다.
unique("Timer") 와 uniqueCount("Timer") 이다.
튜토리얼엔 새로운 문법 bit로써parameterized interface라고 불린다고 한다.
또한.
unique 와 uniqueCount 는 the compile-time constant function unique() 라고 컴파일시간 상수 함수라고 명시되어 있다.

그럼 직접 실습을 해보기로 하였다.

unique("Timer")와 unique("MyTimer")가 실제로 같은가 ? 라는 의문점을 가지고 실습을 하였다.
결과값은 같다 !! 가 나왔다.




그렇다면, unuqueCount("Timer")는 무슨기능을 하는가 ?
결론적으로 말하면, uniuqe("Timer")의 사용횟수를 의미하는것이다.
실험 해본결과.
module 에 unique("Timer")의 값을 바꿔봤더니 1만큼 감소되는것을 확인할수가 있었다.

저작자 표시 비영리 동일 조건 변경 허락
Posted by Lws
TinyOS2009/01/29 11:54

보통 센서 보드가 어떻게 설정되어 있는지 모르고 make하는경우가 있다.

/apps/폴더 안에 Makerules라는 파일을 살펴보면 쉽게 알수 있다.

ifeq ($(SENSORBOARD),)
    ifeq ($(PLATFORM),mica)
        SENSORBOARD = micasb
    endif
    ifeq ($(PLATFORM),mica2)
        SENSORBOARD = micasb
    endif
    ifeq ($(PLATFORM),cricket2dm)
        SENSORBOARD = micasb
    endif
    ifeq ($(PLATFORM),cricket2)
                SENSORBOARD = micasb
        endif
    ifeq ($(PLATFORM),cricket)
                SENSORBOARD = micasb
        endif
    ifeq ($(PLATFORM),cricket_mit)
                SENSORBOARD = micasb
        endif
    ifeq ($(PLATFORM),mica128)
        SENSORBOARD = micasb
    endif
    ifeq ($(PLATFORM),rene2)
        SENSORBOARD = basicsb
    endif
    ifeq ($(PLATFORM),pc)
        SENSORBOARD = micasb
    endif
    ifeq ($(PLATFORM),cricket_pc)
        SENSORBOARD = micasb
    endif
    ifeq ($(PLATFORM),mica2dot)
        SENSORBOARD = basicsb
    endif
endif

한눈에 무슨 mote가 무슨 센서보드로 설정이 되어 있는지 알수가 있다. !!

저작자 표시 비영리 동일 조건 변경 허락
Posted by Lws
TinyOS2009/01/22 11:48


위에 보이는 Led가지고 실습을 해보았다.

실습 내용은 000 2진수 counting 을 하는것이다.
1씩 숫자를 증가 시키면서 LED를 점등하는 실습인데.
이 실습을 통해서 2진수계산법과 기본적인 컴포넌트 프로그래밍 스킬을 익힐수가 있다.

atomic count ++ ;
temp = count%7;
if(count >0 && temp ==0){
    temp = 7;
}
if(temp & 0x1) {
    call Leds.redOn();
}else {
    call Leds.redOff() ;
}
if(temp & 0x2) {
    call Leds.greenOn();
}else {
    call Leds.greenOff();
}if(temp & 0x4) {
    call Leds.yellowOn();
}else {
    call Leds.yellowOff();
}

내가 한 방식이다. 여러가지 방식이 있겠지만.
내가짠 알고리즘 방식은 16진수 1 2 4 를 비교해서 같은경우 점등 다르면 소등을 한다.
즉 5 일 경우 녹색와 빨간색 LED가 점등이 된다..
저작자 표시 비영리 동일 조건 변경 허락
Posted by Lws
TAG LED, tinyos, 예제
TinyOS2009/01/21 20:56

Cygwin에서 clear명령어가 안먹히는것을 확인할수 있었다.;;

화면을 지워야 하긴 하겠는데.. 어떻게 하면 좋을까 하다 이곳저곳 찾아본결과..

리눅스 명령어로 실행파일을 찾는 방법중 한개가

which clear 이런식으로 치는것이다.

$ which clear
clear: Command not found.

결과는 없었다.;;

설치가 제대로 이뤄지지 않은것이였다.
ncurses package안에 있다는데.. 흠..

패키지를 설치 하지 않고 하는 방법을 2가지를 해보고자 한다.

방법1 )))
~/.bashrc 파일에 아래 한줄을 추가해준다.(파일 안 내용이 아무것도 없을경우는 vi 에디터로 생성해준다.)

alias clear='echo -e "\E[2J"'

방법2 )))
clear를 하기 위해서 alias 를 안하고 단순한 방식으로

CTRL+L 을 클릭해 보면 말끔히 화면이 지워지는것을 확인할수가 있다. ㅎ
저작자 표시 비영리 동일 조건 변경 허락
Posted by Lws
TinyOS2009/01/20 12:59

TinyOS에서는 친절하게 자신이 설계한 컴포넌트를 자동으로 html파일과 이미지 파일로 만들어 주는 명령어가 있다.

커맨드 창에서 이렇게 치면.. 폴더에 관련 파일들이 생성되는것을 확인할수가 있다.

make <platform> docs

직접 Test를 해보았다.


C:\tinyos\cygwin\opt\tinyos-1.x\doc\nesdoc\cricket 폴더안에 파일이 생성된것을 확인할수 있었다.

덤으로 blink 예제를 수행시킨 결과 그림한개를 가져와 보았다.

참 좋은 기능이다. 자신이 프로그램을 다 짜면 이런식으로 문서화 할때 편리하게 이용할수가 있다는게 얼마나 좋은가..
저작자 표시 비영리 동일 조건 변경 허락
Posted by Lws
TinyOS2009/01/19 12:54
TinyOS를 공부했던 지난 여름방학때가 기억난다.. 아무것도 모르면서 무턱대고 시작만 햇던시기 ;;
지금 다시 기억을 회상하면서 다시 시작하고자 한다.
처음부터 의문점을 가지고 한개한개씩 배워 나가 보자.

TinyOS system과 library와 application은 무엇으로 쓰여 있을까요 ?

nesC 기반으로 되어있다.
nesC는 c언어와 비슷하고, TinyOS는 c와nesC두개의 모델을 모두 수용한다.
TinyOS의 중요한것들은 다 nesC기반으로 만들어져 있습니다.

TinyOS는 그럼 누구를 위해서 만들어 졌으면, 무엇에 쓰이는가 ?

TinyOS는 센서 네트워킹을 하는 embedded systems 을 위해서 만들어졌고,
궁극적인 목적은 application designers에게 좀더 쉽게 접근을 허용하고 쉽게 구축을 도와주기 위함이다.

nesC의 특징은 무엇인가 ?

1.잘규약된 component기반이며, 양방향성을 가진 interface로 구축되어 있습니다.

2.nesC는 concurrency model로 tasks and hardware event handlers 를 기반을 하고 있습니다. data 컴파일 순서에 따라 작업이 수행됩니다.

nesC는 어떻게 구성되어 있는가 ?

한개이상의 Components가 연결되어 있는 구조로 되어 있습니다.
각각의 Components들은 provides and uses interface를 가지고 있습니다.
interface는 허용한 지점만 access를 허용하고, 양방향성을 지니고 있습니다.
그리고 interface는 provider가 수행하는 command와 interface user가 사용하는 event가 있습니다.
Component가 interface의 command를 호출하기 위해서는,반드시 interface의 event를 수행해야 합니다.
그리고 한개의 Component는 여러개의 provide와use interface를 가지며, 같은 interface내에도 여러개의 instance를 가지고 있습니다.

nesC의 2개 타입 ?

modules 와 configuration이 있다.
modules는 주로 한개이상의 interface를 사용하기 위한 코드들이 들어있습니다.
configuration은 다른components들과 wiring하여 구성하는 코드들이 있습니다.

코드 내부 이름은 어떻게 규정하나요 ?

TinyOS Coding and Naming Conventions
내부 내용을 보면 자세하게 이름을 어떻게 쓰는지 나와있다.

TinyOS의 두개의 threads 가 존재한다 !!!! ??

TinyOS에는 동시에 2개의 쓰레드가 존재 합니다.
그것은 tasks와 hardware event handlers 입니다

Task와 hardware event handlers의 차이점은 ??

이것은 상당히 중요한 개념으로
작업을 선점하냐 안하냐를 따지는문제를 가지고 논하는것입니다.
Task는 어떤 작업이 있을경우 다른 작업을 선점 하지 않습니다.
hardware event handlers의 경우는 async수식어와함께쓰인 event와command는 다른작업이 있어도 중간에 interrupt해서 선점합니다.

흠...
컴포넌트 기반의 프로그래밍이라..
저작자 표시 비영리 동일 조건 변경 허락
Posted by Lws
TAG nesC, tinyos