📄 main11.c
字号:
Print("\n");
mboxSend(mail, 101, 106, str[1], &err);
Print(" 发送成功!\n");
Print(" 请按任意键唤醒Task4运行。\n\n");
while(!RevByte())
;
osWakeUp(104);
osSleep();
Print(" Task3重新运行,开始撤销邮箱。\n");
Print(" ");
print_dot(6);
Print("\n");
mboxDel(mail);
Print(" 撤销邮箱成功,本测试结束!\n\n");
}
}
static void Task4(void) {
uword_t err;
static char_t str[2][64];
while(1) {
osSleep();
Print(" Task4开始运行。\n");
Print(" 请从键盘输入数据(Task4将此数据发送给Task7):");
getString(str[0]);
Print(" 您输入的数据为:");
Print("%s\n", str[0]);
Print(" 开始发送数据。\n");
Print(" ");
print_dot(6);
mboxSend(mail, 102, 107, str[0], &err);
Print(" 发送成功!\n");
Print(" 请按任意键继续输入。\n\n");
while(!RevByte())
;
Print(" 请从键盘输入数据(Task4将此数据发送给Task8):");
getString(str[1]);
Print(" 您输入的数据为:");
Print("%s\n", str[1]);
Print(" 开始发送数据。\n");
Print(" ");
print_dot(6);
mboxSend(mail, 103, 108, str[1], &err);
Print(" 发送成功!\n");
Print(" 请按任意键唤醒Task5,Task6,Task7,Task8接收数据。\n\n");
while(!RevByte())
;
osWakeUp(105);
osWakeUp(106);
osWakeUp(107);
osWakeUp(108);
}
}
static void Task5(void) {
char_t *str;
uword_t err;
while(1) {
osSleep();
Print(" Task5开始运行\n");
Print(" 请按任意键开始从邮箱中取出属于自己的数据。\n");
while(!RevByte())
;
Print(" ");
print_dot(6);
Print("\n");
if((str = (char_t*)mboxRev(mail, 100, 103, &err)) == NULL) {
Print(" 取数据失败!");
while(1)
;
}
Print(" 取数据成功!\n");
Print(" 打印数据:");
Print("%s\n", str);
Print(" 打印数据完毕,请按任意键继续...\n\n");
while(!RevByte())
;
}
}
static void Task6(void) {
char_t *str;
uword_t err;
while(1) {
osSleep();
Print(" Task6开始运行。\n");
Print(" 请按任意键开始从邮箱中取出属于自己的数据。\n");
while(!RevByte())
;
Print(" ");
print_dot(6);
Print("\n");
if((str = (char_t*)mboxRev(mail, 101, 103, &err)) == NULL) {
Print(" 取数据失败!");
while(1)
;
}
Print(" 取数据成功!\n");
Print(" 打印数据:");
Print("%s\n", str);
Print(" 打印数据完毕,请按任意键继续...\n\n");
while(!RevByte())
;
}
}
static void Task7(void) {
char_t *str;
uword_t err;
while(1) {
osSleep();
Print(" Task7开始运行\n");
Print(" 请按任意键开始从邮箱中取出属于自己的数据。\n");
while(!RevByte())
;
Print(" ");
print_dot(6);
if((str = (char_t*)mboxRev(mail, 102, 104, &err)) == NULL) {
Print(" 取数据失败");
while(1)
;
}
Print(" 取数据成功!\n");
Print(" 打印数据:");
Print("%s\n", str);
Print(" 打印数据完毕,请按任意键继续...\n\n");
while(!RevByte())
;
}
}
static void Task8(void) {
char_t *str;
uword_t err;
while(1) {
osSleep();
Print(" Task8开始运行。\n");
Print(" 请按任意键开始从邮箱中取出属于自己的数据。\n");
while(!RevByte())
;
Print(" ");
print_dot(6);
if((str = (char_t*)mboxRev(mail, 103, 104, &err)) == NULL) {
Print(" 取数据失败");
while(1)
;
}
Print(" 取数据成功!\n");
Print(" 打印数据:");
Print("%s\n", str);
Print(" 打印数据完毕,请按任意键唤醒Task3撤销该管道。\n\n");
while(!RevByte())
;
osWakeUp(103);
}
}
static void Task9(void) {
char_t *str, *p;
uword_t err;
while(1) {
osSleep();
Print(" 您选择了共享内存功能测试。\n");
Print(" 该功能测试原理如下:\n");
Print(" Task9将创建一个内存缓冲区,并从键盘接收数据,然后将数据放到此缓冲区,并通\n");
Print(" 知Task10来取数据,Task10取出数据显示,最后通知Task9撤销缓冲区。\n");
Print(" 请按任意键继续...\n\n\n");
while(!RevByte())
;
Print(" Task9 开始创建共享缓冲区。\n");
Print(" ");
print_dot(6);
Print("\n");
if(((pbuf = bufInit(64)) == NULL) || ((str = (char_t*)kmalloc(64)) ==
NULL)) {
Print("No Free Memory!\n");
while(1)
;
//死机
}
p = str;
Print(" 缓冲区创建成功\n");
Print(" 请从键盘输入数据:");
getString(str);
Print(" 您输入的数据为:");
Print("%s\n", str);
Print(" 请按任意键将数据发送给Task10,并唤醒Task10接受数据:\n");
while(!RevByte())
;
Print(" ");
print_dot(6);
Print("\n");
bufSendStr(pbuf, str, &err);
if(err == BUF_OK) {
Print(" 数据发送成功,现在唤醒Task10接受数据。\n\n\n");
osWakeUp(110);
} else {
Print(" 数据发送失败!\n");
}
osSleep();
Print(" Task9重新运行,开始撤销共享缓冲区。\n");
Print(" ");
print_dot(6);
Print("\n");
kfree(p);
bufDel(pbuf);
Print(" 撤销共享缓冲区成功,本测试结束!\n\n");
}
}
static void Task10(void) {
uword_t err;
char_t *str, *p;
while(1) {
osSleep();
if((str = (char_t*)kmalloc(64)) == NULL) {
Print("No Free Memory!\n");
while(1)
;
}
p = str;
Print(" Task10开始运行,准备从共享缓冲区中取出Task9发送的数据。\n");
Print(" ");
print_dot(6);
Print("\n");
bufRevStr(pbuf, str, &err);
if(err == BUF_OK) {
Print(" 取数完毕,所取数据为:");
Print("%s\n", p);
kfree(p);
Print(" 请按任意键通知Task9撤销该管道。\n\n\n");
while(!RevByte())
;
osWakeUp(109);
} else {
Print(" 取数据失败!\n");
}
}
}
static void Task11(void) {
while(1) {
osSleep();
Print(" pipe: ");
Print("\t管道功能演示\n");
Print(" mbox: ");
Print("\t邮箱功能演示\n");
Print(" shm: ");
Print("\t共享内存演示\n");
Print(" clr: ");
Print("\t清除屏幕\n");
Print(" logo: ");
Print("\t打印起始屏幕\n");
Print(" mem: ");
Print("\t\t打印内存信息\n");
Print(" show: ");
Print("\t显示所有的命令\n");
Print(" task: ");
Print("\t查看全部任务\n");
Print(" light: ");
Print("\t跑马灯演示\n");
Print(" key: ");
Print("\t按键演示\n");
Print(" time: ");
Print("\t显示时间\n");
}
}
static void Task12(void) {
word_t data;
while(1) {
osSleep();
Print(" 您选择了按键程序。\n");
Print(" 请按任意键结束!\n");
while(1) {
data = rPDATG;
delay(15);
data >>= 4;
switch(data) {
case 0xE:
Print(" 键1被按下!\n");
break;
case 0xD:
Print(" 键2被按下!\n");
break;
case 0xB:
Print(" 键3被按下!\n");
break;
case 0x7:
Print(" 键4被按下!\n");
break;
default:
break;
}
if(RevByte()) {
Print(" 本测试结束!\n\n");
break;
}
}
}
}
static void print_mem_info(void) {
uword_t used_count = 0;
uword_t free_count = 0;
page_t *pmem = kgetmemlist();
Print("\t\t\t内存信息如下\n");
Print("\t实际物理内存大小:");
Print("\t%d Byte\n", MEM_SIZE);
while(pmem != NULL) {
if(pmem->status == MEM_FREE) {
free_count += pmem->size;
} else if(pmem->status == MEM_ALLOC) {
used_count += pmem->size;
}
pmem = pmem->mem_down;
}
Print("\t已用空间:\t");
Print("\t%d Byte\n", used_count);
Print("\t空闲空间:\t");
Print("\t%d Byte\n", free_count);
}
static void print_task_info(void) {
tcb_t *ptcb;
list_t *list, *plist;
char_t *pstr;
pstr = (char_t*)kmalloc(32);
Print("任务ID\t优先级\t 状态\t时间片\t运行时间 等待时间\n");
list = osGetTaskHead();
plist = list->next;
do {
ptcb = mac_find_entry(plist, tcb_t, task_link);
switch(ptcb->status) {
case T_READY:
pstr = "就绪";
break;
case T_BLOCK:
pstr = "阻塞";
break;
case T_SLEEP:
pstr = "休眠";
break;
case T_DELAY:
pstr = "延时";
break;
default:
break;
}
Print(" %d\t %d\t %s\t %d\t %d\t %d\n", ptcb->id, ptcb
->prio, pstr, ptcb->slice_time, ptcb->exe_time, ptcb
->delay_time);
plist = plist->next;
} while(plist != list->next);
kfree(pstr)
;
}
static void shell(void) {
uword_t i;
char_t *str, *p;
while(1) {
Print(":)");
if((str = (char_t*)kmalloc(32)) == NULL) {
Print("No Free Memory!\n");
while(1)
;
//死机
}
kmemset(str, 0, 32);
p = str;
getString(str);
for(i = 0; i < CMD_MAX; i++) {
if((strcmp(str, cmd[i])) == 0) {
switch(i) {
case 0:
osWakeUp(101);
break;
case 1:
osWakeUp(103);
break;
case 2:
osWakeUp(109);
break;
case 3:
clear();
break;
case 4:
print_logo();
break;
case 5:
print_mem_info();
break;
case 6:
osWakeUp(111);
break;
case 7:
print_task_info();
break;
case 8:
osWakeUp(100);
break;
case 9:
osWakeUp(112);
break;
case 10:
display_time();
default:
break;
}
break;
}
}
if(i >= CMD_MAX && *str != 0) {
Print(" 您输入的命令不存在,请使用show命令查看可用命令!\n")
;
}
kfree(p);
}
}
void Main(void) {
init_hardware();
osInitTask(Task0, 100, 1, 25, STACK_SIZE);
osInitTask(Task1, 101, 2, 15, STACK_SIZE);
osInitTask(Task2, 102, 3, 10, STACK_SIZE);
osInitTask(Task3, 103, 4, 18, STACK_SIZE);
osInitTask(Task4, 104, 5, 23, STACK_SIZE);
osInitTask(Task5, 105, 6, 22, STACK_SIZE);
osInitTask(Task6, 106, 7, 11, STACK_SIZE);
osInitTask(Task7, 107, 8, 13, STACK_SIZE);
osInitTask(Task8, 108, 9, 24, STACK_SIZE);
osInitTask(Task9, 109, 10, 21, STACK_SIZE);
osInitTask(Task10, 110, 11, 32, STACK_SIZE);
osInitTask(Task11, 111, 12, 11, STACK_SIZE);
osInitTask(Task12, 112, 13, 26, STACK_SIZE);
osInitTask(shell, 1000, 50, 17, STACK_SIZE);
print_logo();
uartClear();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -