在μC/OS-II平台上设计程序并调试实现如下目的:
该程序包含TaskStart、Task1 两个任务,其中任务TaskStart 不断地挂起自己,再被任务Task1 解挂,两个任务不断地切换执行。整个应用的运行流程具体描述如下: (1)系统经历一系列的初始化过程后,调用main()函数,其中调用OSInit()函数对uC/OS-II 内核进行初始化,调用OSTaskCreate 创建起始任务TaskStart(优先等级为4); (2)main()函数调用函数OSStart()启动uC/OS-II 内核的运行,开始多任务的调度,执行当前优先级最高的就绪任务TaskStart;
(3)TaskStart 首先安装时钟中断并初始化时钟,然后创建1 个应用任务Task1(优先等级为6,延时1秒执行);
(4)TaskStart 开始执行(给出系统提示,表明TaskStart正在执行,与之相对应的Task1正被阻塞),在给出一系列提示之后,挂起自己;
(5)TaskStart挂起后,系统调度处于就绪状态的优先级最高任务Task1 执行(给出系统提示表明Task1开始执行),它在5秒后自动唤醒TaskStart,后者由于优先级较高而抢占CPU(给出系统提示,表明TaskStart开始执行);
(6)TaskStart给出前述(3)中的一系列提示后又挂起自己,内核调度Task1 执行(给出系统提示表明Task1开始执行);
(7)Task1 运行5秒后再度自动唤醒TaskStart; ( 以上(4)~(7)过程重复)……
编程提示:对于任务切换和时间间隔皆应给出明确提示。
#include \"includes.h\"
/******************************************* 定义部分 ************************************************/ #define TASK_STK_SIZE 512 // Size of each task's stacks (# of WORDs) #define N_TASKS 2 // Number of identical tasks #define TASK_START_ID 0 // Application tasks IDs #define TASK_START_PRIO 10 // Application tasks priorities #define TASK_1_PRIO 12 #define TASK_2_PRIO 13
OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; // Tasks stacks OS_STK TaskStartStk[TASK_STK_SIZE]; // TaskStart task stack INT8U TaskData[N_TASKS]; // Parameters to pass to each task
INT32U count=0; // Initialize count
/******************************************* 声明部分 ************************************************/ static void Task0(void *pdata); // Function prototypes of tasks static void Task1(void *pdata); static void TaskStart(void *pdata); // Function prototypes of Startup task static void TaskStartCreateTasks(void); // Function prototypes of creat task
/******************************************* 实现部分 ************************************************/ /**
* @brief * main()函数,应用程序入口函数。 * @param[in] 无。 * @return 操作成功返回0;\\n * 出现问题返回1; */
int main (void) { INT8U err=err; UCOS_CPU_INIT(); // Install uC/OS-II's running hardware environment OSInit(); // Initialize uC/OS-II OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 4); OSStart(); // Start multitasking return 0; } /**
* @brief * TaskStart()函数,启动任务。 * @param[in] void *。 * @return 无\\n */
void TaskStart(void *pdata)
{
#if OS_CRITICAL_METHOD == 3 // Allocate storage for CPU status register OS_CPU_SR cpu_sr; cpu_sr = cpu_sr; // Avoid warnings #endif pdata = pdata; // Prevent compiler warning UCOS_TIMER_START(); // Timer interrupter start TaskStartCreateTasks(); // Create all the application tasks for(;;) { printf(\"Application tasks switched %d times!\\n\\r\ printf(\"TASK_Start IS RUNNING..............................................................\\n\\r\"); printf(\"task_1 is suspended!\\n\\r\"); printf(\"*******************************************************************************\\n\\r\"); OSTaskSuspend(OS_PRIO_SELF); // Suspend the TaskStart } } /**
* @brief
* TaskStartCreateTasks()函数,创建多任务。 * @param[in] void *。 * @return 无 */
void TaskStartCreateTasks (void) { INT8U i; for (i = 0; i < N_TASKS; i++) // Create tasks { TaskData[i] = i; } OSTaskCreate(Task1, (void *)&TaskData[1], &TaskStk[1][TASK_STK_SIZE - 1], 6); } /**
* @brief * Task1()函数,执行一个任务。
* @param[in] void *。 * @return 无 */
void Task1 (void *pdata) { INT8U i; INT8U err;
i=*(int *)pdata; for (;;) {
OSTimeDlyHMSM(0,0,1,0); //这个是延时1S的函数,但是结果却不是1S,反正函数用的就是这个 printf(\"Application tasks switched %d times!\\n\\r\ printf(\"task_Start is suspended!\\n\\r\"); printf(\"TASK_1 IS RUNNING..............................................................\\n\\r\"); printf(\"*******************************************************************************\\n\\r\"); OSTimeDlyHMSM(0,0,5,0); err=OSTaskResume(4); /* resume task0 */ } }
《EOS》实验考查题目21
在Linux下用Shell程序编写实现如下功能:从键盘上输入年份和月份,显示当月月历(公历或农历皆行)。
执行过程:执行该脚本后,打印一行提示,要求用户输入年份和月份,然后打印出对应处理结果,然后再次要求用户输入新的年份和月份、并打印,直到用户输入\"end\"停止。
#!/bin/bash while
read -p \"请输入年:\" y; read -p \"请输入月: \" m; cal $m $y do
read -p \"continue:\" s; if [ $s = \"end\" ] then
break fi done
《EOS》实验考查题目22
在Linux下用Shell程序编写实现如下功能:从键盘输入的学生成绩,实时判断并显示其对应的成绩等级,例如60分以下为“Failed!”,60-70分为“Passed!”,70-80分为“Medium!”,80-90分为“Good!”,90-100为“Excellent!”。当输入结束时,一次性显示出本次输入成绩的样本个数、最佳分数、最差分数以及对应等级的人数。
#!/bin/bash count=0 f=0 p=0 m=0 g=0 e=0 max=0 min=101 while
read -p \"Please input the point:\" n do
if [ $n = \"end\" ] then break fi
if [ $n -ge \"0\" -a $n -le \"100\" ] then
case $n in
[0-9]|[1-5][0-9]) echo \"Failed!\" f=$(($f+1));;
6[0-9]) echo \"Passed!\" p=$(($p+1));;
7[0-9]) echo \"Medium!\" m=$(($m+1));;
8[0-9]) echo \"Good!\" g=$(($g+1));;
9[0-9]|100) echo \"Excellent!\" e=$(($e+1));; esac
count=$(($count+1)) if [ $n -lt $min ]
then min=$n fi
if [ $n -gt $max ] then max=$n fi else
echo \"Wrong input!\" fi done
echo \"count is :$count\" echo \"best score is :$max\" echo \"worst score is :$min\"
echo \"the failed student count is:$f\" echo \"the passed student count is:$p\" echo \"the medium student count is:$m\" echo \"the good student count is:$g\" echo \"the excellent student count is:$e\"
《EOS》实验考查题目23
在Linux下用Shell程序编写实现如下功能:从键盘输入某年,判断并显示这这一年是否为闰年。然后再次要求用户输入新的年份、并打印,直到用户输入\"end\"停止。 #! /bin/bash while
read -p \"Please Input year : \" y; do
r4=`expr $y % 4` r100=`expr $y % 100` r400=`expr $y % 400` if [ $y = 'end' ] then break
else if [ $r4 -eq 0 -a $r100 -ne 0 ] then
echo -n \" $y 是闰年\"\"\\n\" else if [ $r400 -eq 0 ]
then
echo -n \" $y 是闰年\"\"\\n\" else
echo -n \" $y 不是闰年\"\"\\n\" fi fi fi done
《EOS》实验考查题目24
在Linux下用Shell程序编写实现如下功能:从键盘输入数字n,打印输出n*n乘法表(如输入n = 9,则输出9*9乘法表)。 源文件代码如下:
#!/bin/bash
read -p \"please input a number to print\" n for (( i=1; i<=$n; i++ )) do
for (( j=1; j<=i; j++ )) do
printf '%dx%d=%-5d' $i $j $(($i*$j)) done echo done #end
#!/bin/bash i=1
read -p \"please input a number:\" n while [ $i -le $n ] do j=1
while [ $j -le $i ] do
if [ $j -lt $i ]
then
k=` expr $i \\* $j ` echo -n \"$i*$j=$k\" \" \" fi
if [ $j -eq $i ] then
k=` expr $i \\* $j ` echo \"$i*$j=$k\" fi
j=` expr $j + 1 ` done
i=` expr $i + 1 ` done
《EOS》实验考查题目25
在Linux下用Shell程序编写实现如下功能:从键盘输入数字n,循环打印n编 “I love EOS.”
“EOS stands for ***.” (其中,***部分按真实含义自行填充完整) “After hard-working, now I’m better than before!”
然后询问用户是否继续,如继续则要求重新输入n,并重复前述循环打印过程。 #! /bin/bash while
echo -n \"Please Input number : \" read s j=1
while [ $j -le $s ] do
echo \"I love EOS\" echo \"EOS stands for sb.\"
echo \"After hard-working,now I'm better than before!\"
j=` expr $j + 1 ` done do
read -p \"continue:'yes' or 'no':\" x; if [ $x = \"no\" ] then break fi Done
《EOS》实验考查题目26
在Linux下用Shell程序编写实现如下功能:从键盘输入数字n(n≤100),分别打印输出n以内奇数的和。然后询问用户是否继续,如选择继续则重复前述运算过程并输出。如不再继续,则退出。
#! /bin/bash while
echo -n \"Please Input number : \" read s sum=0 j=1
while [ $j -le $s ] do
sum=` expr $sum + $j` j=` expr $j + 2 ` done
echo \"Sum = $sum\" do
read -p \"continue:'yes' or 'no':\" x; if [ $x = \"no\" ] then
break fi done
《EOS》实验考查题目31
在Linux下用命令行方式实现如下功能: (1) 增加普通用户ieos;
# useradd ieos
(2) 设置用户密码eos;
# passwd ieos
(3) 登录新建用户;
# su ieos
(4) 查看当前有哪些用户在使用;
# w who users
(5) 退出当前用户。
# exit
《EOS》实验考查题目32
在Linux下用命令行方式实现如下功能: (1) 查看当前目录所在路径;
pwd
(2) 利用ls查看当前路径下的所有文件和子目录;
Ls -la
(3) 查找并进入../home/unsp目录下;
Find/home/unsp Cd/home/unsp
(4) 新建子目录ieos;
Mkdir ieos
(5) 将桌面上的文件(如Qt Creator.desktop)拷贝至你的新建子目录中(如桌面没有
文件,则先新建一个文件再实施前述拷贝操作)。
《EOS》实验考查题目33
在Linux下用命令行方式实现如下功能: (1) 确认当前路径;
pwd
(2) 进入../home/unsp目录下新建子目录(目录名为考生姓名);
Cd /home/unsp
(3) 新建文件file1.txt(内容为hello),file2.txt(内容为swpu);
法一:Echo hello >file1.txt 法二:Cat >file2.txt
Swpu Ctrlr+z
(4) 将file1重名为file3;
Mv file1.txt file3.txt
(5) 删除file2。
Rm file2.txt
《EOS》实验考查题目34
在Linux下用命令行方式实现如下功能: (1) 在命令行终端中显示当前进程ID;
Echo $$
(2) 创建一个子shell,并在shell命令行下显示当前子shell的进程ID;
bash echo $$
(3) 查看当前系统中运行的进程有哪些;
top
(4) 将shell进程杀死;
Kill -9 19387
(5) 再次查看当前系统中运行的进程有哪些。
Ps Top
《EOS》实验考查题目35
在Linux下用命令行方式实现如下功能:
(1) 进入../home/unsp目录下新建子目录(目录名为考生姓名);
Cd /home/unsp Mkdir zhangao
(2) 利用cat新建文件file1.txt(内容为good),file2.txt(内容为morning),file3.txt
(内容为swpu); Cat >file1.txt Good Ctrl +z 其它同理
(3) 利用cat合并file1.txt、file2.txt、file3.txt到file4.txt;
Cat file1.txt flie2.txt file3.txt >file4.txt
(4) 利用sort将file4.txt的内容逆序排列并输出到b.txt;
Sort –r file4.txt>b.txt
(5) 再次利用cat查看b.txt内容,是否与预期相符合。
Cat b.txt (也可用 more b.txt)
《EOS》实验考查题目36
在Linux下用命令行方式实现如下功能: (1) 执行命令wc;
wc
(2) 挂起进程wc;
Ctrl+z
(3) 查看当前系统中的作业;
Jobs
(4) 把wc切换到后台执行;
Bg wc
(5) 杀死wc进程。
Kill -9 19630
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo7.cn 版权所有 湘ICP备2022005869号-9
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务