Wio Terminal의 TOPPERS/ASP 커널 : Getting started
5924 단어 WioTerminalTOPPERSArduinoRTOS
Arduino M0에 가까운 Wio Terminal이 출시되어 라이브러리를 보면 FreeRTOS의 Arduino 라이브러리이 있다는 것을 알고 코드를 읽으면 ASP 커널에서도 할 수 있다고 생각 작성했습니다.
Wio Terminal용 Arduino 환경 설치
Seeed wiki을 참조하여 Arduino 환경과 라이브러리를 설치하여 Blink가 작동하는지 확인하십시오.
ArduinoIDE는 1.8.6 이상이 필요합니다.
하드웨어 설정 (선택 사항)
UART를 통해 콘솔을 출력하려면 적용 가능한 USB-UART을 후면 확장 커넥터의 다음 핀에 연결하십시오.
단자 번호
기능
6
GND
8
TXD
10
RXD
라이브러리 설치
여기에서 최신 릴리스의 ZIP 파일을 다운로드하십시오.
Arduino IDE를 시작하고 스케치 -> 라이브러리 포함 -> .ZIP 형식 라이브러리 설치를 선택합니다.
파일 대화 상자가 표시되므로 다운로드 한 ZIP 파일을 지정하여 설치합니다.
샘플 실행
ArduinoIDE 파일 -> 스케치 예제 -> ToppersASP -> ToppersASP_Blink를 선택하여 샘플을로드합니다.
코드 해설
ToppersASP_Blink는 다음 세 가지 작업을 수행합니다 (정확하게는 로그 작업을 추가하여 네 개).
setup()
이하의 내용을 기재한다.
커널 객체 초기화(user_inirtn())
커널 시작 후 호출됩니다. 커널 객체의 초기화 처리를 설명한다.
이러한 서비스 호출은이 함수 내에서 마실 수 있습니다.
ER cre_tsk(ID tskid, const T_CTSK *pk_ctsk);
ER cre_sem(ID semid, const T_CSEM *pk_csem);
ER cre_flg(ID flgid, const T_CFLG *pk_cflg);
ER cre_dtq(ID dtqid, const T_CDTQ *pk_cdtq);
ER cre_pdq(ID pdqid, const T_CPDQ *pk_cpdq);
ER cre_mbx(ID mbxid, const T_CMBX *pk_cmbx);
ER cre_mpf(ID mpfid, const T_CMPF *pk_cmpf);
ER cre_cyc(ID cycid, const T_CCYC *pk_ccyc);
ER cre_alm(ID almid, const T_CALM *pk_calm);
ER cfg_int(INTNO intno, const T_CINT *pk_cint);
ER att_isr(const T_CISR *pk_cisr);
ER def_inh(INHNO inhno, const T_DINH *pk_dinh);
ER def_exc(EXCNO excno, const T_DEXC *pk_dexc);
각 객체의 ID는 다음 값을 사용합니다. n은 1~10을 지정 가능. 10 개 이상의 객체를 사용하려면 ./doc/customize.txt를 참조하십시오.
개체
매크로
작업
TASKn
세마포
SEMn
이벤트 플래그
FLGn
데이터 큐
DTQn
우선순위 데이터 큐
PDQn
사서함
MBXn
메시지 버퍼
MBFn
주기 핸들러
CYCHDRn
알람 핸들러
ALMHDRn
태스크 생성 예
태스크를 생성하는 예는 다음과 같습니다.
void
user_inirtn() {
T_CTSK ctsk;
ER ercd;
ctsk.tskatr = TA_ACT;
ctsk.exinf = 1;
ctsk.task = task1;
ctsk.itskpri = 10;
ctsk.stksz = 1024;
ctsk.stk = NULL;
ercd = cre_tsk(TASK1, &ctsk);
....
}
작업 본문의 설명은 일반 ASP 커널과 동일합니다. 작업 본문에서는 ASP 커널 API와 Arduino를 모두 호출 할 수 있습니다.
void
task1(intptr_t exinf)
{
int count = 0;
while(1){
syslog(LOG_NOTICE, "task1 is running. %d", count++);
dly_tsk(1000);
}
}
loop()
loop () 함수는 ASP 커널의 최소 우선 순위 작업으로 실행됩니다. 작업 ID는 IDLE_TASK입니다.
ToppersASP_Blink 소스 코드
#include <ToppersASP.h>
#define USE_SERIALUSB
void setup() {
#ifdef USE_SERIALUSB
SerialUSB.begin(115200);
ToppersASPDelayMs(1000);
while (!SerialUSB);
#endif /* USE_SERIALUSB */
pinMode(LED_BUILTIN, OUTPUT);
StartToppersASP();
}
void
task1(intptr_t exinf)
{
int count = 0;
while(1){
syslog(LOG_NOTICE, "task1 is running. %d", count++);
dly_tsk(1000);
}
}
void
task2(intptr_t exinf)
{
int count = 0;
while(1){
syslog(LOG_NOTICE, "task2 is running. %d", count++);
dly_tsk(1000);
}
}
void
user_inirtn(void)
{
T_CTSK ctsk;
ER ercd;
ctsk.tskatr = TA_ACT;
ctsk.exinf = 1;
ctsk.task = task1;
ctsk.itskpri = 10;
ctsk.stksz = 1024;
ctsk.stk = NULL;
ercd = cre_tsk(TASK1, &ctsk);
ctsk.task = task2;
ercd = cre_tsk(TASK2, &ctsk);
assert(ercd == E_OK);
}
int loop_count;
void loop() {
#ifdef USE_SERIALUSB
SerialUSB.print("loop: ");
SerialUSB.println(loop_count++);
#else /* USE_SERIALUSB */
syslog(LOG_NOTICE, "loop is running. %d", loop_count++);
#endif /* USE_SERIALUSB */
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
변경 내역
Reference
이 문제에 관하여(Wio Terminal의 TOPPERS/ASP 커널 : Getting started), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/exshonda/items/5ed13c87870dee9b2a56텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)