⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 嵌入式365:提升您的价值.htm

📁 嵌入式实时操作系统VxWorks的面试试题.可供对此方向感兴趣的朋友参考.
💻 HTM
📖 第 1 页 / 共 3 页
字号:
            to<BR>&nbsp;&nbsp; use binary semaphore instead of<BR>&nbsp;* 
            counting semaphore in this demonstration,<BR>&nbsp;&nbsp; for 
            comparision between the two<BR>&nbsp;* 
            semaphores.<BR>&nbsp;*<BR>&nbsp;*&nbsp; RETURNS: OK or 
            ERROR<BR>&nbsp;*<BR>&nbsp;*/</P>
            <P>STATUS countingSemDemo (<BR>&nbsp;&nbsp;&nbsp; char semType&nbsp; 
            /* counting semaphore 
            type<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            'c' or binary 
            semaphore<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            * type 
            'b'<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            */)<BR>{<BR>&nbsp;&nbsp;&nbsp; switch 
            (semType)<BR>&nbsp;&nbsp;&nbsp; 
            {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
            'c':<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
            'C':<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
            ((semId = 
            semCCreate(SEM_Q_PRIORITY,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            0)) == 
            NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            perror 
            ("semCCreate");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            return 
            (ERROR);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            break;</P>
            <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
            'b':<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
            'B':<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            if ((semId = 
            semBCreate(SEM_Q_PRIORITY,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            SEM_EMPTY)) == 
            NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            perror 
            ("semBCreate");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            return 
            (ERROR);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            break;</P>
            <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            default:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            printf ("Unknown semType-- must be 'c' or 
            'b'\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            return (ERROR);<BR>&nbsp;&nbsp;&nbsp; }</P>
            <P>&nbsp;&nbsp;&nbsp; if ((wdId = wdCreate()) == 
            NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; perror 
            ("wdCreate");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cleanUp 
            ();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
            (ERROR);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
            <P><BR>&nbsp;&nbsp;&nbsp; if ((syncTaskTid = taskSpawn ("tsyncTask", 
            TASK_PRIORITY,0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            TASK_STACK_SIZE,(FUNCPTR) 
            syncTask,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            0,0,0,0,0,0,0,0,0,0)) == 
            ERROR)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            {<BR>&nbsp;&nbsp;&nbsp;&nbsp;perror 
            ("taskSpawn");<BR>&nbsp;&nbsp;&nbsp;&nbsp;cleanUp();<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 
            (ERROR);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}</P>
            <P>&nbsp;&nbsp;&nbsp; /* watchdog simulates hardware interrupts 
            */<BR>&nbsp;&nbsp;&nbsp; if (wdStart (wdId, 
            TIME_BETWEEN_INTERRUPTS,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            (FUNCPTR) syncISR, 
            numToGive)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            == ERROR)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; perror 
            ("wdStart");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cleanUp 
            ();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
            (ERROR);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
            <P>&nbsp;&nbsp;&nbsp; /* arbitrary delay to 
            allow<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; program to complete 
            before clean up */<BR>&nbsp;&nbsp;&nbsp; taskDelay (sysClkRateGet() 
            +<BR>&nbsp;&nbsp;&nbsp;&nbsp; ((TASK_WORK_TIME + 2) * 
            numToGive));<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; 
            cleanUp();<BR>&nbsp;&nbsp;&nbsp; return (OK);<BR>}<BR>&nbsp;</P>
            <P>/*************************************************<BR>&nbsp;*&nbsp; 
            syncTask - synchronizes with interrupts using<BR>&nbsp;*&nbsp; 
            counting or binarysemaphores.<BR>&nbsp;*/</P>
            <P>void syncTask (void)<BR>{<BR>&nbsp;&nbsp;&nbsp; int eventCount = 
            0;</P>
            <P>&nbsp; FOREVER<BR>&nbsp; {<BR>&nbsp; if (semTake (semId, 
            WAIT_FOREVER) == ERROR)<BR>&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
            perror ("syncTask semTake");<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
            return;<BR>&nbsp;&nbsp; }</P>
            <P>&nbsp; /* Do "work" */<BR>&nbsp; taskDelay 
            (TASK_WORK_TIME);<BR>&nbsp; semShow (semId,1);</P>
            <P>&nbsp; eventCount++;<BR>&nbsp; printf ("semaphore taken %d 
            times\n", eventCount);<BR>&nbsp;}</P>
            <P>}</P>
            <P>/************************************************<BR>&nbsp;* 
            syncISR - simulates a hardware device<BR>&nbsp;&nbsp; which 
            generates interrupts very<BR>&nbsp;* quickly and synchronizes 
            with<BR>&nbsp;&nbsp; syncTask using semaphores.<BR>&nbsp;*/<BR>void 
            syncISR(int times)<BR>{<BR>&nbsp;&nbsp;&nbsp; semGive 
            (semId);<BR>&nbsp;&nbsp;&nbsp; times--;<BR>&nbsp;&nbsp;&nbsp; if 
            (times &gt; 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wdStart 
            (wdId, 
            TIME_BETWEEN_INTERRUPTS,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            (FUNCPTR) syncISR, times);<BR>}</P>
            <P>/********************************************<BR>&nbsp;* cleanUP 
            - deletes the syncTask, deletes the<BR>&nbsp;* semaphore and the 
            watchdog timer previously created<BR>&nbsp;* by 
            countingSemDemo./<BR>void cleanUp ()<BR>{<BR>&nbsp;&nbsp;&nbsp; if 
            (syncTaskTid)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            taskDelete (syncTaskTid);<BR>&nbsp;&nbsp;&nbsp; if 
            (semId)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; semDelete 
            (semId);<BR>&nbsp;&nbsp;&nbsp; if 
            (wdId)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wdDelete 
            (wdId);</P>
            <P>}<BR>(注:休息15分钟,准备上机环境)<BR>二.&nbsp;开卷部分</P>
            <P>(一)上机参考解答题(45分钟内独立完成)<BR>1.怎样加入外部.o文件</P>
            <P>2.如何获取函数wdStart的帮助</P>
            <P>3.怎样生成bootrom</P>
            <P>4.有如下的bootline 定义:<BR>"fei(0,0)host:vxWorks h=10.100.62.35 
            e=10.100.62.88 u=target pw=target"<BR>另外:VxWorks 
            image在d:\user_project\vxworks 如何配置ftp服务器</P>
            <P>5.Attach的功能是什么,Auto Attach是什么含义,怎样设置Auto Attach?</P>
            <P>6. 如何进入system调试模式</P>
            <P>7.给出0x220102 Errno的意义</P>
            <P>8.填图,内存布局</P>
            <P>9.编程序,实现100次以20 ticks为周期的对函数 void test(void)的调用</P>
            <P><BR>(二)上机实验题(30分钟)</P>
            <P>1.创建一个有target server file system 的<BR>&nbsp; 
            Simulator和相应的支持target server file system 的WDB连接</P>
            <P>2.载入&lt;demo&gt;\start\cobble.c到 Simulator,<BR>&nbsp; 
            理解并调试dataSemId与crunch任务的关系<BR>&nbsp;</P>
            <P><STRONG><FONT 
            color=#ff0000>---------------------------------------------------------</FONT></STRONG></P>
            <P>答案<BR>一.<BR>(一)<BR>1.&nbsp;C:\tornado\target\config\Pentium&nbsp;<BR>&nbsp;&nbsp;Config.h<BR>2.&nbsp;“tffs=0,0(0,0)host:/tffs0/vxworks 
            h=90.0.0.3 e=90.0.0.50 
            u=target”<BR>3.&nbsp;c:\tornado\target\proj\testProject\<BR>&nbsp;&nbsp;c:\tornado\target\config\ads8260<BR>&nbsp;&nbsp;c:\tornado\target\proj\testProject\default<BR>4.&nbsp;配置冲突、缺少需要的模块或有模块参数没有设置<BR>5.&nbsp;sp 
            demo(10)<BR>6.&nbsp;browser<BR>7.&nbsp;系统调试<BR>8.&nbsp;shared 
            memory、semaphore、message queue、pipe、signal</P>
            <P>(二)<BR>1.A<BR>2.&nbsp;B,B,A,B,A<BR>3.&nbsp;D<BR>4.&nbsp;A,B,B<BR>5.&nbsp;B<BR>6.&nbsp;B,C,D,F<BR>7.&nbsp;A<BR>(三)<BR>1.&nbsp;先用lkup 
            “buffer”查找字符串的准确名称,同时也可以得到字符串的地址;<BR>&nbsp;&nbsp;&nbsp; 然后用 d 
            字符串名称&nbsp; 或&nbsp; d 字符串地址来观察字符串内容</P>
            <P>2.&nbsp;tPhil1因为执行了semTake,tPhil3因为执行了taskDelay</P>
            <P>3.&nbsp;不同优先级是基于优先级的抢占调度,相同优先级是基于时间片的轮巡调度</P>
            <P>4.&nbsp;taskSpawn ( “test_task”, 100, 0,&nbsp; (FUNCPTR) test, 
            2000,&nbsp;<BR>&nbsp;&nbsp;&nbsp; (int) pointer1, 200, 0, 0, 0, 0, 
            0, 0, 0, 0);</P>
            <P>5.&nbsp;以’c’为参数最后显示的eventCount比以’b’为参数最后显示的eventCount要 大,这是因为syncISR作为数据源发送的速度比syncTask处理数据的速度快,<BR>&nbsp;&nbsp;&nbsp; 
            binary semaphore 会被重置而不能正确反映数据的个数;<BR>&nbsp;&nbsp;&nbsp; counting 
            semaphore则不会被重置。</P>
            <P>二.<BR>(一)<BR>1.&nbsp;在工程管理窗口的builds页面,打开工程的default选项窗口,<BR>&nbsp;&nbsp;&nbsp; 
            在Macros中定义出EXTRA_MODULES为外部.o文件;<BR>&nbsp;&nbsp;&nbsp; 
            或在makefile中定义出EXTRA_MODULES。</P>
            <P>2.&nbsp;打开Tornado 帮助系统,选择Manuals Index ,<BR>&nbsp;&nbsp;&nbsp; 
            再选择Index页面,在输入框中键入wdStart,然后确认显示,<BR>&nbsp;&nbsp;&nbsp; 
            即可以打开该函数的html帮助。</P>
            <P>3.&nbsp;在build菜单中选择 build boot rom ,<BR>&nbsp;&nbsp;&nbsp; 
            然后在弹出窗口中选择BSP和Image 类型,然后确认;<BR>&nbsp;&nbsp;&nbsp; 
            或在相应BSP目录中直接键入make CPU=CPU类型 Image类型</P>
            <P>4.&nbsp;在ftp服务器的Security菜单中选择Users/Rights ,然后new user 
            ,<BR>&nbsp;&nbsp;&nbsp; 输入用户名和密码后,再把Home directory 
            置为d:\user_project\vxworks</P>
            <P>5.&nbsp;Attach 用于多任务调试时,进入某个任务调试;<BR>&nbsp;&nbsp;&nbsp; Auto 
            Attach在某个任务遇到断点时,会自动进入该任务调试;<BR>&nbsp;&nbsp;&nbsp; Auto Attach 
            在tools-options-debugger-“Auto attach to task”中设置。</P>
            <P>6.&nbsp;使用debug菜单的Attach功能,在弹出的窗口中选择system;<BR>&nbsp;&nbsp;&nbsp; 
            或进入GDB窗口,键入attach system命令。</P>
            <P>7.&nbsp;先在vxModNum.h中找出0x22的定义M_semLib,然后打开semLib.h,<BR>&nbsp;&nbsp;&nbsp; 
            查找0x102的定义,得出为S_semLib_INVALID_OPTION</P>
            <P>8.&nbsp;RAM_LOW_ADRS&nbsp; RAM_HIGH_ADRS</P>
            <P 
            align=left>9.&nbsp;要点:<BR>(1)&nbsp;用taskDelay的定时精度不够,只能算及格;<BR>(2)&nbsp;用watch 
            dog时,一定要注意在watch dog的实现体内再启动该watch 
            dog;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            控制100次调用可以使用全局变量,或包装test函数后传递函数参数。<BR></P></TD></TR>
        <TR>
          <TD vAlign=top width=580 height=50>
            <HR color=#0066ff>

            <P 
            style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; WORD-SPACING: 0px; LINE-HEIGHT: 100%" 
            align=left>免责声明:</P>
            <P 
            style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; WORD-SPACING: 0px; LINE-HEIGHT: 100%" 
            align=left>1、本站文章中心绝大部分文章均来自互联网,只为嵌入式爱好者提供学习参考,提高我们嵌入式整体水平,版权属原作者所有,文中观点与本站无关,读者阅读前请自行判断。
            <P 
            style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; WORD-SPACING: 0px; LINE-HEIGHT: 100%" 
            align=left>2、本站在转载文章时,努力搜索原作者与原始出处,并根据原始出处页面信息判断是否可以转载,尽管我们努力去做,但不免有漏网之鱼。另外一些优秀文章久经转载,原始出处与作者等信息丢失,如果侵犯了您的权益,请来信告之,本站立即加上相关信息或应要求即刻删除,并表示最大歉意,同时替广大嵌入式学习者向您表示十分敬意与感谢。 
            </P></TD></TR>
        <TR>
          <TD vAlign=top width=580 height=18>
            <P align=right>【<A 
            href="http://www.emb365.com/print.asp?flag=article&amp;id=503">打印</A>】</P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV><!--以上是通栏2-->
<SCRIPT language=javascript src="嵌入式365:提升您的价值.files/floating.js"></SCRIPT>

<SCRIPT language=javascript>//floatads('','ad/images/zp.gif)</SCRIPT>

<TABLE cellSpacing=0 cellPadding=0 width=760 align=center bgColor=#ffffff 
border=0>
  <TBODY>
  <TR>
    <TD background=嵌入式365:提升您的价值.files/bg_td.gif>
      <DIV align=center>
      <P align=center><A href="http://www.emb365.com/index.asp"><FONT 
      color=#ffffff>网站首页</FONT></A> <FONT color=#ffffff>|</FONT> <FONT 
      color=#ff0000><A href="http://www.emb365.com/law.asp" 
      target=_blank></A></FONT><A href="http://www.emb365.com/law.asp" 
      target=_blank><FONT color=#ffffff>法律声明</FONT></A> <FONT 
      color=#ffffff>|</FONT> <FONT color=#ff0000><A 
      href="http://www.emb365.com/buy.asp" target=_blank></A></FONT><A 
      href="http://www.emb365.com/buy.asp" target=_blank><FONT 
      color=#ffffff>购买方式</FONT></A> <FONT color=#ffffff>|</FONT> <FONT 
      color=#ff0000><A href="http://www.emb365.com/link.asp" 
      target=_blank></A></FONT><A href="http://www.emb365.com/link.asp" 
      target=_blank><FONT color=#ffffff>欢迎链接</FONT></A> </P></DIV></TD></TR>
  <TR>
    <TD height=21>
      <P align=center>Copyright &copy; 2005-2008 Emb365.com All rights reserved. 
    </P></TD></TR></TBODY></TABLE></CENTER></FORM></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -