?? main.c
字號:
/*
**ucosII for simuCPU,you can only free use it for personal study purpose!
**www.MShowTec.com for more information.
**lmjx,Email:limiao@yeah.com,All Right Reserved.
**/
#define MAIN_GLOBALS
#include "includes.h"
#include <stdio.h>
#include <stdarg.h>
#define ASIC_BASE 0x02000000
//SYSTEM MANAGER REGISTERS
#define ARM7_SYSCFG (ASIC_BASE+0x00)
#define ARM7_MEMMAP (ASIC_BASE+0x04)
// INT controller registers
#define ARM7_INTMODE (ASIC_BASE+0x40)
#define ARM7_INTPEND (ASIC_BASE+0x44)
#define ARM7_INTMASK (ASIC_BASE+0x48)
#define ARM7_INTOFFSET (ASIC_BASE+0x4c)
// Timer Registers
#define ARM7_TMOD (ASIC_BASE+0x80)
#define ARM7_TDATA (ASIC_BASE+0x84)
#define ARM7_TRELOAD (ASIC_BASE+0x88)
#define ARM7_TCNT (ASIC_BASE+0x8c)
// UART Registers
#define ARM7_UCON (ASIC_BASE+0xc0)
#define ARM7_USTAT (ASIC_BASE+0xc4)
#define ARM7_UTXBUF (ASIC_BASE+0xc8)
#define ARM7_URXBUF (ASIC_BASE+0xcc)
OS_STK TaskStartStk1[256];
OS_STK TaskStartStk2[256];
OS_STK TaskStartStk3[256];
OS_STK TaskStartStkCli[1024];
OS_EVENT *ioSem;
char ioStrBuf[128],iobuf[128],iocnt=0;
void printk(const char *fmt,...);
int in(char*p)
{
unsigned char err,i=0;
OSSemPend(ioSem,0,&err);
while(ioStrBuf[i]){
*p++ = ioStrBuf[i++];
}
*p = 0;
return i;
}
int out(char*buf)
{
int i = 0;
while(buf[i]!= 0){
*(unsigned long*)(ARM7_UTXBUF) = buf[i++];
}
return i;
}
void printk(const char *fmt,...)
{
char buf[1024];
va_list argptr;
va_start(argptr, fmt);
vsprintf(buf,fmt, argptr);
va_end(argptr);
out(buf);
}
void int_ext0()
{
*(unsigned long*)ARM7_INTPEND &= ~0x01;
out("ext0\r\n");
}
void int_ext1()
{
*(unsigned long*)ARM7_INTPEND &= ~0x02;
out("ext1\r\n");
}
void int_uarutTX()
{
*(unsigned long*)ARM7_INTPEND &= ~0x04;
out("uarutTX\r\n");
}
void int_uarutRX()
{
char c,i;
*(unsigned long*)ARM7_INTPEND &= ~0x08;
c = (char)(*(unsigned long*)ARM7_URXBUF);
if(c == 13){
iobuf[iocnt] = 0;
for(i=0;i<=iocnt;i++){
ioStrBuf[i] = iobuf[i];
}
iocnt = 0;
*(unsigned long*)ARM7_UTXBUF=(13);
*(unsigned long*)ARM7_UTXBUF=(10);
OSSemPost(ioSem);
return;
}
iobuf[iocnt++] = c;
*(unsigned long*)ARM7_UTXBUF=(c);
}
void int_timer()
{
*(unsigned long*)ARM7_INTPEND &= ~0x10;
OSTimeTick();
}
void(* const InterruptRoutTableIRQ[])(void) = {
int_ext0,
int_ext1,
int_uarutTX,
int_uarutRX,
int_timer,
};
void InterruptHandler_IRQ()
{
InterruptRoutTableIRQ [(*(unsigned long*)ARM7_INTOFFSET)]();
}
void InitTimerUARUT(void)
{
*(unsigned long*)ARM7_INTMASK = 0;
*(unsigned long*)ARM7_TDATA = 10; /* 100ms */
*(unsigned long*)ARM7_TRELOAD = 10;
*(unsigned long*)ARM7_TCNT = 0;
*(unsigned long*)ARM7_TMOD = 3;
*(unsigned long*)ARM7_UCON = 1;
}
void TaskStart1(void *yydata)
{
//u16 a=0;
yydata = yydata;
//memset(tmp,'a',200);
printk("* %s V%d.%d *\r\n","uCOS-II",OSVersion()/100,OSVersion()%100);
out("Task 1 suspend itself\r\n");
OSTaskSuspend(OS_PRIO_SELF);
while(1)
{
//OSTimeDly(2*OS_TICKS_PER_SEC);
}
}
void TaskStart2(void *yydata)
{
//u16 a=0;
yydata = yydata;
out("Task 2 suspend itself\r\n");
OSTaskSuspend(OS_PRIO_SELF);
while(1)
{
//OSTimeDly(1*OS_TICKS_PER_SEC);
}
}
void TaskStart3(void *yydata)
{
//u32 a=0;
yydata = yydata;
out("Task 3 suspend itself\r\n");
OSTaskSuspend(OS_PRIO_SELF);
while(1)
{
//OSTimeDly(2*OS_TICKS_PER_SEC);
}
}
void TaskStartCli(void *yydata)
{
//u32 a=0;
extern void CliMain(void);
yydata = yydata;
out("cli task running!!\r\n");
ioSem = OSSemCreate(0);
CliMain();
}
int main(void)
{
OSInit();
OSTaskCreate(TaskStart1, NULL, &TaskStartStk1[255],2);
OSTaskCreate(TaskStart2, NULL, &TaskStartStk2[255],3);
OSTaskCreate(TaskStart3, NULL, &TaskStartStk3[255],4);
OSTaskCreate(TaskStartCli, NULL, &TaskStartStkCli[1023],5);
InitTimerUARUT();
OSStart();
return 1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -