精锐:中美时间换算如何转换?

热门关键词:
热门关键词:
如何申请中美班安生教育
10:31:10 点击: 次&
安生8226山东省实验中学美国班未开先热 备受关注&&&  安生讯& 5月7日山东省实验中学“学校开放日”,安生?山东省实验中学美国高中课程(+AP)实验班咨询台前成为最受家长关注的焦点。  据悉,2011年山东省实验中学与美国安生文教交流基金会首次联合开办美国高中课程(+AP)实验班,为山东学子打造原汁原味的美国高中课堂。大批关注的初中学生及家长在咨询台前详细地向有关教师了解该班的录取方式、课程设置、毕业去向等事项,对中美课程实验班的双学历制、AP课程、外教师资优势以及对今后进入国际知名高校所发挥的作用表示了极大的兴趣。  5月8日,安生?山东省实验中学美国高中课程(+AP)实验班又在校图书馆为家长们举行了专场项目说明会,安生基金会中国代表处首席代表张莉女士、山东省试验中学郑玉香副校长出席说明会并讲话。  郑校长介绍,安生?山东省实验中学美国高中课程(+AP)实验班是山东省教育厅唯一批准的美国课程班项目,并就美国班的录取流程、优势和设置进行了说明。  张莉女士则就为什么选择安生?山东省实验中学美国高中课程班和美国大学更青睐什么样的人才进行了发言。  参加说明会的一百多位初三学生家长就美国班的课程安排、孩子三年后的出路、如何进入安生?山东省实验中学美国高中课程班等各自关心的问题向两位进行了提问,并收到了满意的回答。&美国班咨询台前家长络绎不绝&
阅读上一篇:阅读下一篇:
找课114全国免费课程咨询热线,为您推荐口碑最好的中小学课外辅导、少儿英语、成人英语、出国留学机构(其他课程咨询恕不接待)
北京 400-001-&上海 400-001-&广州 400-001- 深圳 400-001-&天津 400-001-&杭州 400-001- 南京 400-001-&苏州 400-001-&济南 400-001- 青岛 400-001-&武汉 400-001-&重庆 400-001-
成都 400-001-&西安 400-001-&宁波 400-001-大连 400-001-
温馨提示:拨打招生免费咨询电话方法,先拨通400-001-9911,再根据语音提示按分机号,等待接通,欢迎您的来电。(电话接听时间段:周一至周日上午9:00―晚上20:00)
??????????
????????????????????
??????????
??????????
???????????????
音频公开课
9861
4179
5036
3815
4326
4336
6071
3822
15178
4401
6485
6085
5847
11661
10075
9963
9070
16188
14056
13957
三百六十行,欢迎各培训机构加盟当前位置: >>
精锐IV开发手册3.0.0.8
精锐 IV 开发手册2010年11月version 3.0.0.8 许可协议同意本许可协议的所有条款及此处包含的任何补充或特殊的许可条款是获得本产品许 可的必要条件。 如果您不同意此协议的所有条款,请在三天内将产品退还北京深思洛克软件 技术股份有限公司。您对本软件的使用将表明您同意接受本协议中条款的约束。 1. 授予您使用许可权。您可以为了备份的目的而复制磁盘中的软件,可以为了将本产品集 成到您的软件的目的,根据本产品的文档说明将我们提供的软件合并进您的程序中。 2. 除已按上述第一条被授权外,不可以复制、修改、逆向工程、分解或重组该产品的全部 或部分,不可向他人销售、租借、许可、转让、分发全部或部分本产品或本协议授予的 权利。 3. 保证在自产品交给您之日起的 12 个月内,在正常使用情况下,产品不会出现实质性的材 料上和生产制造上的缺陷。北京深思洛克软件技术股份有限公司的全部责任和您能获得 的全部补救措施为:可选择尝试更换或修理或其它补救措施。 4. 除了上述对本产品的原始购买者所提供的有限保证之外,不向任何人作任何其它的保证。 对北京深思洛克软件技术股份有限公司的产品、性能或服务亦没有明示的或暗示的或其 它任何形式的保证,包括但不仅仅限于商品的适销性和对特定用途的适用性。 5. 任何情况下,无论如何引起及依据何种责任理论,均不负担任何因使用或不能使用本产 品造成的损失责任,包括:丢失数据、损失利润及其它特别的、偶然的、附随的、继发 的或间接的损失。 6. 所有的产品,包括精锐? IV、软件、文档、与本产品一并附送的其它材料及您制作的备 份的所有权与版权均属于北京深思洛克软件技术股份有限公司。 7. 违反上述条款时,本协议的授权将自动终止。“精锐”是北京深思洛克软件技术股份有限公司的注册商标。本文所涉及的其它产品和公司名称可能是各自相应所有者的商标。 怎样联系深思洛克公司名称:北京深思洛克软件技术股份有限公司 办公地点:北京市海淀区中关村南大街甲 6 号铸诚大厦 B 座 1201 室 邮 编:100086 电 话:+86-10- 传 真:+86-10- 电 子 邮 件:.cn 网 址:.cn 目录1. 产品介绍.......................................................................................................................................... 1 1.1. 1.2. 新的软件保护方法.................................................................................................................. 1 产品基本组成..........................................................................................................................21.2.1. 1.2.2. 1.2.3.1.3.精锐 IV 开发工具包........................................................................................................2 精锐 IV 硬件设备........................................................................................................... 3 用户运行时环境............................................................................................................. 3 口令................................................................................................................................. 3 文件系统......................................................................................................................... 4重要的安全事项......................................................................................................................31.3.1. 1.3.2.1.4. 2.更多的功能..............................................................................................................................6产品安装.......................................................................................................................................... 7 2.1. 2.2. 2.3. 系统需求..................................................................................................................................7 SDK 安装...................................................................................................................................72.2.1.关于设备驱动程序安装的说明 ......................................................................................7SDK 卸载...................................................................................................................................83.开始使用.......................................................................................................................................... 9 3.1. 3.2. 示例软件..................................................................................................................................9 代码移植................................................................................................................................103.2.1. 3.2.2. 3.2.3. 3.2.4. 3.2.5. 3.2.6.3.3. 4.创建一个精锐 IV 工程..................................................................................................10 编写精锐 IV 代码..........................................................................................................10 编译测试精锐 IV 代码..................................................................................................12 下载代码到精锐 IV 硬件..............................................................................................12 修改 PC 代码................................................................................................................. 13 测试保护结果............................................................................................................... 16程序结构分析........................................................................................................................16开发精锐 IV 代码.......................................................................................................................... 18 4.1. 编写精锐 IV 内部代码.......................................................................................................... 184.1.1. 4.1.2. 4.1.3. 4.1.4. 4.1.5. 4.1.6.4.2.代码结构....................................................................................................................... 18 输入与输出................................................................................................................... 19 内存结构....................................................................................................................... 20 使用系统函数库文件 ....................................................................................................24 数据类型....................................................................................................................... 24 代码编写建议............................................................................................................... 24 一般性访问................................................................................................................... 25 开发级访问................................................................................................................... 28 用户级访问................................................................................................................... 32访问精锐 IV 设备..................................................................................................................254.2.1. 4.2.2. 4.2.3.4.3.关于代码测试........................................................................................................................34 精锐IV产品开发手册目录5.编译器使用说明............................................................................................................................ 35 5.1. KEIL C51 使用说明................................................................................................................ 355.1.1. 5.1.2. 5.1.3. 5.1.4.5.2.工程创建与管理........................................................................................................... 36 代码编译与调试配置 ....................................................................................................38 代码调试方法............................................................................................................... 39 仿真器特别说明........................................................................................................... 43 工程创建与管理........................................................................................................... 44 代码编译与调试........................................................................................................... 47RAISONANCE RKIT 使用说明...................................................................................................... 445.2.1. 5.2.2.5.3. 5.4. 6.深思洛克 SKIT........................................................................................................................ 47 可执行文件格式....................................................................................................................47工具软件使用说明........................................................................................................................ 48 6.1. 开发测试工具........................................................................................................................486.1.1. 6.1.2. 6.1.3. 6.1.4. 6.1.5. 6.1.6. 6.1.7. 6.1.8.7.重新连接....................................................................................................................... 49 重置设备....................................................................................................................... 49 PIN 码管理.................................................................................................................... 51 下载文件....................................................................................................................... 51 清空目录....................................................................................................................... 52 执行文件....................................................................................................................... 53 授权管理....................................................................................................................... 54 PC 密钥.......................................................................................................................... 54网络版使用说明............................................................................................................................ 56 7.1. 精锐 IV 网络版简介.............................................................................................................. 567.1.1. 7.1.2. 7.1.3.7.2.特性............................................................................................................................... 56 网络锁口令................................................................................................................... 57 网络锁的模块............................................................................................................... 57 网络锁服务程序的安装和卸载 ....................................................................................57 网络锁服务管理工具的使用 ........................................................................................57 网络锁 API 的使用....................................................................................................... 62使用网络版精锐 IV............................................................................................................... 577.2.1. 7.2.2. 7.2.3.8.系统函数参考................................................................................................................................ 64 8.1. 8.2. 8.3. 流程控制类............................................................................................................................65 输入输出类............................................................................................................................66 文件操作类............................................................................................................................678.1.1._exit....................................................................................................................................... 65 8.2.1._set_response.........................................................................................................................66 8.3.1._open..................................................................................................................................... 67 8.3.2._close.....................................................................................................................................68 8.3.3._read......................................................................................................................................69 8.3.4._write.....................................................................................................................................70 8.3.5._create................................................................................................................................... 73 8.3.6._enable_exe........................................................................................................................... 75- II - 精锐IV产品开发手册目录8.4.数学运算类............................................................................................................................778.4.1._addf...................................................................................................................................... 77 8.4.2._add....................................................................................................................................... 78 8.4.3._subf...................................................................................................................................... 79 8.4.4._sub....................................................................................................................................... 80 8.4.5._multf.....................................................................................................................................81 8.4.6._mult...................................................................................................................................... 82 8.4.7._divf....................................................................................................................................... 83 8.4.8._div........................................................................................................................................ 84 8.4.9._sinf....................................................................................................................................... 85 8.4.10._sin...................................................................................................................................... 86 8.4.11._cosf..................................................................................................................................... 87 8.4.12._cos......................................................................................................................................88 8.4.13._tanf.....................................................................................................................................89 8.4.14._tan...................................................................................................................................... 90 8.4.15._asinf................................................................................................................................... 91 8.4.16._asin.................................................................................................................................... 92 8.4.17._acosf...................................................................................................................................93 8.4.18._acos....................................................................................................................................94 8.4.19._atanf...................................................................................................................................95 8.4.20._atan.................................................................................................................................... 96 8.4.21._atan2f.................................................................................................................................97 8.4.22._atan2.................................................................................................................................. 98 8.4.23._sinhf................................................................................................................................... 99 8.4.24._sinh.................................................................................................................................. 100 8.4.25._coshf.................................................................................................................................101 8.4.26._cosh..................................................................................................................................102 8.4.27._tanhf.................................................................................................................................103 8.4.28._tanh.................................................................................................................................. 104 8.4.29._ceilf.................................................................................................................................. 105 8.4.30._ceil................................................................................................................................... 106 8.4.31._floorf................................................................................................................................ 107 8.4.32._floor................................................................................................................................. 108 8.4.33._absf.................................................................................................................................. 109 8.4.34._abs....................................................................................................................................110 8.4.35._fmodf.................................................................................................................................111 8.4.36._fmod................................................................................................................................. 112 8.4.37._expf...................................................................................................................................113 8.4.38._exp....................................................................................................................................114 8.4.39._logf................................................................................................................................... 115 8.4.40._log.................................................................................................................................... 116 8.4.41._log10f............................................................................................................................... 117 8.4.42._log10................................................................................................................................ 118 8.4.43._sqrtf.................................................................................................................................. 119- III - 精锐IV产品开发手册目录8.4.44._sqrt...................................................................................................................................120 8.4.45._powf................................................................................................................................. 121 8.4.46._pow.................................................................................................................................. 122 8.4.47._modf................................................................................................................................. 123 8.4.48._frexp................................................................................................................................. 124 8.4.49._ldexp................................................................................................................................ 125 8.4.50._fdcmp............................................................................................................................... 126 8.4.51._dtof...................................................................................................................................127 8.4.52._ftod...................................................................................................................................128 8.4.53._dtol...................................................................................................................................129 8.4.54._altod.................................................................................................................................130 8.4.55._lltod............................................................................................................................... 1318.5. 密码算法类..........................................................................................................................1328.5.1._tdes_enc............................................................................................................................. 133 8.5.2._tdes_dec............................................................................................................................. 134 8.5.3._des_enc.............................................................................................................................. 136 8.5.4._des_dec.............................................................................................................................. 138 8.5.5._sha1_init............................................................................................................................ 140 8.5.6._sha1_update.......................................................................................................................142 8.5.7._sha1_final.......................................................................................................................... 143 8.5.8._rsa_enc.............................................................................................................................. 145 8.5.9._rsa_dec.............................................................................................................................. 148 8.5.10._rsa_sign........................................................................................................................... 150 8.5.11._rsa_veri............................................................................................................................ 152 8.5.12._rand..................................................................................................................................1558.6. 内存操作类..........................................................................................................................1578.6.1._mem_copy.......................................................................................................................... 157 8.6.2._mem_move......................................................................................................................... 158 8.6.3._mem_set............................................................................................................................. 159 8.6.4._mempool_init..................................................................................................................... 160 8.6.5._malloc................................................................................................................................ 161 8.6.6._calloc................................................................................................................................. 162 8.6.7._realloc................................................................................................................................ 163 8.6.8._free..................................................................................................................................... 164 8.6.9._invert..................................................................................................................................165 8.6.10._mem_cmp......................................................................................................................... 1668.7. 时间操作类..........................................................................................................................1678.7.1._set_timer............................................................................................................................ 167 8.7.2._start_timer......................................................................................................................... 168 8.7.3._stop_timer.......................................................................................................................... 169 8.7.4._get_timer............................................................................................................................170 8.7.5._time.................................................................................................................................... 172 8.7.6._mktime................................................................................................................................173 8.7.7._gmtime............................................................................................................................... 174- IV - 精锐IV产品开发手册目录8.8.宏和辅助函数......................................................................................................................1768.8.1._swap_u16........................................................................................................................... 176 8.8.2._swap_u32........................................................................................................................... 177 8.8.3.LE16_TO_CC...................................................................................................................... 178 8.8.4.LE32_TO_CC...................................................................................................................... 179 8.8.5.CC_TO_LE16...................................................................................................................... 180 8.8.6.CC_TO_LE32...................................................................................................................... 181 8.8.7.BE16_TO_CC...................................................................................................................... 182 8.8.8.BE32_TO_CC...................................................................................................................... 183 8.8.9.CC_TO_BE16...................................................................................................................... 184 8.8.10.CC_TO_BE32.................................................................................................................... 185 8.8.11._atod.................................................................................................................................. 186 8.8.12.DEFINE_AT...................................................................................................................... 1878.9. 8.10. 8.11. 9. 设备基本信息类..................................................................................................................188 系统函数错误代码索引 ..................................................................................................189 双精度浮点数边界条件 ..................................................................................................1908.9.1._get_gbdata......................................................................................................................... 188192 API 参考....................................................................................................................................... .......................................................................................................................................192 9.1. API 列表...............................................................................................................................1939.1.1. 9.1.2. 9.1.3. 9.1.4. 9.1.5. 9.1.6. 9.1.7. 9.1.8. 9.1.9. 9.1.10. 9.1.11. 9.1.12. 9.1.13. 9.1.14. 9.1.15. 9.1.16. 9.1.17.9.2. 附录 A. A.1.S4Enum......................................................................................................................... 194 S4Open......................................................................................................................... 196 S4OpenEx..................................................................................................................... 198 S4Close....................................................................................................................... 200 S4Control................................................................................................................... 201 S4CreateDir............................................................................................................... 206 S4CreateDirEx........................................................................................................... 208 S4ChangeDir................................................................................................................211 S4EraseDir................................................................................................................. 212 S4VerifyPin............................................................................................................... 213 S4ChangePin............................................................................................................... 215 S4WriteFile............................................................................................................... 217 PS4WriteFile............................................................................................................. 222 S4Execute................................................................................................................... 226 S4ExecuteEx............................................................................................................... 228 S4Startup................................................................................................................... 230 S4Cleanup................................................................................................................... 230错误代码索引......................................................................................................................231 233 密码算法使用说明.......................................................................................................... ..........................................................................................................233 密钥处理函数......................................................................................................................234A.1.1 A.1.2 A.1.3 A.1.4X_GenerateRsaKeys....................................................................................................234 R_GenerateRsaKeys....................................................................................................235 X_Pub2Cos................................................................................................................... 237 X_Pri2Cos................................................................................................................... 238-V- 精锐IV产品开发手册目录A.1.5 A.1.6A.2.X_Cos2Pub................................................................................................................... 239 X_Cos2Pri................................................................................................................... 240 RSAPublicEncrypt......................................................................................................241 RSAPrivateDecrypt....................................................................................................242 Sign............................................................................................................................. 243 Verify......................................................................................................................... 244 Digest......................................................................................................................... 245 DES............................................................................................................................... 246 TDES............................................................................................................................. 247密码算法函数......................................................................................................................241A.2.1 A.2.2 A.2.3 A.2.4 A.2.5 A.2.6 A.2.7A.3. 附录 B. 附录 C. C.1. C.2. C.3. C.4. C.5. C.6. C.7. C.8. 附录 D. 附录 E. E.1. E.2. E.3. E.4.错误代码索引......................................................................................................................248 249 硬件参数列表.................................................................................................................. ..................................................................................................................249 250 旧版系统函数.................................................................................................................. ..................................................................................................................250 _SHA1_FIRST_BLOCK................................................................................................................. 250 _SHA1_MID_BLOCK.................................................................................................................... 251 _SHA1_FINAL_BLOCK................................................................................................................. 252 _SHA1..................................................................................................................................... 253 _SHA1_FIRST........................................................................................................................... 254 _SHA1_MID.............................................................................................................................. 255 _SHA1_LAST.............................................................................................................................256 _SHA1_ONLY.............................................................................................................................257 258 系统函数索引.................................................................................................................. ..................................................................................................................258 260 设备驱动安装 API 参考.................................................................................................. ..................................................................................................260S4DRV_GETDRIVERINFO.............................................................................................................260S4DRV_INSTALL........................................................................................................................261 S4DRV_UNINSTALL.....................................................................................................................262 S4DRV_ISNEEDREBOOT............................................................................................................... 263- VI - 1. 产品介绍精锐 IV 是北京深思洛克软件技术股份有限公司开发的新一代软件加密锁,它是目前世 界上最安全的软件保护产品。 两种关键技术保证了软件保护真正的安全性: ? 程序代码保护您可以将 10,000 行左右的高级语言程序代码转移到精锐 IV 内部去执行, 这些被转 移的代码不会在计算机中留有任何痕迹, 也没有人可以获得这些代码的副本; 您的软件 将在两个系统上运行:一个是计算机,一个是精锐 IV。盗版被精锐 IV 保护的软件是不 可行的,因为精锐 IV 硬件不可能被复制。 ? 可靠的硬件基础不可复制、抵御攻击都是靠硬件的安全性来完成的,为此,精锐 IV 不仅采用了智 能卡技术,而且还选用了最好的智能卡芯片(通过 CC EAL5+的安全认证1) 。如果您仔细 研读了相关的安全标准,您就会发现精锐 IV 的硬件绝对值得信赖。 精锐 IV 首次在软件保护领域提出了“不可破解”的安全模型,可以从根本上杜绝盗版 从而最大程度保护软件开发者的经济利益。1.1.新的软件保护方法如果您曾经使用过其他类型的加密锁, 请尽量先忘掉那些加密锁的技术细节, 并仔细理 解本小节中提供的内容,因为这是一种先进的、全新的思想。如果您之前没有用过任何加密 锁的话,那只需要看看下面的图片,您会发现整个过程很容易理解。 请记住已经没有了“数据区” 、 “算法单元”等概念,这些都是老皇历了。现在您的加密 锁拥有一个完整的“操作系统” ,在这个系统中一切都是文件:可执行文件、数据文件以及 密钥文件;当然也可以有目录。您可以想象这就像是一个 MS-DOS 操作系统。 下面我们来看看软件保护是怎么完成的(图 1-1) 。图 1-1 精锐 IV 软件保护方法 1. 专心开发软件并完成测试工作,这时完全不必理会加密锁、软件保护技术;1这是一个很高的安全认证级别,详细细节您可以参考 ISO15408 标准的内容。 -1- 精锐IV开发手册产品介绍2. 在软件中找出一些相对重要的代码,通过精锐 IV 兼容的编译器,将这些代码编译 并写入到精锐 IV 内部; 3. 在软件中这些被“挖走”的代码的位置,加入对精锐 IV 的调用; 4. 软件运行时,这些被移植的代码将在精锐 IV 内部运行,并将结果返回给软件; 由于软件的一部分被移植到了精锐 IV 硬件内部,脱离精锐 IV 将使软件变得不完整, 从 而使破解被精锐 IV 保护的软件成为“无法完成的任务” 。 每个被移植的代码部分都可以在精锐 IV 内部成为一个独立的“可执行文件” , 当然也可 以将它们组合在一起。精锐 IV 目前最多可以提供 64K 字节的安全存储空间,文件的数量几 乎没有限制(文件头会占用一部分空间,所以过多的文件会造成存储空间的浪费) 。总计可 以移植的代码数量在 10,000 行左右,可以保护任意多个软件。注意:尽管代码的“移植”是精锐 IV 最主要的软件保护手段,但是这并不说明您需要完全丢弃原有的技术 策略, 在多数情况下它们是互为补充的。 不过请记住只有代码移植到精锐 IV 内才可以使您的软件真正安全。1.2.产品基本组成精锐 IV 不是一个简单的加密锁,您需要在它的操作系统2上开发软件中某些部分的“加 密锁”版本。这并不是一项艰难的任务,多数情况下只要简单修改代码就能使它们在精锐 IV 中运行, 因为精锐 IV 支持标准 C 语言编写的代码。 如果软件是通过其它高级语言开发的, 例如 Delphi,您需要用 C 语言来改写其中被移植的部分。尽管高级语言之间的 “翻译”工 作需要一些投入,但是如果“翻译”几百行代码就能够使您的软件彻底远离盗版,这项工作 绝对物有所值。在本文的后续部分,我们通常把移植到精锐 IV 内部的代码称为“精锐 IV 应用程序”或者“精锐 IV 可执行程序” 。 精锐 IV 产品由以下部分组成: ? ? ? 精锐 IV 开发工具包 精锐 IV 硬件设备 精锐 IV 用户运行时环境1.2.1.精锐IV开发工具包最重要的部分是精锐 IV 可执行程序的集成开发环境。精锐 IV 支持标准 C 语言开发, 任 何一款支持 MCS 51 或者 SmartXA 2 的编译器都可以用来开发精锐 IV 可执行程序。我们的 SDK 中包括了一个全功能的编译环境 Skit, 如果您更习惯于使用流行的开发工具, 我们推荐 您购买 Keil Software 公司的 C51 编译器或者是 Raisonance SA 公司的 RKit,您可以访问
获取关于这两种编译软件的信息。 一些工具软件也包含在开发工具包中,包括: ?2开发测试工具。协助开发、测试移植到精锐 IV 内部的代码,并可以简单管理设备;精锐 IV 内部的操作系统符合智能卡操作系统的国际标准, 您可以通过查阅 ISO7816 系列的标准来获取 “智 能卡操作系统”的相关知识。 -2- 精锐IV开发手册产品介绍? ?用户测试工具。可以分发给软件最终用户,协助解决可能出现的配置故障; 批量设置工具。高效率的加密锁批量初始化工具;您可以在开发工具包中找到很多范例代码,可以作为开发过程中的参考或者是样板。注意:关于编译器的更详细内容,请参考第五章“编译器使用说明” ;关于工具软件的更详细内容,请参考 第六章“工具软件使用说明” 。1.2.2.精锐IV硬件设备硬件设备是精锐 IV 可执行程序的运行环境和存储介质,完全基于智能卡技术开发,采 用 16 位、16MHz 的高性能 CPU。精锐 IV 主要提供 USB 接口设备类型,作为可选项,也可以 按标准智能卡的形式提供。精锐 IV 是一种高度集成化的产品,其所有器件(包括 CPU、RAM、 EEPROM 以及 USB 通讯模块)都集成在同一块智能卡芯片上面,这极大提高了产品的安全性 和稳定性。 每一个精锐 IV 设备都具有全球唯一的序列号, 该序列号在芯片生产的阶段就已经确定。1.2.3.用户运行时环境本文中的“用户”指的是最终的软件用户。 用户运行时环境主要是指精锐 IV 设备的驱动程序。精锐 IV 可以运行在两种模式下: 一 种是通过标准的 USB 驱动来访问设备,我们称之为标准模式;另一种是无驱动模式,这时它 将作为标准的 HID 设备被 Windows 操作系统识别。 在提供方便性的同时, 无驱动模式相比标 准模式要牺牲一些高级功能和通用性 (例如设备多进程访问) ,所以我们建议使用标准模式。1.3.重要的安全事项在软件保护工作开始之前,请务必确保您已经理解了本小节所提供的内容!1.3.1.口令精锐 IV 共提供了两个级别的口令:开发口令和用户口令(本文中口令有时也称为“PIN 码” ) ,通过不同级别的口令来获得不同的操作权限3。 开发口令共 24 字节,成功验证开发口令后,可以获得对精锐 IV 设备的设置权。尽管拥 有开发口令并不能直接读出精锐 IV 硬件内部的数据,但是开发口令泄露仍然会严重威胁精 锐 IV 内 部 数 据 的 安 全 。 精 锐 IV 在 初 次 使 用 时 , 其 默 认 的 开 发 口 令 为 “” (0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38) 。在发行精锐 IV 之前,务必将其修改为一个秘密值。操作权限有时也称为“安全状态” ,如果硬件设备被重置、断电,则操作权限将丢失。例如,当计算机休 眠后,尽管重新启动后软件可以继续运行,但由于 USB 端口有断电过程,所以加密锁的操作权限将丢失, 从而导致软件操作加密锁失败。3-3- 精锐IV开发手册产品介绍用户口令共 8 字节, 其默认值为“ ” ( 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38) 。 成功验证用户口令仅能获得对精锐 IV 设备的“调用权” ,即可以调用精锐 IV 内部的可执行 程序,但不能访问其它的文件如数据文件。原则上用户口令没有“安全性”问题,您可以用 它来简单检查是否是属于您的加密锁。 下面是一些跟口令相关的重要安全细节: ? 无论是开发口令还是用户口令,都是针对精锐 IV 内部的目录,而不是针对特定 的精锐 IV 设备,每个目录都包含自己的开发口令和用户口令。目录之间的安全 属性是独立的,因此,修改了根目录的口令并不意味着子目录的口令同时得到 修改,获得了根目录的权限也不会自动获得子目录的相应权限。这一特性可以 使多个不相关的软件被同一个加密锁保护并互相不产生干扰和威胁。但是删除 根目录会导致子目录的内容同时被删除。 除非必要,我们不建议使用多级目录以避免产生管理上的混乱。 关于目录的详细介绍,请参考下一节“文件系统” 。 根目录的开发口令连续 15 次错误重试,会将硬件设备锁定;一旦锁定后将没有 任何办法可以恢复。所以需要妥善保管加密锁的开发口令,切记深思洛克并不 能恢复您的口令或者对设备进行解锁,这是为了最大程度保证您的安全性。 子目录开发口令错误重试仅会导致该目录锁定,但仍然可以通过擦除上级目录 的方法将其删除。 用户口令无论重试多少次都不会导致锁定。 每次重新初始化文件系统,例如删除并重建根目录、清空子目录时,目录的两 级口令都会恢复为默认值,所以重新初始化文件系统后一定要记得将开发口令 修改为一个秘密值。?? ?1.3.2.文件系统了解一些文件系统的安全性细节会有助于构造更安全的保护方案。 精锐 IV 支持“目录-文件”结构。精锐 IV 内部的存储空间按照目录的方式进行管理, 下面是精锐 IV 目录的一些关键特征: ? ? 有且只有一个根目录,目录下面可以有子目录,但最多不能超过三级; 建立目录必须指定目录所占用的空间, 目录一旦建立后其大小不能更改; 根目录占 用硬件所有的存储空间; 根目录可以被删除,删除根目录将同时删除目录中包含的所有内容,例如子目录、 文件; 任何目录的父目录,兄弟目录和子目录的目录 ID 不能重名。 子目录只能被清空, 而不能被直接删除。清空子目录将删除该目录中所包含的所有 内容,例如子目录、文件。子目录清空后,其开发级口令、用户级口令都将恢复为-4-?? ? 精锐IV开发手册产品介绍默认值。 如果要彻底删除子目录以释放其占用的空间, 必须清空/删除其上级目录; ? 网络锁只支持根目录。在精锐 IV 内部,通常会使用到三种文件:可执行文件、数据文件、密钥文件,任何一 种文件都不可能直接从硬件中被读出,验证开发口令后可以创建和修改文件。 ? 可执行文件可执行文件是一种可以在精锐 IV 内部操作系统上被加载并运行的文件格式,软件 加密过程中所移植的代码会被编译成可执行文件。可执行文件分为两种: VM 可执行文 件(或者称为普通可执行文件)与 XA 可执行文件,对应于两种不同的运行模式。关于 运行模式的详细说明,请参考第四章“开发精锐 IV 代码” 。XA 可执行文件只被硬件版 本 2.3 及以上的精锐 IV 支持,其运行效率比 VM 可执行文件要高,但是在精锐 IV 上的 通用性要差一些。通过运行产品包中提供的工具软件,您可以获取精锐 IV 的硬件版本 号。 可执行文件通过硬件内部的系统函数可以操作其它的同目录文件, 例如读写数据文 件。对于操作可执行文件,情况稍微有些复杂:可执行文件并不一定可以被其他可执行 文件读写,这取决于它自身的安全属性(参看表 1-1) 。 ? 数据文件数据文件仅用于存放二进制数据。计算机中的程序不能直接从精锐 IV 中将数据文 件读出。 要访问精锐 IV 内部的数据文件, 您必须通过精锐 IV 内部的可执行程序来完成。 ? 密钥文件目前只有 RSA 密钥文件被支持,您可以查阅第八章“系统函数参考”来获取更详细 的信息。 我们将精锐 IV 内部常用文件的安全属性总结如下: 表 1-1 精锐 IV 文件安全属性开发级 (验证开发口令) 不可读写 可执行文件 数据文件 密钥文件 内部可读写 W W W W 用户级 (验证用户口令) E E N N 内部 (内部可执行文件) N R/W R/W WR:ReadW:WriteE:ExecuteN:None对于精锐 IV 内部操作文件时所涉及的安全属性,有更详细的规定,细节请参看第八章 “系统函数参考”中有关文件操作部分。 精锐 IV 内部的文件通过一个 16 位(2 字节)的无符号整数进行标识,部分标识符被系 统保留,这些保留的文件标识符包括:0x5,0x8,0x001e,0x3f00, 0x3f01,0x3f02,0x3f03,0x3f04。-5- 精锐IV开发手册产品介绍1.4.更多的功能精锐 IV 内部包含了 RSA (1024 位) 、 DES/TDES 密码算法的硬件协处理器, 并提供了 SHA-1 算法功能和硬件真随机数发生器。 以这些密码学功能为基础, 深思洛克提供了远程升级和销 售管理的平台,被精锐 IV 保护的软件可以通过互联网完成软件的收费升级,并借此实现对 软件销售渠道的管理。 深思洛克开放远程升级的底层技术细节, 您可以通过深思洛克提供的 底层技术来构造自己的远程升级和销售管理平台。 利用精锐 IV 的这些密码学算法,您还可以用来登录 Windows 操作系统、加密解密邮件 以及完成各种复杂的网络安全功能。-6- 2. 产品安装本章节将指导您如何安装精锐 IV 的 SDK。2.1.系统需求要使用精锐 IV 的 SDK,建议您使用一台运行 Windows 98、Windows2000 或更高版本操 作系统的 PC。如果在 NT4 下安装,您需要先安装 Service Pack 4、IE4.0 或更高版本。 精锐 IV 支持 Microsoft Windows、Linux 及 Mac OS X,您可以在上述操作系统上使用 精锐 IV 设备。2.2.SDK安装将 光 盘 放 入 光 驱 , 如 果 安 装 程 序 没 有 自 动 启 动 , 请 运 行 精 锐 IV SDK 光 盘 中 的 Windows\Setup.exe 程序,并根据安装向导的提示完成安装。 安装完成后,目标目录将包含以下内容:子目录 内容 精锐 IV 的 API 函数。 产品开发手册以及其它说明文档。 硬件设备驱动,关于驱动程序安装的细节,请参考第 2.2.1 节“关于设备驱动程序 安装的说明”及附录 E“设备驱动程序安装 API 参考” 。API Docs Drivers IDE Samples Tools Support深思洛克提供的使用其它开发工具(如 Keil C51)时所需要的支持库。 精锐 IV 硬件系统函数库,详细信息请参考第八章“系统函数参考” 。 范例代码,包括基本的操作示范以及应用案例源代码。 各种工具软件,关于工具软件使用的详细信息,请参考第六章“工具软件使用说明” 。 各种辅助资源,如密码算法库、系统诊断工具。详细内容请参考附录 A“密码算法使 用说明” 。2.2.1.关于设备驱动程序安装的说明安装 SDK 的过程会自动安装精锐 IV 的设备驱动程序,在一些情况下您可能需要单独安 装驱动程序(例如将整个 SDK 复制到其它计算机中直接使用、发布您的软件) ,这时候您需 要使用 SDK 中提供的驱动程序安装工具。 该工具位于%SDK%\Drivers 目录下,名称为“InstWiz3.exe” 。这是一个 WIN32 可执行 程序,可以接受以下命令行参数: ? ? ? /INSTALL /UNINSTALL /NOGUI 安装驱动程序(该选项为默认选项) 卸载驱动程序 不显示安装界面这些命令行参数可以组合使用,例如,您可以运行“InstWiz3.exe /uninstall /nogui” 来隐式卸载设备驱动。-7- 精锐IV开发手册产品安装注意:InstWiz3.exe 不能单独执行,InstWiz3.exe 同目录下必须包含 mkSetup.dll、 language.dll、win98 目录、winlh64 目录、winlh86 目录、winxp64 目录、winxp86 目录等 全部内容,并保持原有的目录结构。 该 工 具 也 可 以 用 来 检 测 当 前 系 统 中 精 锐 IV 设 备 驱 动 程 序 的 安 装 情 况 : 运 行 InstWiz3.exe,工具将自动检测并汇报驱动程序的安装情况。 有几种办法可以测试驱动程序是否安装成功: 1. 插入精锐 IV 设备,检查硬件设备列表中是否出现正常的 Senselock SenseIV v2.x 设备( “设备管理器”?“智能卡阅读器”下) ;对于 Windows98、Window2000 或更 高版本,如果设备是第一次插入,系统会自动提示“找到新设备”并完成安装; 插入精锐 IV 设备,运行开发测试工具或者用户工具,看是否能成功访问设备;2.如果您对设备驱动程序的安装过程非常熟悉,您也可以选择手工的方式安装精锐 IV 设 备驱动。%SDK%\Drivers\Obj 目录下面包含了手工安装驱动程序所需要的文件和说明。 如果您希望通过 API 自己完成设备驱动程序的安装,请参考附录 E“设备驱动程序安装 API 参考” 。 精锐 IV 设备驱动程序已经通过微软徽标认证(Designed for Windows XP) ,详细情况 请连接 /,并查询产品 SenseIV。2.3.SDK卸载在“控制面板”?“添加/删除程序”中可以直接卸载 SDK,删除 SDK 的过程会自动删 除精锐 IV 设备驱动程序。-8- 3. 开始使用本章将通过一个范例将向您展示如何向精锐 IV 内部移植一部分代码,这个范例可以使 您大致了解使用精锐 IV 保护软件的全过程。 完整的范例可以在%SDK%\samples\bubblesort demo 目录下找到。3.1.示例软件为了使过程看起来更易于理解,我们选择了一个简单的示例程序:冒泡排序算法。在移 植之前,整个软件代码如下:#include &stdlib.h& #include &stdio.h& #include &conio.h& /*bubble sort function*/ void bubble_sort(unsigned char *p, int len) { int i,j; for (i=0;i&len-1;i++) { for (j=0;j&len-i-1;j++) { if (p[j] & p[j+1]) { tmp = p[j]; p[j] = p[j+1]; p[j+1] = } } } } /*main procedure*/ void main() { unsigned char test[] = {4,3,8,2,9,7,1,5,0,6}; int len = sizeof(test); bubble_sort(test, len);-9- 精锐IV开发手册开始使用printf(&result:\n&); for (i=0;i&i++) { printf(&%d &,test[i]); } }在 Microsoft Visual C++ 6 中 新 建 一 个 WIN32 控 制 台 程 序 工 程 ( Win32 Console Application ) , 将 上 述 代 码 添 加 到 VC6 工 程 中 。 本 例 中 , 我 们 假 定 将 工 程 保 存 为 C:\s4demo\Win32\demo1.dsp,上述代码保存为 C:\s4demo\Win32\pc_demo1.c,编译并运行 上面的代码会得到如下输出结果:result: 9 8 7 6 5 4 3 2 1 0我们假定软件中的排序算法是一段需要保护的代码,并把它移植到精锐 IV 的内部。3.2.代码移植在代码移植之前,您需要选择一款精锐 IV 支持的编译器,本范例中选用 Keil C514。 本 章节仅对 Keil C51 编译器软件的配置进行必要的说明,关于编译器软件使用的更详细信息, 请参考第五章“编译器使用说明” 。3.2.1.创建一个精锐IV工程运行 Keil ?Vision,在菜单中选择“Project”?“New Project…” ,将该工程命名为 “Demo1.uv2” ,并保存在磁盘上,本例中假定工程保存为“C:\s4demo\Demo1.uv2” 。 接下来?Vision 会提示您选择设备类型, 在“ Data Base ”列表中选择“ Intel ”?“ 8052AH” 。 现在一个空白的工程就创建完了。为了使该工程能够被精锐 IV 支持,还需要作一些额外的 配置。 在菜单中选择“Project”?“Options for Target ‘Target1’” ,在“Target”选项 页中,设置“Memory Model”为“Large: variables in XDATA” ;切换到“Output”选项页, 选中“Create Hex File” 。3.2.2.编写精锐IV代码现在我们可以向工程中增加移植代码。 新建一个 C 文件, 命名为 demo1.c, 将 pc_demo1.c 中的 bubble_sort()函数复制到 demo1.c 中, 并增加精锐 IV 的 main()函数, 完整的 demo1.c 的内容如下:#include “ses_v3.h”4本章的范例代码与编译器无关,可以在任何一款精锐 IV 支持的 C 编译器上编译通过。 - 10 - 精锐IV开发手册 /*bubble sort function*/ void bubble_sort(unsigned char *p, int len) { int i,j; for (i=0;i&len-1;i++) { for (j=0;j&len-i-1;j++) { if (p[j] & p[j+1]) { tmp = p[j]; p[j] = p[j+1]; p[j+1] = } } } } /*EliteIV main procedure*/ void main() { unsigned char *test = pbInB int len = bInL bubble_sort(test, len); _set_response(len,test); _exit(); }开始使用上面的代码经编译后可以在精锐 IV 内部运行。在开始编译工作之前,我们对代码进行 简要的解释。 这段代码的功能是:将从 PC 端接收的数据以及数据长度(字节数) ,交给精锐 IV 内的 bubble_sort()函数处理,并将处理结果返回给 PC。pbInBuff 和 bInLen 是两个预定义的宏,前者指向通讯缓冲区,即由 PC 传递来的数据; 后者表示所传递数据的长度。bubble_sort()函数的代码与 pc_demo1.c 中完全一样,这是精锐 IV 一个非常重要的特 性:支持标准 C 代码的移植。 _set_response()和_exit()是两个精锐 IV 系统函数,前者用于将数据传送到 PC,后者 的功能是从精锐 IV 应用程序中返回。 关于这两个系统函数的更详细说明, 请参考第八章 “系 统函数参考” 。- 11 - 精锐IV开发手册开始使用为了方便起见,将 demo1.c 保存到 C:\s4demo 目录下。3.2.3.编译测试精锐IV代码在修改 PC 端代码(pc_demo1.c)之前,您可以先编译并测试刚才编写的精锐 IV 代码。 在刚才创建的工程中,选择菜单“Project”?“Components, Environment and Books” , 在对话框中点击“Add Files”将 demo1.c 添加到工程中;同时,将精锐 IV SDK 中提供的 “Ses51L.lib”添加到工程中5。 选择菜单“Project”?“Build target”编译代码,如果编译成功,将在 C:\s4demo 目录下生成 demo1.hex 文件,该文件就是代码的编译结果。 现在您可以测试或者调试精锐 IV 代码, 关于测试和调试技术的细节, 请参考第四章 “开 发精锐 IV 代码”和第五章“编译器使用说明” 。3.2.4.下载代码到精锐IV硬件将 精 锐 IV2.3 版 连 接 到 计 算 机 上 , 运 行 SDK 中 提 供 的 的 “ 开 发 测 试 工 具 ” (%SDK%\Tools\Devtest.exe) ,如果正确安装了设备驱动程序,工具将显示所连接设备 的 ID 号(与全球唯一序列号并不一定相同) 。点击“重新连接”可以查看硬件的详细信息,如 图 3-1 所示。图 3-1 精锐 IV 开发测试工具――硬件信息显示 为了测试方便,我们首先将设备重新初始化,点击“重置设备”重建精锐 IV 内部的文 件系统。我们假设将前面编译的 demo1.hex 文件下载到根目录下,文件 ID 为 0xd001。点击 “下载文件” ,并按照图 3-2 填写文件信息。5建议将 ses51L.lib 和 ses_v3.h 两个文件复制到工作目录下,即本例中的 C:\s4demo。 - 12 - 精锐IV开发手册开始使用图 3-2 下载文件到硬件 软件会自动计算所需创建的文件大小, 本例中文件至少需要 398 字节。 您也可以输入一 个更大的值,这样当文件扩大时,所创建的文件仍然可以使用。如果要往已经存在的文件中 写入数据,则需要选中“覆盖原文件”框。3.2.5.修改PC代码由于 bubble_sort()函数已经被移植到了精锐 IV 内部,我们在 pc_demo1.c 中将其注释 掉或者删除;同时,将 main()函数中对 bubble_sort()的调用部分修改为对精锐 IV 内部代 码的调用。修改后的 pc_demo1.c 内容如下:#include &stdlib.h& #include &stdio.h& #include &conio.h&#include “sense4.h”/*bubble sort function removed. Add EliteIV invoking code. */void call_sense4(char *, unsigned char *, int);/*main procedure*/ void main() { unsigned char test[] = {4,3,8,2,9,7,1,5,0,6}; int len = sizeof(test);call_sense4(“d001”, test, len);- 13 - 精锐IV开发手册 printf(&result:\n&); for (i=0;i&i++) { printf(&%d &,test[i]); } }开始使用void call_sense4(char *fid, unsigned char *buff, int len) { /* See remarks for details.*/ } 红色加粗、大号的文字表示对原内容进行的修改,共三部分: ? 增加对精锐 IV 硬件设备的访问支持,包括头文件(sense4.h)和相应的 API 函 数库(sense4.lib+sense4.dll 或 sense4st.lib) 去掉被移植代码在软件中的副本,增加精锐 IV 调用函数 call_sense4() 增加对精锐 IV 内部代码的调用,完成被移植代码的功能? ?为了阅读方便,上面的代码中省略了 call_sense4()函数的实现过程,您可以在下面的 备注中找到该函数的细节信息。可以看到,main()函数仅有一处修改。备注:关于 call_sense4()函数 在本例中, call_sense4()函数的功能是: 运行精锐 IV 内部 ID 为 0xd001 的可执行程序, 将 test 和 len 作为输入数据,并将运算结果保存在 test 中。call_sense4()并不是 SDK 中提供的通用 API 函数,它是对标准 API 的一组封装,目的是为了提高范例代码的易读性。 事实上,要执行精锐 IV 内部的可执行程序,标准的访问过程应该是:列举设备?打开指定设备 ?选择目录?验证用户口令?执行…?执行?关闭设备?释放资源。我们不建议您在正式的软 件中使用这个函数进行设备访问,关于设备访问的细节和建议方法,请参考第九章“API 参考” 和第四章“开发精锐 IV 代码” 。 call_sense4()函数的源代码: void call_sense4(char *fid, unsigned char *buff, int len) { SENSE4_CONTEXT ctx = {0}; SENSE4_CONTEXT *pctx = NULL; unsigned long size = 0; unsigned long ret = 0; S4Enum(pctx, &size); if (size == 0) {- 14 - 精锐IV开发手册 printf(&EliteIV not found!\n&); } pctx = (SENSE4_CONTEXT *)malloc(size); if (pctx == NULL) { printf(&Not enough memory!\n&); } ret = S4Enum(pctx, &size); if (ret != S4_SUCCESS) { printf(&Enumerate EliteIV error!\n&); free(pctx); } memcpy(&ctx, pctx, sizeof(SENSE4_CONTEXT)); free(pctx); pctx = NULL; ret = S4Open(&ctx); if (ret != S4_SUCCESS) { printf(&Open EliteIV failed!\n&); } ret = S4ChangeDir(&ctx, &\\&); if (ret != S4_SUCCESS) { printf(&No root directory found!\n&); S4Close(&ctx); } ret = S4VerifyPin(&ctx, &&, 8, S4_USER_PIN); if (ret != S4_SUCCESS) { printf(&Verify user PIN failed!\n&); S4Close(&ctx);开始使用- 15 - 精锐IV开发手册 } ret = S4Execute(&ctx, fid, buff, len, buff, len, &size); if (ret != S4_SUCCESS) { printf(&Execute EliteIV exe failed!\n&); S4Close(&ctx); } S4Close(&ctx); }开始使用将 SDK 中的 sense4.h 和 sense4st.lib 复制到 c:\s4demo\win32 目录下, 并添加到工程 pe_demo1.dsp 中,重新编译 VC6 工程。3.2.6.测试保护结果经过前面的步骤,我们已经完成了对示例代码的保护工作。将设置好的精锐 IV 加密锁 插入计算机,运行重新编译过的示例软件,可以得到正确的输出结果:result: 9 8 7 6 5 4 3 2 1 0移除精锐 IV 加密锁,再次运行示例软件,会得到错误提示信息。EliteIV not found! result: 4 3 8 2 9 7 1 5 0 63.3.程序结构分析在 示 例 程 序 被 保 护 之 前 , 代 码 包 含 两 个 主 要 的 函 数 : 主 函 数 main() 和 函 数 bubble_sort();被保护之后,全部的代码包含四个主要的函数:主函数 main()、设备访问 函数 call_sense4()、精锐 IV 内主函数 main()、精锐 IV 内函数 bubble_sort()。图 3-1 说 明了它们之间的关系。- 16 - 精锐IV开发手册开始使用Unprotected Version main() main()Protected Versionbubble_sort()call_sense4()EliteIVexitEliteIV main()bubble_sort()exit图 3-1 示例程序保护结构 可以看出, 被保护后的代码就像是采用了 Client/Server 结构, 精锐 IV 相当于一个 “服 务” ,而 call_sense4()函数和精锐 IV 内 main()函数则充当了通讯的角色。- 17 - 4. 开发精锐IV代码在上一章中您了解到,开发精锐 IV 应用包含两方面的工作:编写加密锁内部代码以及 编写 PC 端软件代码以访问精锐 IV。本章将指导您如何编写精锐 IV 内部的代码、对代码进 行测试以及通过 API 操作精锐 IV 设备。4.1.编写精锐IV内部代码编写精锐 IV 内部代码需要对 C 语言的基础知识有所了解,如果您曾经在 PC 上作过 C 程序的开发,本节的内容将非常容易理解。开发精锐 IV 所使用的 C 语言非常简单,不需要 一个专门的 C 程序员。 在第一章中,我们介绍过精锐 IV 内部有两种不同的可执行文件:VM 可执行文件和 XA 可执行文件。 这两种可执行文件分别对应于两种不同的运行模式: 虚拟机模式和用户模式 (本 文中也称 VM 模式和 XA 模式) 。 使用 Keil C51 和我们提供的 Skit 所编译的代码属于 VM 文件; 使用 Raisonance Rkit 编译的代码属于 XA 文件。为了说明方便,我们将 XA 文件和 VM 文件 统称为内部可执行文件,简称 EXF(internal Executable File) 。 采用不同的编译器/运行模式,对源代码的要求有一些细微的差别,详细内容请参考第 五章“编译器使用说明” 。我们尽可能使本节的范例代码与运行模式无关,与运行模式相关 的部分将进行特殊说明。4.1.1.代码结构典型的精锐 IV 内部代码结构如下:#include “ses_v3.h” void foo() { /* function code here. */ } void main() { /* initialization code here. */ foo(); _exit(); }代码是一个标准 C 语言的程序结构,由一个主函数 main()和若干个子函数构成。主函 数是程序的入口点,代码将从这里开始执行。其它内容说明如下: ? #include “ses_v3.h”- 18 - 精锐IV开发手册开发精锐IV代码ses_v3.h 包含了精锐 IV 系统扩展服务的定义, 您必须在所有的代码中包含该文件。 系统扩展服务(SES,System Extention Service,本文中也称为精锐 IV 系统函数) 提供了常见的系统功能,如文件操作、时钟操作、输入输出等等。所有系统函数都 是以下划线“_”开头,关于 SES 的详细说明,请参考第八章“系统函数参考” 。? 程序终止 您可以在程序的任意部分加入系统函数_exit()来终止程序的执行。注意在主函数 中使用 return 语句并不能保证程序的安全退出, 必须使用_exit()系统函数, 这一 点与标准 C 有所不同。4.1.2.输入与输出编写精锐 IV 内部代码的目的是为了给运行在计算机上的软件提供功能服务,从而达到 保护软件的目的。他们之间的通信是通过“通讯缓冲区”来完成的。通讯缓冲区是精锐 IV 硬件内部一块特殊的内存区域, 不论是计算机传送给精锐 IV 的数据还是精锐 IV 传送给计算 机的数据,都将被保存在通讯缓冲区中。 在精锐 IV 的 ses_v3.h 中定义了两个宏以接收通讯缓冲区数据。一个是 pbInBuff,这 是一个指向通讯缓冲区的字节类型指针;另一个是 bInLen,这是一个单字节的整数,表示 从计算机传送过来的数据长度。根据精锐 IV 内部资源的限制,该通讯缓冲区的大小不能超 过 250 字节,也就是说, 每次从计算机传送给精锐 IV 或者从精锐 IV 传送给计算机的数据都 6 不能大于 250 字节 。如果要传输大于 250 字节的数据需要将数据分块多次传输,实现方法 请参考本章中的“内存共享” 。 当数据需要从精锐 IV 传送到计算机时, 必须使用系统函数_set_response()。 系统函数 _set_response()会在程序终止的时候自动将数据复制到通讯缓冲区以便于计算机接收。注 意只有最后一个_set_response()函数调用有效,之前的设置会被覆盖。 下面的范例说明了如何在计算机和精锐 IV 之间传递数据。#include “ses_v3.h” #include “string.h” unsigned char output[256]; unsigned char input[256]; void main() { int input_len = bInL int output_len = 0; memcpy(input, pbInBuff, input_len); /* Operate input data here… */6目前的版本中,当数据从精锐 IV 向计算机传递时,该值可以最大为 252,但不保证以后的版本仍然可以。 - 19 - 精锐IV开发手册开发精锐IV代码/* If we get some output data… */ _set_response((unsigned char)output_len, output); _exit(); }范例中使用了 C 函数 memcpy(),该函数定义在 string.h 中。通讯缓冲区本身也是内存 的一部分,所以您既可以将其中的内容复制到别的地方,也可以直接对它进行操作。4.1.3.内存结构精锐 IV 内部提供超过 2K 字节的内存空间7,这一点与 PC 中差距很大,在开发过程中您 需要谨慎使用以避免造成溢出。 内存结构是比较复杂的一个问题, 跟选用的编译器关系很大, 本节限于篇幅也未能说明 所有的问题。如果您感觉理解精锐 IV 的内存结构比较困难,可以不关心下面的细节而直接 参考本小节末尾的“代码编写建议” 。1.内存分配在 VM 模式下, 内存将被分为两个部分: 内部 RAM( internal RAM )和外部 RAM( external RAM) 。 内部 RAM 共 256 字节, 而外部 RAM 可达 2K 字节。 有些编译器的编译结果会将内部 RAM 用作堆栈,所以一般情况下应尽可能使用外部 RAM 以避免造成溢出。在代码中,分别以关键 字 idata 和 xdata 标识内部 RAM 和外部 RAM,例如:x i将变量 x 定义在外部 RAM,而将变量 i 定义在内部 RAM。 您不需要总是显式的使用这两个关键字来定义变量,编译器可以使用默认值。例如, 如 果将编译模式设置为 Large(这是我们建议的模式) ,所有未经特殊说明的变量都会定义在 外部 RAM;这时如果需要在内部 RAM 定义变量,则需要显式的使用关键字 idata。 XA 模式没有内部 RAM 和外部 RAM 之分。 通讯缓冲区是一块特殊的内存, 在 VM 模式和 XA 模式下,通讯缓冲区的内存地址有所不 同。 内存结构如图 4-1 所示:0…………………. 内部 RAM0xFF0…………………… 0x7FF 外部 RAM0x800 0x8001……….. 0x8FA 通讯 数据 通讯缓冲区7不同的运行环境下(选择不同编译器) ,其可用内存的大小略有差异,具体数值请参考附录 B。 - 20 - 精锐IV开发手册开发精锐IV代码长度 a. VM 模式内存结 构0 ……………………………………………0x7FF无效0x1.............0x10FA 通讯 数据 长度 通讯缓冲区RAMb. XA 模式内存结构 图 4-1 精锐 IV 内存结构 关于编译模式设置的问题,请参考第五章“编译器使用说明” 。2.内存共享对于 VM 模式,除非对精锐 IV 进行重置(例如断电或者使用 S4Control()函数发送 COTROL_RESET_DEVICE 控制字) ,否则精锐 IV EXF 执行完毕后,系统不会自动清除外部 RAM 的内容,而内部 RAM 的内容则每次都会被清除。对于 XA 模式,所有内存不会被自动清除。 利用这一特性,我们可以把“不自动清除”的内存用作“共享内存” 。这样既可以在不 同 EXF 之间分享数据,也可以用于多次调用之间缓存数据。 例如,如果精锐 IV 内部的一个程序需要从计算机接收超过 250 字节的数据,可以通过 下面类似的例程完成:#include “ses_v3.h” typedef struct { u unsigned char buff[1]; } IO_PACKAGE; DEFINE_AT(unsigned char, big_buff[512], 0x400, RAM_EXT); IO_PACKAGE *input = NULL; void main() { input = (IO_PACKAGE *)pbInB LE16_TO_CC(&input-&len); - 21 - 精锐IV开发手册开发精锐IV代码if (input-&len != 0) { memcpy(big_buff + input-&offset, input-&buff, input-&len); _exit(); } /* now got enough data and you can add operations here… */ _exit(); }代码中我们使用了两个宏:DEFINE_AT 和 LE16_TO_CC,前者可以在指定的内存区域的指 定地址定义一个变量, 后者的作用将在后面 “Big-Endian 和 Little-Endian” 的论题中解释, 暂时您可以认为它没有任何用处。本例中,我们在外部内存的 0x400 地址定义了一个 512 字节的 unsigned char 类型数组。 另外我们声明了一个结构体,其中 offset 用于指定本次输入的数据保存在 big_buff 变量的位置,len 表示本次传入数据长度,而 buff 则保存

我要回帖

更多关于 中美检测场营业时间 的文章

 

随机推荐