移植uC/OS
关于uC/OS在MSP430的移植可以参考文档[2],并结合邵贝贝翻译的《嵌入式实时操作系统uCOSII》。我网上找到了一份uC/OS-II在MSP430移植好的源码,几乎不用修改。
二、应用程序
主要是针对MSP430-169LCD板子修改下应用程序,本例子旨在用两个任务控制灯的闪烁,任务A让灯亮,任务B让灯灭,两任务交替运行,从而达到灯闪烁的效果。
2.1 LED对应的管脚
MSP430-169LCD有两个LED,一个用于电源指示,另一个可编程的。欲控制该LED,首先得找到与该LED相关的引脚。通过原理图(可以从[1]下载),可以得知该LED对应的引脚是P2.1,如下图红色标记所示:
图1 MSP430-169LCD的LED示意图
2.2 应用程序
任务A,让LED亮,源代码如下:
void TaskStartA(void *pdata)
{
pdata = pdata; /*无任何意义,防止编译器报警 */
WDTCTL = WDT_MDLY_32; /*设置时钟节拍间隔为32ms*/
IE1 |= BIT0; /* 开看门狗定时器中断*/
P2SEL &= BIT1; //引脚功能选择器
P2DIR |= BIT1; //方向寄存器,1为输出模式
while(1)
{
P2OUT |= BIT1; //LED灭亮
OSTimeDly(10); //延时10个时钟节拍,任务挂起,等待延时结束(此时任务B执行)
}
}
任务B,让LED灭,源代码如下:
void TaskStartB(void *pdata)
{
pdata = pdata; /*无任何意义,防止编译器报警*/
WDTCTL = WDT_MDLY_32; /*设置时钟节拍间隔为32ms*/
IE1 |= BIT0; /*开看门狗定时器中断*/
P2SEL &= BIT1; //引脚功能选择器
P2DIR |= BIT1; //方向寄存器,1为输出模式
while(1)
{
P2OUT &= ~BIT1; //LED灭
OSTimeDly(20); //延时20个时钟节拍,任务挂起,等待延时结束(此时任务B执行)
}
} |