nesC의 함수는 개념 commad와 event라는 두 가지 함수를 사용한다. command는 일반적인 c 언어의 함수와 비슷하고, 명령의 방향이 상위 소프트웨어에서 하위 하드웨어로 호출된다. event는 하드웨어 동작에 대한 이해가 필요한데, command (명령)에 따른 기능 수행 후에 발생하는 이벤트를 호출하는 함수이다.
nesC 프로그래밍
TinyOS는 non Preemption 방식으로 동작한다. 이는 현재 동작하고 있는 태스크를 중지시키지 못하고, 먼저 실행되고 있는 태스크의 수행이 종료될 때 까지 기다려야 하는 방식을 취하고 있다. 다만 하드웨어 인터럽트는 인터럽트 서비스 부문에서 처리 되며, 모든 수행중인 동작보다 우선적으로 처리된다. 즉, 이전에 수행되던 태스크를 정지시키고 인터럽트 핸들러가 처리된다. nesC와 C는 동일한 문법을 따르고 있고, nesC에 Component(컴포넌트)와 interface(인터페이스)이다. Component는 일종의 부품으로써 소프트웨어를 개발할 때 사용하는 부품으로 사용 된다. 기능을 모아 놓은 부품으로, RF 통신의 기능이 필요하다면 해당 Component를 사용하면 된다. Component들을 연결하여 원하는 기능의 소프트웨어를 만들어 가는데, 사용하는 component interface(인터페이스)를 사용하여 연결한다. Interface는 각 component들이 제공하는 기능 (command, event)를 정의하는데 사용된다. 모듈(module)은 실제 실행되는 코드인 함수가 존재하는 파일이다. 확장명은 *.nc 이다. 모듈은 여러 개의 함수를 지원하는 파일이며, 인터페이스를 통해 해당 함수들이 구현된다. 여기서 인터페이스를 통해 함수들이 제공(provides)되거나 사용(uses)되는 방법은 주의해서 이해해야 한다. 일반적으로 함수를 코드로 구현해서 제공하고, 원하는 곳에서 호출하여 사용하는 것이 언어에서 함수를 사용하는 방법이다. nesC에서는 일반 C와 다르게 그냥 함수를 구현하여 제공만 하지 않는다. 인터페이스라는 것은 일반 C와 다르게 함수를 두 가지로 분류한다. 커맨드(command)와 이벤트(event)이다. 모듈은 provides 키워드로 제공할 커맨드 함수를 정할 수 있다. 제공된 커맨드 함수는 다른 모듈에서 호출하여 사용할 수 있다.