[MSP430F55xx EVM] TI 무료 RTOS SYSBIOS 사용하기
MSP430용 TI의 무료 RTOS인 SYSBIOS를 테스트 했다. CCS4.0 이상에서 (예제는 CCS5에서 태스트 했다.) 에서 SYSBIOS 프로젝트 생성시 지원 가능하다. SYSBIOS는 대부분의 TI MCU를 지원하기 때문에 간단히 적용가능하다.
[참고]
http://processors.wiki.ti.com/index.php/SYS/BIOS_for_the_MSP430
MSP430 SYSBIOS 프로젝트 생성
CCS 프로젝트 생성시 SYSBIOS 항목에서 적당한 탬플릿을 선택하면 간단히 적용할 수 있다.
RTOS 버전 설정
SYSBIOS 등록 후 cfg파일에서 SYS/BIOS관련 각종 파라미터들을 설정 할 수 있다.
SYSBIOS 구조
SYSBIOS 기본 골격
사용자 함수(Task) 등록하기
일정 시간에 원하는 동작을을 하는 사용자 함수는 cfg파일에서 설정가능한데 아래와같이 addFunc()으로 원하는 함수를 추가하면 된다.
cfg파일 또는 main 함수에서 설정 가능하다.
테스트 결과
MSP430를 8Mhz로 구동시 Task간 구동 시간은 20us 걸린다.
TI에서 제공되는 SYS/BIOS는 TI의 대부분 MCU를 지원 하므로 간단한구조의 MCU인 MSP430을 이용하여 RTOS를 쉽게 테스트 보고 구조를 파악하는데 사용할 수 있을것 같다.
MSP430용 TI의 무료 RTOS인 SYSBIOS를 테스트 했다. CCS4.0 이상에서 (예제는 CCS5에서 태스트 했다.) 에서 SYSBIOS 프로젝트 생성시 지원 가능하다. SYSBIOS는 대부분의 TI MCU를 지원하기 때문에 간단히 적용가능하다.
[참고]
http://processors.wiki.ti.com/index.php/SYS/BIOS_for_the_MSP430
MSP430 SYSBIOS 프로젝트 생성
CCS 프로젝트 생성시 SYSBIOS 항목에서 적당한 탬플릿을 선택하면 간단히 적용할 수 있다.
RTOS 버전 설정
SYSBIOS 등록 후 cfg파일에서 SYS/BIOS관련 각종 파라미터들을 설정 할 수 있다.
SYSBIOS 구조
SYSBIOS 기본 골격
#include <xdc/std.h>
#include <xdc/runtime/Log.h>
#include <ti/sysbios/BIOS.h>
#include "system.h"
#include "serial.h"
Void main()
{
//사용자 초기화 함수
SystemInit();
Led1Init();
Led1On();
Led2Init();
Led2Off();
//Serial Init
DebugInit(BAUD_115200);
DebugPrint("SYS/BIOS Test Program.\r\n");
//Start RTOS BIOS
BIOS_start();
}
//RTOS TASK1 - BIOS_start() thread.
Void myIdleFxn(Void)
{
Led1Toggle();
}
//RTOS Task2
Void myIdleFxn2(Void)
{
Led2Toggle();
}
#include <xdc/runtime/Log.h>
#include <ti/sysbios/BIOS.h>
#include "system.h"
#include "serial.h"
Void main()
{
//사용자 초기화 함수
SystemInit();
Led1Init();
Led1On();
Led2Init();
Led2Off();
//Serial Init
DebugInit(BAUD_115200);
DebugPrint("SYS/BIOS Test Program.\r\n");
//Start RTOS BIOS
BIOS_start();
}
//RTOS TASK1 - BIOS_start() thread.
Void myIdleFxn(Void)
{
Led1Toggle();
}
//RTOS Task2
Void myIdleFxn2(Void)
{
Led2Toggle();
}
사용자 함수(Task) 등록하기
일정 시간에 원하는 동작을을 하는 사용자 함수는 cfg파일에서 설정가능한데 아래와같이 addFunc()으로 원하는 함수를 추가하면 된다.
/* Add a background idle function */
var Idle = xdc.useModule('ti.sysbios.knl.Idle');
Idle.addFunc("&myIdleFxn");
Idle.addFunc("&myIdleFxn2");
Idle.addFunc("&myIdleFxn3");
:
var Idle = xdc.useModule('ti.sysbios.knl.Idle');
Idle.addFunc("&myIdleFxn");
Idle.addFunc("&myIdleFxn2");
Idle.addFunc("&myIdleFxn3");
:
Void myTickFxn(UArg arg)
{
tickCount++;
tickCount1++;
}
{
tickCount++;
tickCount1++;
}
cfg파일 또는 main 함수에서 설정 가능하다.
/*
* Create a timer instance to generate periodic interrupts.
*
* The timer will be started within the BIOS_start()
* thread
*/
var Timer = xdc.useModule('ti.sysbios.family.msp430.Timer');
var timerParams = new Timer.Params();
timerParams.startMode = Timer.StartMode_AUTO;
timerParams.runMode = Timer.RunMode_CONTINUOUS;
/* Timer period is 1/2 second (1,000 uSeconds) */
timerParams.period = 1000;
timerParams.periodType = Timer.PeriodType_MICROSECS;
var myTimer = Timer.create(0, '&myTickFxn', timerParams);
* Create a timer instance to generate periodic interrupts.
*
* The timer will be started within the BIOS_start()
* thread
*/
var Timer = xdc.useModule('ti.sysbios.family.msp430.Timer');
var timerParams = new Timer.Params();
timerParams.startMode = Timer.StartMode_AUTO;
timerParams.runMode = Timer.RunMode_CONTINUOUS;
/* Timer period is 1/2 second (1,000 uSeconds) */
timerParams.period = 1000;
timerParams.periodType = Timer.PeriodType_MICROSECS;
var myTimer = Timer.create(0, '&myTickFxn', timerParams);
테스트 결과
MSP430를 8Mhz로 구동시 Task간 구동 시간은 20us 걸린다.
TI에서 제공되는 SYS/BIOS는 TI의 대부분 MCU를 지원 하므로 간단한구조의 MCU인 MSP430을 이용하여 RTOS를 쉽게 테스트 보고 구조를 파악하는데 사용할 수 있을것 같다.
반응형