Nios开发--ucos2
文章摘要:
Nios2已经移植好了ucos2的相关代码,只需要进行简单的配置即可使用;
硬件平台:EP4CE6F17C8
开发环境:Quartus II 13.1/Nios II 13.1
参考文档:Nios II Software Developer’s Handbook
添加SysTick定时器
由于ucos2需要一个毫秒级的系统时钟来实现节拍(Time Tick),所以需要创建一个周期为1ms的Interval Timer组件;
创建基于ucos2的BSP
BSP配置
示例代码:
#include "regs.h"
#include "unistd.h"
#include <os_cfg.h>
#include <ucos_ii.h>
#include <stdio.h>
//----------------------------------
OS_STK LedTaskStk[OS_TASK_TMR_STK_SIZE];
void LedTask(void *pdata)
{
for(;;)
{
rLEDS = 0x55;
//OSTimeDlyHMSM(0,0,0,100);
OSTimeDly(500);
//OSTaskSuspend(OS_PRIO_SELF);
rLEDS = 0xAA;
//OSTaskSuspend(OS_PRIO_SELF);
OSTimeDly(500);
//OSTimeDlyHMSM(0,0,0,100);
}
}
//----------------------------------
// 数码管显示表(共阳极显示)
char smg_table[16] = {
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E
};
OS_STK SmgTaskStk[OS_TASK_TMR_STK_SIZE];
void SmgTask(void *pdata)
{
int val;
for(;;)
{
val = OSTimeGet(); // 获取tick,并显示
rSMG0 = (int)smg_table[val%10];
rSMG1 = (int)smg_table[(val/10)%10];
rSMG2 = (int)smg_table[(val/100)%10];
rSMG3 = (int)smg_table[(val/1000)%10];
rSMG4 = (int)smg_table[(val/10000)%10];
rSMG5 = (int)smg_table[(val/100000)%10];
OSTimeDly(50);
}
}
//----------------------------------
int main(void)
{
OSInit();
rTIMER_CR = 0x07;
OSTaskCreate(LedTask,0,&LedTaskStk[OS_TASK_TMR_STK_SIZE-1],1);
OSTaskCreate(SmgTask,0,&SmgTaskStk[OS_TASK_TMR_STK_SIZE-1],2);
OSStart();
return 0;
}