- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一.系统分析题17-2
1.简述所开发系统的系统功能及任务级功能设计(12)
创建2个任务product、customer
product功能
对一个空缓冲区写1,表示生产者向该缓冲区放入资源
customer功能:
对一为1的缓冲区清0,表示消费者取走该缓冲区资源
列出开发以上功能的应用程序,需要调用的UC/OS-II任务管理内核函数,时间管理内核函数,任务通信管理函数及其功能。(5)
OsSemPend()函数实现了P操作;
OsSemPost()函数实现了V操作;
Os_EVENT 变量用来定义信号量;
OsSemCreate()函数用来初始化信号量;
OsTaskCreate()函数用来创建任务;
PC_DispStr()函数用来在界面上显示字符串;
OsTimeDlyHMSM()函数用来进行延时;
二.系统设计题27-3
优选自己负责开发的一个任务(task),回答以下问题:
该任务功能及任务内部处理流程(9)
product。
生成者先向空缓冲区放入产品,当缓冲区全满后生产者不能再继续放入产品。
该任务的函数代码及任务优先级(9)
void PRODUCTER(void *pdata)
{
pdata=pdata;
for(;;)
{
OSSemPend(empty, 0, err);
OSSemPend(mutex, 0, err);
PC_DispChar(14, 8, 1, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispChar(14, 10, 0, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispChar(xy[in], 13, 1, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
in=(in + 1) % N;
OSTimeDly(300);
OSSemPost(mutex);
OSSemPost(full);
OSTimeDly(200);
}
}
优先级:1
运行界面上显示的关于该任务周期性运行的数据(9)
三.系统运行及调试题36-3
1.你的应用程序一共包含几个任务?这些任务有怎样的制约和控制关系?怎样利用内核系统函数实现这样的制约关系?(12)
2个,生成者先向空缓冲区放入产品,然后消费者从一非空缓冲区取走产品,当缓冲区全满后生产者不能再继续放入产品,当缓冲区全空时消费者不能再从缓冲区取产品。
3个信号量:empty、full、mutex
初始化信号量:
mutex = OSSemCreate(1);
empty = OSSemCreate(N);
full = OSSemCreate(0);
2个缓冲区指针
in = out = 0;
确定存在空缓冲区时生产者能进入临界区生产:
OSSemPend(empty, 0, err);
OSSemPend(mutex, 0, err);
生产者离开临界区:
OSSemPost(mutex);
OSSemPost(full);
确定存在非空缓冲区时消费者能进入临界区消费:
OSSemPend(full, 0, err);
OSSemPend(mutex, 0, err);
消费者离开临界区:
OSSemPost(mutex);
OSSemPost(empty);
2.分别举例说明,增加或减少修改任务的延迟时间,系统运行会发生什么变化。(12)
列出以上任务创建时的系统函数调用(12)
创建生产者进程,优先级1:
OSTaskCreate(PRODUCTER, (void *)0, PRODUCTERStk[TASK_STK_SIZE - 1], 1);
创建消费者进程,优先级2:
OSTaskCreate(CUSTOMER, (void *)0, CUSTOMERStk[TASK_STK_SIZE - 1], 2);
四.系统界面设计题 20-2
1.描述应用系统运行界面上,输出数据的布局设计。(10)
PRODUCTER-CUSTOMER
PRODUCTER :
CUST
文档评论(0)