[MSP430]/MSP430_EVM2012. 2. 9. 22:00

MSP430™ MCU를 위한 새로운 μC/OS-II RTOS

MSP430™ MCU를 위한  새로운 μC/OS-II RTOS


TI MSP430용 uCOS RTOS를 공개 하고 있다.
[TI 무료 MSP430 RTOS SYS BIOS 사용하기] 의 TI RTOS도 나쁘지 않았는데... uCOS를 밀고 있네...
MSP430에 사용하기는 좀금은 무거운 감이 있긴 했는데 안정성을 강조하고 있다.



"의료용 및 기타 안전 중심 애플리케이션 설계 시, 마이크리움의 µC/OS-II™ 및 µC/OS-III™ 실시간 운영 체제 코드 예제 모두를 MSP430 마이크로컨트롤러에 사용할 수 있습니다. 이는 안전 중심 애플리케이션용으로 특별히 설계된, 업계 유일의 실시간 운영 체제입니다.

µC/OS-II 및 µC/OS-III를 업계 최저전력 마이크로컨트롤러인 MSP430 MCU와 결합하면 초소형 플래시와 RAM 메모리 풋프린트를 사용하는 510(K) 및 PMA 의료용 디바이스를 설계할 수 있습니다.
µC/OS-II는 이미 안전 중심이므로 새로운 의료용 제품 개발로 인한 출시 시간 또한 단축할 수 있습니다."



MSP430 MCU용 µC/OS-II™ , MSP430 MCU용 µC/OS-III™ 다운로드
http://micrium.com/page/downloads/ports/ti/msp430


Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283352011. 11. 27. 23:30

[TMS320F28335 EVM] TI 무료 RTOS SYSBIOS 테스트

[TMS320F28335 EVM] TI 무료 RTOS SYSBIOS 테스트




TI에서 제공하는 무료 RTOS인 SYSBIOS를 TMS320F28시리즈(TMS320F28335)에서 테스트 해보았다. 이번에는 기존 SYSBIOS 테스트 예제 에 추가하여세마포를 이용하여 쓰레드를 처리하는 예제를 테스트 했다.
 


SYSBIOS 프로젝트 생성
CCS4.0 이상에서 (예제는 CCS5에서 테스트 했다.) 에서 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 <ti/sysbios/knl/Semaphore.h>

#include "system.h"
#include "serial.h"

/* Counter incremented by timer interrupt */
volatile UInt tickCount = 0;
volatile UInt tickCount2 = 0;

//세마포 생성
extern const Semaphore_Handle mySem;
extern const Semaphore_Handle mySem2;

Void main()
{
 //사용자 초기화 함수
//--------------------------------------------------------

 SystemInit();

 Led1Init();
 Led1On();

 Led2Init();
 Led2Off();

 //Serial Init
 DebugInit(BAUD_115200);
 DebugPrint("SYS/BIOS Test Program.\r\n");
//--------------------------------------------------------

//--------------------------------------------------------
    //Start RTOS BIOS
    BIOS_start();
//--------------------------------------------------------
}


//수행될 TASK 함수
Void myTaskFxn(Void)
{
  wihle(1) 
  {
    :
   }
}

Void myTaskFxn2(Void)
{
  wihle(1) 
  {
    :
   }
}





기본 환경 설정이 마무리 되었기 때문에 간단한 예제를 작성하여 테스트 해보자.


TASK 설정 및 추가를 위한 cfg 파일 수정
var BIOS = xdc.useModule('ti.sysbios.BIOS');
BIOS.swiEnabled = false;
BIOS.taskEnabled = true;
BIOS.clockEnabled = false;


/* Create a task with priority 1 */
var Task = xdc.useModule('ti.sysbios.knl.Task');
var taskParams = new Task.Params();
taskParams.priority = 1;
var myTask = Task.create('&myTaskFxn', taskParams);
var myTask2 = Task.create('&myTaskFxn2', taskParams);

/* Inhibit the creation of a task to run idle functions */
Task.enableIdleTask = false;



TASK 실행
cfg파일에서 정의한 TASK를 실행할 함수를 아래과 같이 작성해 준다. 아래 예제는 단순히 루프를 돌며 대기하다 세마포 이벤트가 발생하면 LED깜박이고 UART로 값을 출력하는 예제이다. 세마포 이벤트는 일정 간격으로  타이머 Task에서 호출하도록 했다.
//RTOS TASK1 - BIOS_start() thread.
Void myTaskFxn(Void)
{
    while (TRUE)
    {
        //세마포 핸들에 의해 호출 되기전 까지 대기
        Semaphore_pend(mySem, BIOS_WAIT_FOREVER);
       
        Led1Toggle();
        DebugPrint("Task1=%d\r\n", tickCount);
    }
}


//RTOS Task2
Void myTaskFxn2(Void)
{
 while(1)
 {
  //세마포 핸들에 의해 호출 되기전 까지 대기
        Semaphore_pend(mySem2, BIOS_WAIT_FOREVER);

  Led2Toggle();
  test_cnt2++;
  DebugPrint("Task2=%d\r\n", test_cnt2);
 }
}


예제를 실행하면 두개의 TASK가 원하는 시간에 동작되는 것을 LED및 UART를 통해 확인 할 수 있다.
Task1=41
Task2=418
Task2=419
Task2=420
Task2=421
Task2=422
Task2=423
Task2=424
Task2=425
Task2=426
Task2=427
Task1=42
Task2=428
Task2=429
Task2=430
Task2=431
Task2=432
Task2=433
Task2=434
Task2=435
Task2=436
Task2=437
Task1=43



결론
RTOS는 사용의 편리성 보다는 초기 설정이나 MCU별 포팅에 대한 문제 때문에 부담이 많이 가는것이 현실이다.
TI에서 제공되는 SYS/BIOS는 TI의 대부분 MCU를 지원하고 간단히 설정 가능하므로 여러가지 장점이 많다. 한번 설정 해 두면 앞으로 도움이 많이 될것 같다.
Posted by nexp

댓글을 달아 주세요

  1. 박인권

    관리자의 승인을 기다리고 있는 댓글입니다

    2012.01.05 04:00 [ ADDR : EDIT/ DEL : REPLY ]

[MSP430]/MSP430F5x2011. 11. 26. 18:00

[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를 쉽게 테스트 보고 구조를 파악하는데 사용할 수 있을것  같다.
Posted by nexp

댓글을 달아 주세요