某公司的任职考试编程题,有兴趣的可以来挑战下

yfox 2016-03-12 05:31:33

从给定输入的数据流中搜索数据帧并完成处理,输入数据是小端数据,处理函数定义如下:
DataProc(UINT8* aucInput, UINT32 uwByteLen, UINT32 *puwFrameNum, UINT32 * puwOutput, UINT32* puwA, UINT32* puwB)
{
Return TRUE;/*正确处理的返回值*/
}

aucInput为输入,表示输入Byte序列的头指针,
uwByteLen为输入,表示输入长度20~10000 byte,不是该长度返回FAILSE;
puwFrameNum为输出,表示函数处理所有有效帧后输出的帧的个数,无效帧条件参考下面的描述
puwOutput为输出,表示处理的结果输出地址指针
puwA为输出,表示输出的操作历史数A
puwB为输出,表示输出的操作历史数B

后面的数据处理都是小端序。即从低到高的bit顺序。

从输入数据中搜索解析出帧数据,帧数据结构为:
32bit固定帧头为魔幻数0xaabbccdd
26bit FrameNum帧号
3bit 操作长度OprLen ,OprLen为0时,搜索到FrameNum值为0x3FFFFF的帧表示处理结束,结束后即使搜索到有效数据帧也不处理,其他值不考虑。
3bit DataLen数据长度指示。有效数据长度为1~4,否则返回FALSE
注意帧头位置可以非Byte对齐。

帧头后为“OprType+操作的参数+data”组成,根据不同类型,长度为变长的,操作的参数与OprType有关;data为数据序列,也与OprType有关(不一定有数据)。

3bit OprType表示处理类型,其中处理方式值为2或者6表示错误,直接返回FALSE

OprType = 0表示NOP操作,NOP的结构为“BitLen+RandomBit”,其中5bit BitLen表示后面有多少bit的数据,RandomBit为无用的数据。NOP操作不影响任何输出结果。

OprType=1表示ADD16操作,即16bit加法操作,ADD16的数据结构为“ind0+src0+ind1+src1+ind2+dst”,总共26bit。其中ind0和ind1为2bit,表示所有的Src的来源类型,ind2为1bit,表示dst的保存类型,src0、src1、dst都是7bit长度。其中src0、src1是加法操作的两个加数来源指示,dst是加法的结果。
ind = 0表示加数都从后面的data序列中读出,src则表示从data序列的读取位置,两个加数都是16bit,需软件检测读取数据在序列中位置的合法性,不合法则返回FALSE
Ind=1表示加数来源于历史数puwA或者puwB,src为0表示数据来源于历史数据puwA,否则来源于历史数据puwB
Ind=3表示加数来源于立即数,src即为立即数
Ind>3需返回FALSE
相加结果为16bit数据,不需要考虑溢出,dst的ind指示结果存入类型
Ind=0表示结果写入由dst指示的数据序列中,长度为16bit
Ind=1表示结果写入历史数中,dst为0表示历史数puwA,否则表示puwB,注意16bit写入历史数的低16bit。

OprType=3表示SWAPBIT操作,SWAPBIT的数据结构为”ind0+src0+ind1+dst”,共16bit。
其中ind0为1bit,表示数据的来源;src0长度7bit;ind1为1bit表示结果输出的类型,dst长度为7bit。
Ind=0表示来源于data序列,src0为数据的读取位置,读出数据长度为32bit
Ind=1表示来源于历史数,src0为0表示来源于历史数A,否则为来源于历史数B
将数据(32bit)取出后做镜像交换,即31bit与0bit值交换,30bit与1bit的值交换,交换后的结果存入ind1指示的输出类型中,参考上面的ind描述。

OprType=4表示BITCOMB操作,即bit合并加法操作,bitcomb的数据结构为“ind0+src0+ind1+src1+ind2+dst+index”,总共29bit。其中ind0和ind1为1bit,表示所有的Src的来源类型,ind2为1bit,表示dst的保存类型,src0、src1、dst都是7bit长度。其中src0、src1是合并操作的两个数据来源指示,dst是合并的结果;index为合并截取的bit序列的位置。
ind = 0表示数据都从后面的data序列中读出,src则表示从data序列的读取位置,两个源数据都是32bit,需软件检测读取数据在序列中位置的合法性,不合法则返回FALSE
Ind=1表示数据来源于历史数puwA或者puwB,src为0表示数据来源于历史数据puwA,否则来源于历史数据puwB
取出两个源数据后,根据index的值,把src0的0~index和src1的(index+1)~31比特序列合并,src0在低位,src1在高位。
dst的ind指示结果存入类型
Ind=0表示结果写入由dst指示的数据序列中
Ind=1表示结果写入历史数中,dst为0表示历史数puwA,否则表示puwB

OprType=6表示CALL操作,CALL的数据结构只有26bit数据,表示帧号FrameNum,CALL操作即转到FrameNum指示的帧进行处理,数据源保证不出现递归的现象

OprType=6表示RETURN操作,即转移到CALL操作结束位置,搜索的下一个帧进行操作。

说明:
输入的所有帧数据处理完后(注意处理结束的条件处理)将结果保存到puwOutput中
输出历史操作数只保存最后一次操作的,中间操作历史数需刷新。
Output是测试函数动态申请的,输出结果长度超过将会产生内存溢出
程序中任何内存崩溃或者无法返回结果都记0分
完成时间为4~6小时,超过4小时每15分钟扣2分,不满15分钟按15分钟算,超过6小时记0分。
请用C语言完成上面的题目
...全文
264 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2016-03-14
  • 打赏
  • 举报
回复
单独题目是不行的,还必须提供测试数据, 如果测试数据,自己搜集的话 四个小时估计够呛,除非做过,或者是高手
yfox 2016-03-12
  • 打赏
  • 举报
回复
没办法搞PPT出来,只能自己描述,没有图看起来比较恼火,原谅下!其实PPT理解题目都要花1小时。
内容概要:本文提出了一种融合元胞自动机邻域驱动遗传算法与关键工序定向随机重启爬山算法(GA-RRHC)的混合优化方法,用于求解高柔性柔性作业车间调度问题(FJSSP),以实现最小化最大完工时间的目标。该算法通过元胞自动机构建动态邻域结构,增强种群多样性与搜索效率,结合遗传算法的全局探索能力和随机重启爬山算法的局部精细化优化能力,并引入关键路径识别机制指导搜索方向,有效避免陷入局部最优。整个方法在Matlab平台上实现了完整的算法流程与仿真实验,验证了其在复杂调度场景下的优越性能与鲁棒性,适用于高柔性制造系统的生产调度优化需求。; 适合人群:具备一定编程基础和运筹优化背景,从事智能制造、工业工程、自动化或相关领域研究的研发人员及研究生(工作或学习年限1-3年)。; 使用场景及目标:①解决高柔性作业车间中多工序、多设备、多约束条件下的调度优化难题;②研究混合智能优化算法的设计与实现机制,特别是遗传算法与局部搜索策略的融合方式;③为实际生产系统提供高效的调度方案,缩短生产周期,提高资源利用率。; 阅读建议:此资源以Matlab代码为核心载体,强调算法实现与仿真实验的结合,建议读者在阅读过程中动手运行并调试代码,深入理解元胞邻域构造、关键路径识别及随机重启机制的作用,同时可拓展应用于其他组合优化问题。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧