|
也来个ucos2移植IAR8051.
mcu是CC1110,有4K的XDATA,非传统移植,只保护部分寄存器,不保证正确。
说明:
1.上下文切换只保护部分寄存器:r2,r3,r6,r7,V0-Vn,VB,EA,DPH,DPL,SP
2.OSCtxSw替代OSIntCtxSw
3.中断写法为C一般中断写法
注意必须设置为:
Code Model:Near
Data Model:Large
Calling Convention:XDATA Stack Reetrant
Number of DPTRS:1
#include "config.h"
#define TASK1_STK_SIZE 150
#define TASK2_STK_SIZE 150
OS_STK Task1Stk[TASK1_STK_SIZE];
OS_STK Task2Stk[TASK2_STK_SIZE];
void Task1(void *pdata)
{
volatile float f1=(int)pdata; //初始化浮点数
while(1)
{
P0_6=!P0_6; //LED0翻转
f1+=0.1; //浮点数测试
OSTimeDly(OS_TICKS_PER_SEC/2);
}
}
void Task2(void *pdata)
{
volatile float f2=(int)pdata; //初始化浮点数
while(1)
{
P0_7=!P0_7; //LED1翻转
f2+=0.1; //浮点数测试
OSTimeDly(OS_TICKS_PER_SEC/3);
}
}
int main()
{
CLK_RC_TO_XOSC(); //主时钟有RC切换到外部晶振26M
P0DIR|=_BV(6)|_BV(7); //LED0,LED1设置为输出
TMR_TicksInit(); //时钟节拍中断初始化,使用T4,中断频率OS_TICKS_PER_SEC=100HZ
OSInit(); //系统初始化
OSTaskCreate(Task1,(void *)1,&Task1Stk[TASK1_STK_SIZE-1],1); //创建任务1,优先级1
OSTaskCreate(Task2,(void *)2,&Task2Stk[TASK2_STK_SIZE-1],2); //创建任务2,优先级2
OSStart(); //任务开始调度 (任务第一次运行会自动开中断)
while(1)
{
}
}
ISR(T4_VECTOR)
{
EA=0;
T4OVFIF = 0;
T4IF = 0;
OSIntEnter();
OSTimeTick(); //系统时钟节拍
OSIntExit();
EA=1;
}
点击此处下载 ourdev_453385.rar(文件大小:300K) (原文件名:ucos.7z.rar) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|