|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
最近一直都在学习有关ios(苹果系统)的知识,而学习ios的最好方法就是研究iPhone和ipad。因为iPhone和iPad的应用程序都是用Objective-C语言来开发的,所以在接触ios之前,我必须有一定的Objective-C基础。关于vxworks的测试题很少,这里保举一篇满不错的。
一.闭卷测验(1小时30分钟)
(一)填空
1.假定tornado安装在c: ornado,那末假如要改一个pentium
方针板bootrom下载VxWorks的体例,叨教该变动_____目次下的_____文件?
2.变动上面的bootline,从TrueFlashFileSystem中下载VxWorks
"fd=0,0(0,0)host:/fd0/vxWorks.sth=90.0.0.3e=90.0.0.50u=target"
改成:____________________________________________
3.利用缺省目次创立一个BSP为ads860的bootable工程testProject,
工程构成文件prjconfig.c在_____目次、syslib.c______目次、
天生的VxWorks在______目次
4.设置Image时,呈现白色的模块组件,原是_________________
5.以voiddemo(intarg1)函数为出口,以10为参数创立一个义务运转,
shell下该键进_______
6.利用工具_______来察看中止向量表
7.调试ISR利用_______调试体例
8.枚举义务间通信的最少4种体例_______、_______、_______、_______
(二)选择
1.假定tornado安装在c: ornado,make.exe估量应当在甚么目次?
a.c: ornadohostx86-win32in
b.c: ornado argetconfig
c.c: ornado argetlib
d.c: ornado argetprojundefault
2.task1与task2都要以读写体例会见一个数组,应当利用甚么semaphore(a.binaryb.mutualc.counting);
task1与task2会见数组的代码应当为:
task1:
(a.semGiveb.semTake)
会见数组
(a.semGiveb.semTake)
task2:
(a.semGiveb.semTake)
会见数组
(a.semGiveb.semTake)
3.程序前后实行了以下代码
msgQId=msgQCreate(numMsg,sizeof(structmsg),MSG_Q_FIFO))
msgQSend(msgQId,(char*)&msg1,sizeof(structmsg),
WAIT_FOREVER,MSG_PRI_NORMAL))
msgQSend(msgQId,(char*)&msg2,sizeof(structmsg),
WAIT_FOREVER,MSG_PRI_URGENT))
msgQSend(msgQId,(char*)&msg3,sizeof(structmsg),
WAIT_FOREVER,MSG_PRI_NORMAL))
则再有义务实行两次
msgQReceive(msgQId,(char*)&consumedItem,
sizeof(consumedItem),WAIT_FOREVER)
失掉的前后是
a.msg1,msg2
b.msg2,msg3
c.msg3,msg2
d.msg2,msg1
e.msg2,msg2
f.msg1,msg3
4.对照messagequeue与pipe
有prioritization办理的是(a.messageb.pipec.message和pipe)
利用尺度I/O接口的是(a.messageb.pipec.message和pipe)
可使用select的是(a.messageb.pipec.message和pipe)
5.exception用甚么机制来处置
a.ISR
b.signal
c.task
d.watchdog
6.以下函数哪些能够在ISR中利用
a.printf
b.logmsg
c.taskSuspend
d.semGive
e.msgQReceive
f.wdStart
7.watchdog事情在甚么体例
a.中止体例
b.义务体例
(三)问答题
1.在shell下要察看一个为”buffer”(为不明白的内容)的字符串内容,该怎样操纵?
2.剖析以下windview输入了局
tPhil1是为何得到把持权,tPhil3是为何得到把持权?
3.一旦在程序中利用了KernelTimeSlice(10);则分歧优先级的义务间的调剂体例为?
不异优先级的义务间的调剂体例为?
4.以voidtest((char*)cp1,intnum)为出口,创立一个优先级为100,仓库为2000,
称号为”test_task”,操纵字为0,参数为pointer1和200的义务,写出完成函数和参数
5.剖析源码
在shell下分离实行->spcountingSemDemo,"c"与->spcountingSemDemo,
"b",剖析二者的运转效果会有甚么分歧,为何?
/*includefiles*/
#include"vxWorks.h"
#include"wdLib.h"
#include"stdio.h"
#include"semLib.h"
#include"taskLib.h"
#include"usrLib.h"
#include"sysLib.h"
/*defines*/
#defineTASK_PRIORITY101
#defineTASK_STACK_SIZE5000
#defineTIME_BETWEEN_INTERRUPTS1/*1tick*/
#defineTASK_WORK_TIME2/*2ticks*/
#defineNUM_OF_GIVES30
/*globals*/
/*countingorbinarysemaphoreID*/
LOCALSEM_IDsemId=NULL;
/*watchdogID*/
LOCALWDOG_IDwdId=NULL;
/*tidofsyncTask*/
LOCALintsyncTaskTid=0;
/*NumberoftimessemGiveiscalled*/
LOCALintnumToGive=NUM_OF_GIVES;
/*forwarddeclaratiuon*/
voidsyncISR(int);/*ISRtounblocksyncTask*/
voidcleanUp();/*cleanuproutine*/
voidsyncTask();/*taskthatneedstobesynchronized
*withexternalevents*/
/******************************************
*countingSemDemo-demonstrates
tasksynchronizationusingcounting
*semaphores.Usercanalsoselectto
usebinarysemaphoreinsteadof
*countingsemaphoreinthisdemonstration,
forcomparisionbetweenthetwo
*semaphores.
*
*RETURNS:OKorERROR
*
*/
STATUScountingSemDemo(
charsemType/*countingsemaphoretype
"c"orbinarysemaphore
*type"b"
*/)
{
switch(semType)
{
case"c":
case"C":
if((semId=semCCreate(SEM_Q_PRIORITY,
0))==NULL)
{
perror("semCCreate");
return(ERROR);
}
break;
case"b":
case"B":
if((semId=semBCreate(SEM_Q_PRIORITY,
SEM_EMPTY))==NULL)
{
perror("semBCreate");
return(ERROR);
}
break;
default:
printf("UnknownsemType--mustbe"c"or"b"");
return(ERROR);
}
if((wdId=wdCreate())==NULL)
{
perror("wdCreate");
cleanUp();
return(ERROR);
}
if((syncTaskTid=taskSpawn("tsyncTask",TASK_PRIORITY,0,
TASK_STACK_SIZE,(FUNCPTR)syncTask,
0,0,0,0,0,0,0,0,0,0))==ERROR)
{
perror("taskSpawn");
cleanUp();
return(ERROR);
}
/*watchdogsimulateshardwareinterrupts*/
if(wdStart(wdId,TIME_BETWEEN_INTERRUPTS,
(FUNCPTR)syncISR,numToGive)
==ERROR)
{
perror("wdStart");
cleanUp();
return(ERROR);
}
/*arbitrarydelaytoallow
programtocompletebeforecleanup*/
taskDelay(sysClkRateGet()+
((TASK_WORK_TIME+2)*numToGive));
cleanUp();
return(OK);
}
/*************************************************
*syncTask-synchronizeswithinterruptsusing
*countingorbinarysemaphores.
*/
voidsyncTask(void)
{
inteventCount=0;
FOREVER
{
if(semTake(semId,WAIT_FOREVER)==ERROR)
{
perror("syncTasksemTake");
return;
}
/*Do"work"*/
taskDelay(TASK_WORK_TIME);
semShow(semId,1);
eventCount++;
printf("semaphoretaken%dtimes",eventCount);
}
}
/************************************************
*syncISR-simulatesahardwaredevice
whichgeneratesinterruptsvery
*quicklyandsynchronizeswith
syncTaskusingsemaphores.
*/
voidsyncISR(inttimes)
{
semGive(semId);
times--;
if(times>0)
wdStart(wdId,TIME_BETWEEN_INTERRUPTS,
(FUNCPTR)syncISR,times);
}
/********************************************
*cleanUP-deletesthesyncTask,deletesthe
*semaphoreandthewatchdogtimerpreviouslycreated
*bycountingSemDemo./
voidcleanUp()
{
if(syncTaskTid)
taskDelete(syncTaskTid);
if(semId)
semDelete(semId);
if(wdId)
wdDelete(wdId);
}
(注:歇息15分钟,筹办上机情况)
二.开卷部分
(一)上机参考解答题(45分钟内自力完成)
1.如何到场内部.o文件
2.怎样猎取函数wdStart的匡助
3.如何天生bootrom
4.有以下的bootline界说:
"fei(0,0)host:vxWorksh=10.100.62.35e=10.100.62.88u=targetpw=target"
别的:VxWorksimage在d:user_projectvxworks怎样设置ftp服务器
5.Attach的功效是甚么,AutoAttach是甚么寄义,如何设置AutoAttach
6.怎样进进system调试形式
7.给出0x220102Errno的意义
8.填图,内存结构
9.编程序,完成100次以20ticks为周期的对函数voidtest(void)的挪用
(二)上机实行题(30分钟)
1.创立一个有targetserverfilesystem的
Simulator和响应的撑持targetserverfilesystem的WDB毗连
2.载进<demo>startcobble.c到Simulator,
了解并调试dataSemId与crunch义务的干系
---------------------------------------------------------
谜底
一.
(一)
1.C: ornado argetconfigPentium
Config.h
2.“tffs=0,0(0,0)host:/tffs0/vxworksh=90.0.0.3e=90.0.0.50u=target”
3.c: ornado argetproj estProject
c: ornado argetconfigads8260
c: ornado argetproj estProjectdefault
4.设置抵触、短少必要的模块或有模块参数没有设置
5.spdemo(10)
6.browser
7.体系调试
8.sharedmemory、semaphore、messagequeue、pipe、signal
(二)
1.A
2.B,B,A,B,A
3.D
4.A,B,B
5.B
6.B,C,D,F
7.A
(三)
1.先用lkup“buffer”查找字符串的正确称号,同时也能够失掉字符串的地点;
然后用d字符串称号或d字符串地点来察看字符串内容
2.tPhil1由于实行了semTake,tPhil3由于实行了taskDelay
3.分歧优先级是基于优先级的抢占调剂,不异优先级是基于工夫片的轮巡调剂
4.taskSpawn(“test_task”,100,0,(FUNCPTR)test,2000,
(int)pointer1,200,0,0,0,0,0,0,0,0);
5.以’c’为参数最初显现的eventCount比以’b’为参数最初显现的eventCount要 年夜,这是由于syncISR作为数据源发送的速率比syncTask处置数据的速率快,
binarysemaphore会被重置而不克不及准确反应数据的个数;
countingsemaphore则不会被重置。
二.
(一)
1.在工程办理窗口的builds页面,翻开工程的default选项窗口,
在Macros中界说出EXTRA_MODULES为内部.o文件;
或在makefile中界说出EXTRA_MODULES。
2.翻开Tornado匡助体系,选择ManualsIndex,
再选择Index页面,在输出框中键进wdStart,然后确认显现,
便可以翻开该函数的html匡助。
3.在build菜单当选择buildbootrom,
然后在弹出窗口当选择BSP和Image范例,然后确认;
或在响应BSP目次中间接键进makeCPU=CPU范例Image范例
4.在ftp服务器的Security菜单当选择Users/Rights,然后newuser,
输出用户名和暗码后,再把Homedirectory置为d:user_projectvxworks
5.Attach用于多义务调试时,进进某个义务调试;
AutoAttach在某个义务碰到断点时,会主动进进该义务调试;
AutoAttach在tools-options-debugger-“Autoattachtotask”中设置。
6.利用debug菜单的Attach功效,在弹出的窗口当选择system;
或进进GDB窗口,键进attachsystem命令。
7.先在vxModNum.h中找出0x22的界说M_semLib,然后翻开semLib.h,
查找0x102的界说,得出为S_semLib_INVALID_OPTION
8.RAM_LOW_ADRSRAM_HIGH_ADRS
9.要点:
(1)用taskDelay的准时精度不敷,只能算合格;
(2)用watchdog时,必定要注重在watchdog的完成体内再启动该watchdog;
把持100次挪用可使用全局变量,或包装test函数后传送函数参数。
如果你现在开始学到编出像样的APPiOS5可能已经普及了可以直接用ARC(另之前对ARC的了解很粗浅现在开发程序完全可以直接ARCiOS4不支持的weak是有办法替代的用unsafe_unretained |
|