SHARC阵列板的VMEBus通信分析与应用
et*pkt){
inttag=MINOR_TAG(pkt->tag);/*读取申请包里的标签序号*/
if(tag>=0&&tag<=MAX)/*判断服务标签是否在原先设定的范围内*/
{
(this->*(table[tag]))(pkt);/*根据标签调用相应的服务*/
}
……
}
此时可将需要下达的指令装载在回复包,当客户服务程序执行完毕之后,该回复包立刻被自动发送出去,因此,可在允许信号处理机进入下一工作时序的时候将客户服务程序返回。在Custom_group类当中可以添加各项控制服务项目,例如Melbourne开机/关机、工作参数下发等等。
3.2非阻塞数据拷贝方式
由于这种客户/服务交互通信采用了阻塞模式,即SHARC必须等待通信控制器的回复才可以继续执行,但在某些情况下SHARC不需要等待。例如,SHARC提出申请,通知通信控制器将计算完毕的数据取走,而SHARC不必等待通信控制器将数据拷贝完毕才执行后面的计算。为了避免一直阻塞,可在相应的客户服务程序当中设置一个信号灯,当该程序被调用的时候即释放该信号灯,由信号灯驱动其它的模块进行数据拷贝,而该客户服务程序立刻返回使SHARC解除阻塞状态,如图3所示。
要实现该功能,可采取如下的程序代码:
voidCustom_group::executCommand1(Server_packet*pkt){
semGive(semId);/*信号灯驱动数据拷贝模块*/
return;
}
/*数据拷贝模块*/
voidSharcDataCopy(void){
semTake(semId);/*等待获得信号灯*/copy_from_SHARC(localBuffer,SHARCBufferAddress,dataLength);/*从SHARC拷贝数据*/
}
通过以上代码,当SHARC提出申请后,通信控制器立刻响应该申请,并在客户服务程序当中释放信号灯。驱动数据拷贝模块向Melbourne的根部处理器提取数据,客户服务程序迅速返回,解除信号处理机的阻塞状态。
4结论
通过以上的步骤,MVME2700作为服务端可以随时响应SHARC的服务请求,利用阻塞特性执行相应的时序控制操作;同时,也可以执行非阻塞数据拷贝,从而在VxWorks环境下建立起通信控制器与SHARC之间完整的被动触发控制模式。实际上,也可以由SHARC作为服务端,MVME2700作为客户端,建立的方法与上述基本一致。这种模式下,阵列板的任何一块SHARC处理器均可以作为服务端,而并非仅有根部处理器。
《SHARC阵列板的VMEBus通信分析与应用(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/171674.html
inttag=MINOR_TAG(pkt->tag);/*读取申请包里的标签序号*/
if(tag>=0&&tag<=MAX)/*判断服务标签是否在原先设定的范围内*/
{
(this->*(table[tag]))(pkt);/*根据标签调用相应的服务*/
}
……
}
此时可将需要下达的指令装载在回复包,当客户服务程序执行完毕之后,该回复包立刻被自动发送出去,因此,可在允许信号处理机进入下一工作时序的时候将客户服务程序返回。在Custom_group类当中可以添加各项控制服务项目,例如Melbourne开机/关机、工作参数下发等等。
3.2非阻塞数据拷贝方式
由于这种客户/服务交互通信采用了阻塞模式,即SHARC必须等待通信控制器的回复才可以继续执行,但在某些情况下SHARC不需要等待。例如,SHARC提出申请,通知通信控制器将计算完毕的数据取走,而SHARC不必等待通信控制器将数据拷贝完毕才执行后面的计算。为了避免一直阻塞,可在相应的客户服务程序当中设置一个信号灯,当该程序被调用的时候即释放该信号灯,由信号灯驱动其它的模块进行数据拷贝,而该客户服务程序立刻返回使SHARC解除阻塞状态,如图3所示。
要实现该功能,可采取如下的程序代码:
voidCustom_group::executCommand1(Server_packet*pkt){
semGive(semId);/*信号灯驱动数据拷贝模块*/
return;
}
/*数据拷贝模块*/
voidSharcDataCopy(void){
semTake(semId);/*等待获得信号灯*/copy_from_SHARC(localBuffer,SHARCBufferAddress,dataLength);/*从SHARC拷贝数据*/
}
通过以上代码,当SHARC提出申请后,通信控制器立刻响应该申请,并在客户服务程序当中释放信号灯。驱动数据拷贝模块向Melbourne的根部处理器提取数据,客户服务程序迅速返回,解除信号处理机的阻塞状态。
4结论
通过以上的步骤,MVME2700作为服务端可以随时响应SHARC的服务请求,利用阻塞特性执行相应的时序控制操作;同时,也可以执行非阻塞数据拷贝,从而在VxWorks环境下建立起通信控制器与SHARC之间完整的被动触发控制模式。实际上,也可以由SHARC作为服务端,MVME2700作为客户端,建立的方法与上述基本一致。这种模式下,阵列板的任何一块SHARC处理器均可以作为服务端,而并非仅有根部处理器。
《SHARC阵列板的VMEBus通信分析与应用(第3页)》