首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
VC/MFC
进程/线程/DLL
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
取消引用
结帖去...
管理菜单
页面风格切换
标准风格
老版本论坛
多线程加密文件(结合硬件算法引擎)如何实现。
加为好友
发送私信
在线聊天
gongchaoxiong
等级:
可用分等级:
乞丐
总技术分:
0
总技术分排名:
318040
结帖率:
71.43%
发表于:
2008-08-20 15:55:37
楼主
两组8311芯片,分别负责向FPGA的FIFO IN和FIFO OUT读写数据。
结构图如下:
PLX 8311 IN -------FIFO_IN-------SMS4算法引擎------FIFO_OUT----PLX 8311 OUT
过程描述:
PLX 8311 IN 通过DMA通道发送明文到FPGA的FIFO_IN队列中,当FIFO_IN队列中有128BITS数据的时候,SMS4硬件算法引擎就将数据取出加密,然后放到FIFO_OUT队列中。PLX 8311 OUT通过DMA通道将加密后的明文读出。
参数说明:
1、FPGA状态寄存器说明,如下表。
8 7 6 5 4 3 2 1 0
busy Empty_0 Full_0 AllmostEmpty_0 AllmostFull_0 Empty_1 Full_1 AllmostEmpty_1 AllmostFull_1
Busy:SMS4算法引擎是否忙(1为忙)。
Empty_0 :表示FPGA中的FIFO_IN是否为空(1为空)。
AllmostEmpty_0:表示FIFO_IN是否为半空(1为半空,表示数据小于等于容量的一半)
Full_0:表示FIFO_IN是否为满(1为满)
AllmostFull_0:表示FIFO_IN是否为半满(1为半满,表示数据大于等于容量的一办)
其他参数表示FIFO_OUT的状态,说明同FIFO_IN.。
2、FIFO_IN和FIFO_OUT的容量为4KBYTES。
功能要求:
A线程:读FPGA的状态寄存器的值,检测FIFO_IN的状态,是否为空(或者半空)。
如果为空(或者半空),则向FIFO_IN中写入数据。
B线程:读FPGA的状态寄存器的值,检测FIFO_OUT的状态,是否为满(或者半满)。如果为满(或者半满),则从FIFO_OUT中读出数据。
每次读写之前都要判断寄存器的状态,读写可以并行进行,比如在第一个4KBYTES数据全部加密完成之后,在B线程读数据的同时,A线程可以同时写数据。
请问如何用多线程的思想实现上述功能?完成加密文件操作。使用VC++6.0实现。
问题点数:
100
回复次数:
3
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
Virget
等级:
可用分等级:
长工
总技术分:
21
总技术分排名:
175106
发表于:
2008-08-20 16:07:17
1
楼 得分:
0
这个不难,但是一定要考虑共享数据段的实用权限。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
fangzheng2008
方正
等级:
可用分等级:
富农
总技术分:
588
总技术分排名:
29137
发表于:
2008-10-13 14:42:26
2
楼 得分:
0
//线程A
DWORD ThreadA(WPARAM wParam,LPARAM lParam)
{
while(TRUE)
{
if(WaitForSingleObject(m_stopEvent,100)==WAIT_OBJECT_0) //m_stopEvent为停止事件
break;
int ret= WaitForSingleObject(m_WriteFIFOEvent,100);//m_WriteFIFOEvent为向FIFO_IN中写事件
if(ret==WAIT_OBJECT_0)
{
WriteFIFO(); //向FIFO_IN中写数据函数
}
}
return 0;
}
//线程B
DWORD ThreadB(WPARAM wParam,LPARAM lParam)
{
while(TRUE)
{
if(WaitForSingleObject(m_stopEvent,100)==WAIT_OBJECT_0) //m_stopEvent为停止事件
break;
int ret= WaitForSingleObject(m_ReadFIFOEvent,100);//m_ReadFIFOEvent为向FIFO_IN中读事件
if(ret==WAIT_OBJECT_0)
{
ReadFIFO(); //向FIFO_IN中读数据函数
}
}
return 0;
}
//线程C 与状态寄存器作逻辑运算
DWORD ThreadC(WPARAM wParam,LPARAM lParam)
{
while(TRUE)
{
if(WaitForSingleObject(m_stopEvent,100)==WAIT_OBJECT_0) //m_stopEvent为停止事件
break;
if(PSW & 0x010000000==0x010000000 || PSW & 0x000100000==0x000100000) //PSW是状态寄存器
SetEvent(m_ReadFIFOEvent);
if(PSW & 0x001000000==0x001000000 || PSW & 0x000010000==0x000010000)//PSW是状态寄存器
SetEvent(m_WriteFIFOEvent);
}
return 0;
}
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
fangzheng2008
方正
等级:
可用分等级:
富农
总技术分:
588
总技术分排名:
29137
发表于:
2008-10-13 14:44:31
3
楼 得分:
0
线程C 修改如下
//线程C 与状态寄存器作逻辑运算
DWORD ThreadC(WPARAM wParam,LPARAM lParam)
{
while(TRUE)
{
if(WaitForSingleObject(m_stopEvent,100)==WAIT_OBJECT_0) //m_stopEvent为停止事件
break;
if(PSW & 0x010000000==0x010000000 || PSW & 0x000100000==0x000100000) //PSW是状态寄存器
SetEvent(m_ReadFIFOEvent);
else
ResetEvent(m_ReadFIFOEvent);
if(PSW & 0x001000000==0x001000000 || PSW & 0x000010000==0x000010000)//PSW是状态寄存器
SetEvent(m_WriteFIFOEvent);
else
ResetEvent(m_WriteFIFOEvent);
}
return 0;
}
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结帖去...
管理菜单
页面风格切换
标准风格
老版本论坛
网站简介
-
广告服务
-
网站地图
-
帮助
-
联系方式
-
诚聘英才
-
English
-
问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
abc推荐给好友