본문 바로가기

[MSP430]/MSP430F5x

[MSP430F55xx EVM] TI 무료 RTOS SYSBIOS 사용하기

[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 기본 골격
#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();
}



사용자 함수(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");
 :



Void myTickFxn(UArg arg)
{
    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);



테스트 결과
MSP430를 8Mhz로 구동시 Task간 구동 시간은 20us 걸린다.
 TI에서 제공되는 SYS/BIOS는 TI의 대부분 MCU를 지원 하므로 간단한구조의 MCU인 MSP430을 이용하여 RTOS를 쉽게 테스트 보고 구조를 파악하는데 사용할 수 있을것  같다.
반응형