Nol.A SDK Library 26.11.2
For IoT System Software Development
Loading...
Searching...
No Matches
Nol.A-SDK Library: C++ Library for developing resource-constrained embedded systems

Introduction

Nol.A-SDK는 IoT용 embedded systems 개발을 위한 CLI 기반 개발환경입니다. 그리고 Nol.A-SDK Library는 다양한 하드웨어, 통신 프로토콜, 라이브러리 등을 지원하기 위한 C++ 라이브러리, Makefile, 링커 스크립트, 플래싱 스크립트 등의 모음입니다.

Installation

개발 도구 설치 및 프로젝트 생성, 빌드, 플래싱 등 개발 환경 구성에 대한 자세한 내용은 Nol.A-Tools를 참고해주세요.

Coding-Style

Nol.A-SDK에서는 C++를 기본 언어로 사용합니다. 물론 C 파일도 컴파일 및 링킹을 지원합니다. 저희가 지원하는 보드들은 다양하지만 모두 GCC를 사용합니다. 자세한 보드별 컴파일러 종류 및 버전 정보는 Supported Boards 를 참고해주세요. 문법 표준은 C++14 with GNU extensions (gnu++14), 및 C99를 지원합니다.

사용자 애플리케이션의 시작 지점은 Arduino 처럼 setup() 입니다. setup()에서는 각종 초기화를 수행합니다.

void setup() {
Serial.begin(115200);
Serial.printf("Hello World!\n");
// Do something.
}

Arduino와 달리 loop() 같은 함수는 지원하지 않습니다. 그 대신 postTask 와 Timer 를 지원합니다.

  • postTask: 작업 함수 func 를 args 인자와 함께 시스템 작업 큐에 등록합니다. 등록된 작업은 현재 실행 중인 작업이 완료된 직후 시스템 스레드에 의해 실행됩니다. 인터럽트 핸들러 등에서 바로 실행하기 부담스러운 작업을 지연 실행할 때 사용합니다. 큐가 가득 차 있으면 등록에 실패하고 false 를 반환합니다.
  • Timer: 일정 시간 후 1회(startOneShot) 또는 매 주기(startPeriodic)마다 작업 함수를 실행하기 위한 클래스입니다. onFired() 로 실행할 작업을 지정합니다.
Timer timerHello;
static void taskHello(void *) {
Serial.printf("Hello World!\n");
}
void setup() {
Serial.begin(115200);
postTask(taskHello, nullptr);
timerHello.onFired(taskHello);
timerHello.startPeriodic(1000);
}
Timer는 일정 시간 이후에 1회 실행될 작업, 매 일정 시간마다 실행될 작업 등을 위한 기능입니다.
Definition Timer.hpp:61
bool startPeriodic(uint32_t millis, bool interrupt=false)
작업함수를 매 millis 밀리초 주기로 반복하여 실행합니다.
void onFired(void(*func)(void *), void *args=nullptr)
타이머 만료시 실행시킬 작업함수를 지정합니다.
bool postTask(void(*func)(void *), void *args)
작업을 나중에 실행되도록 게시합니다.

Keywords

  • NOLA_VER_MAJOR: Library version (major number)
  • NOLA_VER_MINOR: Library version (minor number)
  • NOLA_VER_PATCH: Library version (patch number)

Project Options

Nol.A-SDK에서 프로젝트 별로 생성되는 Nol.A-project.json 파일에 다음과 같은 옵션을 추가하면 추가적인 기능을 사용할 수 있습니다.

일부 option 들은 보드별로 지원 가능 여부가 다릅니다. 자세한 정보는 보드별 정보를 참고해주세요.

Heap and Stack Size

  • NOLA_HEAP_SIZE: Heap 크기를 지정(단위: byte)
  • NOLA_STACK_SIZE: Stack 크기를 지정(단위: byte)

위 옵션들은 생략시 보드별 기본 heap 및 stack 크기를 사용합니다. 자세한 정보는 보드별 정보를 참고해주세요.

Debugging Messages

  • NOLA_DEBUG_AT86RF233: 1이면 AT86RF233Chip 드라이버의 디버깅 메시지를 출력
  • NOLA_DEBUG_CC1200: 1이면 CC1200Chip 드라이버의 디버깅 메시지를 출력
  • NOLA_DEBUG_DW1000: 1이면 DW1000Chip 드라이버의 디버깅 메시지를 출력
  • NOLA_DEBUG_6LORAWAN: 1이면 IPv6LoRaWAN 프로토콜의 디버깅 메시지를 출력
  • NOLA_DEBUG_SX126X: 1이면 SX126xChip 드라이버의 디버깅 메시지를 출력
  • NOLA_DEBUG_SX127X: 1이면 SX127xChip 드라이버의 디버깅 메시지를 출력
  • NOLA_DEBUG_SX1301: 1이면 SX1301Chip 드라이버의 디버깅 메시지를 출력
  • NOLA_DEBUG_HTTP: 1이면 HTTP 프로토콜의 디버깅 메시지를 출력
  • NOLA_DEBUG_IPV6: 1이면 IPv6 프로토콜의 디버깅 메시지를 출력
  • NOLA_DEBUG_IEEE802_15_4FRAME: 1이면 IEEE802.15.4 프로토콜의 디버깅 메시지를 출력
  • NOLA_DEBUG_LORAWAN: 1이면 LoRaWAN 프로토콜의 디버깅 메시지를 출력
  • NOLA_DEBUG_LPPMAC: 1이면 LPPMac 프로토콜의 디버깅 메시지를 출력
  • NOLA_DEBUG_DSTWRANGING: 1이면 DSTWRanging 프로토콜의 디버깅 메시지를 출력
  • NOLA_DEBUG_TSCHMAC: 1이면 TSCHMac 프로토콜의 디버깅 메시지를 출력

예를 들어, SX127xChip 드라이버와 LoRaWAN 프로토콜의 디버깅 메시지를 출력하기 위해서는 다음과 같이 옵션을 지정하면 됩니다.

{
"options": "NOLA_DEBUG_LORAWAN=1 NOLA_DEBUG_SX127X=1",
}

The '.noinit' Section

프로젝트에서 초기화되지 않는 변수를 사용하고 싶으면 다음과 같이 변수명에 attribute를 지정할 수 있습니다.

int foo __attribute__ ((section(".noinit")));

.noinit section에 너무 많은 변수를 지정하면 힙 또는 스택 영역이 줄어들어 애플리케이션이 정상 동작하지 않을 수 있습니다. 보드별 크기 제한 등 자세한 정보는 보드별 정보를 참고해주세요.