1、嵌入式测控系统实习报告 嵌入式测控系统实习报告课题名称: 嵌入式测控系统 学 院: 电气信息工程学院 专 业: 测控技术与仪器专业 姓 名: 王yiyang 班 级: 测控093 学 号: 220号 指导教师: 武海ya 1、实习目的1)学习建立多任务系统2)熟练程序设计3)熟练运用borlandcc操作系统4)熟练运用visal c + 操作系统2、实习内容建立4个任务,其中任务1显示院系,任务2显示班级学号,任务3显示姓名,任务4显示当前日期和时间。3、程序设计#include #include #include #include #include #include #include #i
2、nclude E:ucos-iisoftwareucos-iiix86lbc45os_cpu.h#include E:ucos-iiSOFTWAREuCOS-IIEX1_x86LBC45SOURCEos_cfg.h#include E:ucos-iisoftwareucos-iisourceucos_ii.h#include E:ucos-iisoftwareblockspcbc45pc.h/* CONSTANTS*/#define TASK_STK_SIZE 512 /* Size of each tasks stacks (# of WORDs) */#define N_TASKS 4 /
3、* Number of identical tasks */* VARIABLES*/OS_STK TaskStkN_TASKSTASK_STK_SIZE; /* Tasks stacks */OS_STK TaskStartStkTASK_STK_SIZE;char TaskDataN_TASKS; /* Parameters to pass to each task */OS_EVENT *RandomSem;/* FUNCTION PROTOTYPES*/ void Task(void *data); /* Function prototypes of tasks */ void Tas
4、kStart(void *data); /* Function prototypes of Startup task */static void TaskStartCreateTasks(void);static void TaskStartDispInit(void);static void TaskStartDisp(void);/*$PAGE*/* MAIN*/void main (void) PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* Clear the screen */ OSInit(); /* Initialize u
5、C/OS-II */ PC_DOSSaveReturn(); /* Save environment to return to DOS */ PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-IIs context switch vector */ /* RandomSem = OSSemCreate(1); */ /* Random number semaphore */ OSTaskCreate(TaskStart, (void *)0, &TaskStartStkTASK_STK_SIZE - 1, 0); OSStart(); /* Start m
6、ultitasking */* STARTUP TASK*/void TaskStart (void *pdata)/#if OS_CRITICAL_METHOD = 3 /* Allocate storage for CPU status register */ /OS_CPU_SR cpu_sr;/#endif /char s100; /INT16S key; /pdata = pdata; /* Prevent compiler warning */ /TaskStartDispInit(); /* Initialize the display */ /OS_ENTER_CRITICAL
7、(); /PC_VectSet(0x08, OSTickISR); /* Install uC/OS-IIs clock tick ISR */ /PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */ /OS_EXIT_CRITICAL(); /OSStatInit(); /* Initialize uC/OS-IIs statistics */ /TaskStartCreateTasks(); /* Create all the application tasks */ /for (;) / /TaskStartDisp();
8、 /* Update the display */ /if (PC_GetKey(&key) = TRUE) / /* See if key has been pressed */ /if (key = 0x1B) / /* Yes, see if its the ESCAPE key */ /PC_DOSReturn(); /* Return to DOS */ / / /OSCtxSwCtr = 0; /* Clear context switch counter */ /OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second */ /*$PAGE*/*
9、 INITIALIZE THE DISPLAY*/static void TaskStartDispInit (void) /* 1111111111222222222233333333334444444444555555555566666666667777777777 */* 01234567890123456789012345678901234567890123456789012345678901234567890123456789 */ PC_DispStr( 0, 0, uC/OS-II, The Real-Time Kernel , DISP_FGND_WHITE + DISP_BG
10、ND_RED + DISP_BLINK); PC_DispStr( 0, 1, Jean J. Labrosse , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr(0 2 , , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 3, EXAMPLE #1 , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr(0, 4, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispS
11、tr(0, 5, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr(0, 6, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr(0, 7, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr(0, 8, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr(0, 9, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispS
12、tr(0, 10, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr(0, 11, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr(0, 12, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr(0, 13, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr(0, 14, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_
13、DispStr(0, 15, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr(0, 16, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr(0, 17, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr(0, 18, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr(0, 19, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY)
14、; PC_DispStr(0, 20, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr(0, 21, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 22, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);/* 1111111111222222222233333333334444444444555555555566666666667777777777 */* 012345678901234567890123
15、45678901234567890123456789012345678901234567890123456789 */*$PAGE*/* UPDATE THE DISPLAY*/* static void TaskStartDisp (void) char s80; /sprintf(s, %5d, OSTaskCtr); /* Display #tasks running */ /PC_DispStr(18, 22, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);/#if OS_TASK_STAT_EN 0 /sprintf(s, %3d, OSCPUUsage
16、); /* Display CPU usage in % */ / PC_DispStr(36, 22, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);/#endif /sprintf(s, %5d, OSCtxSwCtr); /* Display #context switches per second */ /PC_DispStr(18, 23, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); /sprintf(s, V%1d.%02d, OSVersion() / 100, OSVersion() % 100); /* Disp
17、lay uC/OS-IIs version number */ /PC_DispStr(75, 24, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); /switch (_8087) /* Display whether FPU present */ / case 0: / PC_DispStr(71, 22, NO FPU , DISP_FGND_YELLOW + DISP_BGND_BLUE); / break; / case 1: / PC_DispStr(71, 22, 8087 FPU, DISP_FGND_YELLOW + DISP_BGND_BLUE
18、); / break; / case 2: /PC_DispStr(71, 22, 80287 FPU, DISP_FGND_YELLOW + DISP_BGND_BLUE); / break; / case 3: / PC_DispStr(71, 22, 80387 FPU, DISP_FGND_YELLOW + DISP_BGND_BLUE); / break; / /*$PAGE*/* CREATE TASKS*/static void TaskStartCreateTasks (void) INT8U err; OSInit(); OSTaskCreate(Task, (void *)
19、0, &Task1TASK_STK_SIZE-1,1); OSTaskCreate(Task, (void *)0, &Task2TASK_STK_SIZE-1,2); OSTaskCreate(Task, (void *)0, &Task3TASK_STK_SIZE-1,3); OSTsakCreate(Task, (void *)0, &Task4TASK_STK_SIZE-1,4); /* TASKS*/void Task (void *pdata) INT8U x; INT8U y; INT8U err; for (;) OSSemPend(RandomSem, 0, &err); /
20、* Acquire semaphore to perform random numbers */ x = random(80); /* Find X position where task number will appear */ y = random(16); /* Find Y position where task number will appear */ /OSSemPost(RandomSem); /* Release semaphore */ /* Display the task number on the screen */ PC_DispChar(x, y + 5, *(
21、char *)pdata, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 5, dianqixinxigongchengxueyuan cekongjishuyuyiqi , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 6, 09_2 14 , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 7, maqingying , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY
22、); PC_DispStr( 0, 8, 2012-10-22 , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); OSTimeDly(1); /* Delay 1 clock tick */ 4、调试过程1、修改TSET.MAK的地址2、修改borlandc地址3、修改TEST的地址4、找到头文件地址5、 运行程序实习心得短暂的实习生活很快的结束了,短短的五天时间学到了不少东西,现在已经大四了,还有半年时间就要毕业了,所以格外珍惜这次机会。我已经决定考研了,所以时间比较紧张,但是我仍抽出时间学习嵌入式的一些基本原理。因为时间都是挤出来的,我不能因为考研而不参
23、加任何实习,毕竟实习的机会已经不多了,学一点是一点。虽然时间紧迫,但是在同学们的指导下,我还是学到了很多东西。书上看不懂的知识通过程序的验证,让我一目了然,印象深刻。刚开始接触的时候,比较不知所措,编译的时候出现了很多错误,让我不知从何做起。而且整个编译运行的过程比较复杂,总是出现失误,经过反复多次的练习,慢慢的熟悉了整个流程,做起来也比较顺手了,在后期大家的共同努力下,只有一个错误。大家非常的高兴,因为离成功不远了。最后在老师的指点下,我们及时的完成了任务,学习和掌握了很多难理解的知识。时间越紧张,我学的越努力,虽然很疲惫,但苦中有乐。实习过程中仍有很多知识点不明白。比如说在总任务下建立的四个小任务,在系统执行的过程中它是否依次返回主函数,然后再顺次执行。与C语言主函数的功能是否一致?在考核的最后一天我向老师请教了这个问题,老师给与了非常耐心细致的回答,解决了一直困扰我的小难题,在此表示非常的感谢!有机会一定要深入学习嵌入式,因为在很多专业书中都出现了相关的内容,可以看出它的价值是多么的重要。最后,祝老师工作顺利,健康如意!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1