上海中基国威电子股份有限公司 Shanghai Sinomicon Electronics Co., Ltd. WinScope IDE 使用说明 WinScope IDE 上海中基国威电子股份有限公司 SHANGHAI SINOMICON ELECTRONICS CO., LTD 2022 年 1

Size: px
Start display at page:

Download "上海中基国威电子股份有限公司 Shanghai Sinomicon Electronics Co., Ltd. WinScope IDE 使用说明 WinScope IDE 上海中基国威电子股份有限公司 SHANGHAI SINOMICON ELECTRONICS CO., LTD 2022 年 1"

Transcription

1 WinScope IDE SHANGHAI SINOMICON ELECTRONICS CO., LTD 2022 年 1 月 28 日 声明 : 本软件为研制并使用, 公司保留对产品在可靠性 功能和设计方面的改进作进一步说明的权利 本文档的更改, 恕不另行通知 版权所有 1 / 69

2 目 1 录 WinScope IDE 的简介 概述 组成 开发流程 WinScope IDE 的安装与配置 安装要求 安装 WinScope IDE 的界面 窗口 菜单的说明 文件菜单 编辑 查看菜单 项目管理菜单 调试菜单 工具菜单 帮助菜单 右键菜单 WinScope IDE 项目管理 项目窗口 新建项目 打开已有项目 MCU OPTION 值设置 编译项目 WinScope IDE 调试 WinScope IDE 调试 启动/停止调试 断点 禁止断点且运行 复位 全速运行 停止运行 运行到光标处 步进 步越 步出 放置/移除断点 禁止/允许断点 禁止所有断点 清除所有断点 观察调试信息 寄存器窗口 特殊功能寄存器窗口 可读写数据存储窗口 SN-Link 仿真器 版权所有 2 / 69

3 5.1 SN-Link 仿真器的构成 各型号 EV 板说明 P P P P P P P P SM110X SM111X SM112X SM113X SM511X SM512X WinScope IDE 快速开发实例 建立项目 代码编辑 编译 生成代码 进入调试模式 项目后续工作 RISC 汇编器介绍 汇编器语法 标号 Lable 助记符(Mnemonic) 伪指令(Directive) 操作数 参数和注释 常量表示 数字常量 字符常量 表达式语法和运算 整数表达式 运算符 伪指令 RISC C 语言开发与调试 项目建立 版权所有 3 / 69

4 8.2 添加文件 乘除法使用说明 RISC C 使用注意事项 编译说明 数据类型长度 Bit 变量的定义和使用 Sbit 数据类型的声明 中断函数的声明 内嵌汇编 暂不支持 函数使用说明 附录一 RISC 指令集 附录二 win 8.1 强制禁用数字签名方法 附录三 SM112X 芯片仿真 SM110X 说明 版权所有 4 / 69

5 1 WinScope IDE 的简介 1.1 概述 WinScope IDE 集成开发环境(以下简称 WinScope 或 WinScope IDE)是上海中基国威电 子股份有限公司为开发 SINOMICON 单片机产品而开发的一个可实时仿真的专用开发平台 让 用户在开发和使用上更加的便捷 WinScope IDE 提供好友的视窗界面 以便于进行程序的编辑 编译及除错 同时配合我们自主研发的 SN-Link 仿真器 提供了对 MCU 的多种实时仿真功能 包括 Trace 跟踪 步进(StepIn) 步越(StepOver) 步出(StepOut) 断点设定等功能 WinScope IDE 开发平台提供即插即用的 USB 接口 并通过网格检测不定期更新软件服务包 通过免开壳 在线升级仿真器 以保证设计者可以拥有功能齐全 版本最新的开发工具 以提高产品应用方案 的开发效率 图 1 WinScope IDE 界面 WinScope IDE WinScope Integrated Development Environment 主要的组件是 SNLink 仿真器 它提供了上海中基 OTP 系列单片机的实时仿真功能 不同的 MCU 型号通过外接 的 EV 小板而定 该开发坏境可以完成从项目的建立和管理 编译 目标代码的生成 到仿真等 完整的开发流程 WinScope IDE 开发平台具主要有以下功能特点 硬件 USB 接口 方便与 PC 连接 USB 供电 应用板功率小于 100MA 时无需外部单独供电 仿真器内部提供可调的振荡器频率 一般无需外接晶振 支持最多 15 个硬件断点 版权所有 5 / 69

6 实时显示单片机运行状态 同时支持公司现有 SM11 SM51 系列单片机仿真 软件 : 友好的视窗软件界面, 免除开发环境的熟悉周期 工程项目管理可以随时添加或删除项目文件 功能强大的代码编辑器有效提高编程速度 提供智能提示, 代码折叠, 关键字高亮显示 编辑器提供快速查找替换, 正则表达式查找功能 支持源代码级调试仿真 RISC 内核单片机支持多个源文件, 程序模块化 RISC 内核单片机支持建立自己的库文件, 头文件 编译出错行号提示和自动建立连接对应 仿真过程中可以随时修改 RAM,REG 等参数 1.2 组成 WinScope IDE 的组成如表 1.1 所示 功能组成 界面组成 模式组成 项目管理 程序编辑器 编译及目标代码生成 程序调试 硬件仿真器 标题栏 菜单栏 右键菜单 工具栏 窗口 状态栏 编辑模式 调试模式 编辑模式与调试模式 : 编辑模式是用于维护文件 编写程序的, 调试模式是在连接好硬件仿 真器后, 用来仿真调试程序的 1.3 开发流程 使用 WinScope IDE 进行单片机开应用开发的步骤如下 : 新建项目, 选择芯片型号, 保存路径, 设置配置选项新建 ASM/C 文件并添加到工程打开 ASM/C 文件, 进行代码编辑编译和构建 ( 链接 ) 工程纠正程序中书写和语法错误, 并重新编译连接连接仿真器, 下载程序到仿真器, 进入仿真模式对程序进行仿真调试仿真通过后将生成的 S19 文件使用烧写器和烧写软件烧到单片机中 版权所有 6 / 69

7 1.4 WinScope IDE 的安装与配置 安装要求 WinScope IDE 软件必须要求满足最小系统为 操作系统 Win XP Win 7 Vista Win8.1 Win10 硬盘空间 300MB 以上 内存 256MB 以上 安装 目前软件为免安装版 但要求操作系统必须安装 Framwork.net 3.5 组件 如果电脑中没 有此组件 推荐到微软官方下载 下载 Framwork.net 3.5 组件链接地址 当用户接上 SN-Link 仿真器时 如果当前电脑是第一次连接仿真器 电脑会提示发现新硬 件 此时需要安装 USB 驱动 驱动程序放在 WinScope IDE 软件包 Driver 目录下 安装步聚如 下 以 Win7 系统为例 a. 当系统提示从 Windows Update 中获取驱动软件时 选择跳过 如错误!未找到引用源 图 2 版权所有 7 / 69

8 b.打开设备管理器 控制面板-- 系统和安全-- 系统 -- 设备管理器 出现如下图 3 所示对 话框 图 3 c.在设备资源管理器中 找到 端口 COM 和 LPT 请使用 COM1~COM5 如下所示图 4 图 4 版权所有 8 / 69

9 d.点击右键后 出现如下话框 按红字部分提示操作 如图 5 图 5 e.选择软件目录下的 Driver 文件夹 然后下一步 驱动安装成功后 会出现如下图 6 示提示 图 6 这时 USB 的驱动已经安装完成 程序编译通过后 直接点点进入调试模式即可进行仿 真 版权所有 9 / 69

10 2 WinScope IDE 的界面 WinScope IDE 界面由标题栏 菜单栏 右键菜单 工具栏 窗口 状态栏组成 图 7 WinScope IDE 主界面 2.1 窗口 WinScope IDE 的工具栏可以用鼠标左键进行拖动 项目管理器窗口 MCU OPTION 值窗 口 程序编辑区窗口 寄存器窗口 特殊功能寄存器窗口 断点设置列表窗口 信息输出窗口 RAM数据窗口等显示的窗口都可以浮动 停靠 隐藏 如图 8 所示 这些窗口通过菜单栏的 查看 菜单操作可以关闭或打开 并且软件会自动保存新的布局 版权所有 10 / 69

11 图 8 WinScope IDE 主界面 2.2 菜单的说明 文件菜单 菜单项 快捷键 图标 功能描述 新建/项目 创建项目/文件 打开/项目 打开已有项目 文件 关闭 关闭当前窗口 关闭项目 关闭整个项目 保存 保存当前文件 另存为 另外取名保存当前文件 全部保存 保存所有已打开的文件 工程及当前文件 编辑 菜单项 快捷键 撤消 Crtl+Z 撤消上一次操作 重复 Ctrl+Y 重做上一次操作 剪切 Ctrl+X 将选中的文本剪切到剪贴板 复制 Ctrl+C 将选 中的文本复制到剪贴板 粘贴 Ctrl+V 粘贴剪贴板的文件到当前光标处 版权所有 图标 描述 11 / 69

12 删除 Delete 全选 Ctrl+A 选中文本编辑窗所有内容 快速查找 Ctrl+F 查找当前文件中相关字附 查找一下个 F3 查找下一个匹配字符串 快速替换 Ctrl+H 替换已找到的字符串 高级 ---- 转换为大写转换为小写注释选定内容取消注释选定内容 高级菜单将选定的内容转换为大写将选定的内容转换为小大写将选定内容注释取消选定内容的注释 增加行缩进 Tab 增加选定内容的行缩进 减少行缩进 Shift+Tab 减少选定行的缩进 向前定位 Alt+ 左方向键 向前定位, 将光标定位到上一位置 向后定位 Alt+ 右方向键 向后定位, 将光标定位到上一位置 添加 / 移除书签 Ctrl+F2 在当前行放置书签 / 移除书签 上一书签 Alt+F2 移动光标到上一书签 下一书签 F2 移送光标到下一书签 清除所有书签 清除当前文件的所有书签 默认快捷键功能 Home End Ctrl+Home Ctrl+End Ctrl+ 左方向键 Ctrl+ 右方向键 Ctrl+K Esc 将光标移到当前行的开始将光标移到当前行的结尾将光标移到当前文件的开始将光标移到当前文件的结尾将光标移到当前单词左侧将光标移到当前单词右侧在编辑状态下, 出现关键字提示在编辑状态下, 隐藏关键字提示 版权所有 12 / 69

13 2.2.3 查看菜单 项目管理子程序列表构建输出窗寄存器特殊功能寄存器监视窗口断点列表 RAM 区数据芯片配置 打开项目管理窗口显示各子函数列表打开输出信息窗口打开功能寄存器窗口打开特殊功能寄存器窗口打开监视窗口, 添加临时变量观察窗打开断点列表打开 RAM 区数据, 观察 RAM 区的数据变动打开芯片设置窗, 修改芯片的 OPTION 设置 项目管理菜单 新建项目打开项目关闭项目编译 / 汇编生成 S 代码重新生成代码并下载 创建项目打开已有项目关闭整个项目编译当前文件编译所有 ASM/C 文件并生成 S19 文件重新生成 S19 文件并下载 调试菜单 启动 / 停止调试 Ctrl+F5 启动或停止调试模式 CPU 复位 使单片机 PC 回到开始位置 全速运行 F5 全速运行直到下一有效断点 停止运行 Shift+F5 停止运行 步进 F11 单步运行, 遇到函数则进入函数内部单步运行 步越 F10 单步运行程序, 遇到函数不进入 步出 Shift+F11 跳出当前子函数, 回到上一级程序的下一语句 运行到光标处 [1] Ctrl+F10 运行到光标所在行 禁止断点且运行 全速且不响应断点 版权所有 13 / 69

14 放置 / 移除断点 [2] F9 在当前行插入或移除断点 禁止 / 允许断点 Ctrl+F9 使当前行的断点有效或无效 禁止所有断点 使整个工程的断点无效 清楚的所有断点 Ctrl+Shift+F9 清楚整个工程的所有断点 工具菜单 合并 S19 文件 选项 仿真系统选项 设置字体 制表符大小 语言选择 非程序区填充功能 芯片电压选择功能 非程序区填充功能功能说明, 如图 所示 : 功能一 : 非程序区, 是否需要填充 功能二 : 填充数据格式, 可选全 0, 或全 1 该功能设置, 记忆在项目工程文件中, 不同的项目工程, 可设置不同的选项 电压选择功能仅支持 V0.7 及以上仿真器 ; 该功能设置, 记忆在项目工程文件中, 不同的项目工程, 可设置不同的选项 注 : 仿真器硬件为 V0.5 时, 该电压选择无效 V0.5 的仿真器, 电压输出可进行手动调节 图 仿真系统设置 版权所有 14 / 69

15 2.2.7 帮助菜单 帮助 检查更新 查看更新到最新版本 在线注册 关于 IDE 版本信息 注 :[1] 运行到光标处, 目前不可以使用 [2] 放置 / 移除断点, 该功能可以直接在程序编辑区的代码行标号前点击设置或移除 2.3 右键菜单 WinScope IDE 提供了右键菜单, 在程序编辑区可以使用右键菜单, 方便快速执行命令 ( 图 2.4 所示 ) 图 2.4 右键菜单 版权所有 15 / 69

16 3 WinScope IDE 项目管理 WinScope IDE 目前支持的是单个项目的管理 要建新项目时, 可以直接按 新建项目 的 菜单, 当前的文件自动被关闭, 或者先关闭当前的项目后再新建项目 ; 如果要打开另一个项 目, 也可以按添加项目一样添加, 当前的项目也会关闭 ; 或者先关闭当前项目再添加 3.1 项目窗口 项目窗口的内容包括项目名称 源代码文件夹 Output 文件夹 Debug 文件夹 程序文件 必须添加到 SourceCode 文件夹下 当双击 ASM 文件可以在程序编辑区打开对应的文件 如下 图 9 图 9 图 10 右键单击项目名图标, 可以进行对项目进行编译和重新生成, 新建文件夹 当右键选中 SourceCode Output Debug 中的一个文件夹后可以新建或者添加已有文件到项目中 目前只支持添加存放于工程目录下的文件, 其它路径文件将会在打开时报错 如图 10 的下拉菜单, 如图要删除某个 ASM 文件时, 先选中 ASM 文件然后在对应的文件夹上右键选择删除即可 3.2 新建项目 如图 11 选择主菜单 文件 \ 新建 \ 项目 或者 项目管理 \ 新建项目, 进入到新建项目的向导对话框, 如图 12, 在对话框中, 可以选择芯片的型号 命名项目的名称 选择项目的存放路径, 然后进入下一步设置 MCU OPTION 值, 这些操作完成后进入下一步会显示上面操作的所有信息, 如项目名称 存放路径等 完成后的项目管理窗口如图 13( 例 : 项目取名 P03_Test), 但还需要新建文件才能在程序编辑区写源代码, 选中 SourceCode 后右击会弹出一个下拉菜单, 选择 新建文件 命名 ( 例 : 文件命名为 P03_Test.asm) 保存后, 就可以在程序编辑区编写源代码了 ( 如图 14) 如果需要删除文件( 如 :P03_Test.asm), 先选中需要删除的文件, 然后再 SourceCode 上右击出现的下拉菜单, 点击 删除当前选项 就可以删除文件 版权所有 16 / 69

17 图 11 图 12 新建项目向导 图 13 项目窗口 版权所有 17 / 69

18 图 14 新建文件 3.3 打开已有项目 选择主菜单 文件 \ 打开 \ 项目 \ 解决方案 或者 项目管理 \ 打开项目, 将已有 的项目添加到项目管理窗口 图 15 项目添加 3.4 MCU OPTION 值设置 在新建项目过程中的新建项目向导下, 选择好芯片型号, 命名好项目名称 选择好项目的存放路径后, 点击 下一步, 弹出 MCU OPTION 值的设置对话框 芯片型号在弹出 MCU OPTION 值对话框之前已经选好,MCU OPTION 值可以点击按分类顺序排列, 也可以点击按字母顺序排列, 根据开发项目的需要在这里配置 OPTION 值 当选中 OPTION 值的某一项时, 将会在显示窗下方出现对应项的配置说明如下图 16, 选中 WDTE 后, 在下方出现 看门狗设置 :True: 使能 WDT False: 关闭 WDT 的说明 OPTION 值可以请允许开发过程中随时进行修改, 不过需要点击下方的保存设置后才会更新到项目中 如果不点击保存, 重新进入仿真模式时是会按照当前显示的值进行重新设置的, 但此 OPTION 值不会被保存到项目中, 下次打开时仍然是重新设置的值 版权所有 18 / 69

19 图 16 MCU OPTION 值设置 3.5 编译项目 在程序编辑区中编写好源代码保存后, 编译文件, 点击是编译当前文件, 在编译输出窗口会提示编译成功或者编译出错, 编译成功后如图 17 所示 当编译出错时,WinScope IDE 会跳出错误提示框提示编译程序出错 图 17 编译当前文件 如果点击, 会编译项目中的所有文件并生成 S19 文件, 在编译 输出信息 窗口中 也会提示项目下所有文件的编译情况 点击 会编译项目中的文件 生成 S19 文件并自动进 版权所有 19 / 69

20 入仿真模式 当编译出错时,WinScope IDE 将自动停止仿真器的连接, 退出仿真模式 每次修 改代码后都需要编译下载 S19 文件, 这样才能够更新仿真结果 版权所有 20 / 69

21 4 WinScope IDE 调试 4.1 WinScope IDE 调试 WinScope IDE 可以通过设置断点 步进 步越 步出 运行到光标处 禁止断点且运行 等方式进行调试 菜单如图 18 图 18 调试菜单 启动 / 停止调试 当程序编译成功并设置好调试目标后, 选择 调试 \ 启动/ 停止调试 或者直接点击, 程序将进入调试状态, 当需要退出调试模式时, 同样是选择 调试 \ 启动/ 停止调试 或者直接点击, 如果是出于全速运行状态, 则需要先停止运行再停止调试 启动 / 停止调试快捷键是 Ctrl+F 断点 禁止断点且运行 断点使得调试程序方便了很多, 能够在需要的位置暂停执行, 与单步不同的是可以让程序一直运行到断点处才暂停, 加快了调试的过程 无论处于编辑模式还是调试模式, 在程序编辑区的代码行前面 ( 快捷键 F9), 都可以设置 / 消除断点 禁止断点且运行是执行程序时忽略已经设置的断点, 直到有停止运行命令才会停止 版权所有 21 / 69

22 4.1.3 复位 全速运行 停止运行 运行到光标处 复位会使单片机的 PC 回到开始位置 ; 全速运行是指运行程序直到碰到断点或停止运行命令才会停止, 快捷键和图表分别是 F5 ; 停止运行是停止当前运行的程序, 直到再次执行运行命令, 图表是 ; 运行到光标处 ( 只有 HC05 核系列有用, 其它系列的不可用 ) 是指全速运行程序到光标所在行然后停止, 如果运行过程中有断点会停在断点所在行 ( 快捷键是 Ctrl+F10) 步进 步越 步出 步进是逐句的执行指令, 遇到函数调用则进入函数内部执行 ( 快捷键 F11) 步越不响应子程序是指逐句的执行指令, 遇到函数调用不进入内部执行, 而是将函数当一条语句执行 ( 快捷键 F10) 步出是跳出当前函数或子程序是执行指令到当前函数的结束行然后停止 ( 快捷键 Shift+F11) 注意 : 当程序在主程序中运行时, 不允许点击 步出 菜单, 否则会产生意想不到的情况 放置 / 移除断点 禁止 / 允许断点 禁止所有断点 清除所有断点 放置 / 移除断点, 无论处于编辑模式还是调试模式, 在程序编辑区的代码行前面 ( 快捷键 F9), 都可以设置 / 移除断点, 还可以直接在代码行数字标号前空白处单击来设置断点或去除断 点 清楚所有断点, 将已经设置的断点全部清除 4.2 观察调试信息 寄存器窗口 寄存器窗口显示了目标 CPU 的寄存器在调试过程中的状态, 只在调试模式时可用 通过寄 存器窗口可以实时观察寄存器的值, 当寄存器的值被改变时会以红色的形式突出显示 另外通 过双击数值项可以修改寄存器的值 图 19 寄存器窗口 特殊功能寄存器窗口 版权所有 22 / 69

23 4.2.2 特殊功能寄存器窗口 特殊功能寄存器窗口显示目标单片机在调试过程中的状态 此窗口为只读窗口 调试过程中 不允许修改窗口中的参数 可读写数据存储窗口 可读写数据存储窗口 RAM 区 如图 20 在调试时可用 该窗口主要用于观察连续内 存 可以根据需要 在地址框输入地址后回车 能够查找对应地址的位置 显示窗中的数值以 十六进制显示 如果要改变 RAM 区的内容 将光标定位在要修改的地方 直接修改 这里的 数据可以是两种形式 比如 01 可以写成 0x01,只能输入十六进制数 且小于或等于 0xff 超 过 0xff 会跳出如图 21 对话框 图 20 RAM 数据存储窗口 图 21 RAM 数据存储对话框 版权所有 23 / 69

24 图 22 仿真模式下视图 状态栏 当前模式 包括编辑模式和仿真调式两种 其中仿真调试中分为 Busy Stop Wait Monitor 几种状态 版权所有 24 / 69

25 5 SN-Link 仿真器 5.1 SN-Link 仿真器的构成 SN-Link 仿真器配件如下 A-B USB 线 1根 主机 1台 对应 MCU 型号仿真 EV 板 1块 连接目标板排线 1根 图 23 SN-Link 实物图 如图 23 所示 标注 USB 的一端直接与电脑 PC 机相连 标注 JTAG 接口的一端与各种型号 的 EV 板相连 针对不同的型号使用相对应的 EV 板进行仿真 EV 板上提供了对应芯片的引脚 可用排线直接连到的用户的目标板上 用户可以选择目标板由仿真器供电或者单独供电 版权所有 25 / 69

26 5.2 各型号 EV 板说明 P01 PCB 标注丝印 J2 14PIN 8PIN 6PIN 6PIN Y1 J3 J1 功能说明当目标板需要仿真器供电时, 需要短接一起对应规格书各种脚位排列接口当选择外振时, 需要焊接对应频率的晶振如果外接晶振为 8M, 则可以直接从仿真器引入, 引入时把 J3 短接一起即可 与 SN-Link 仿真器接口 P02 PCB 标注丝印 J2 10PIN 8PIN 8PIN 6PIN Y1 J1 功能说明当目标板需要仿真器供电时, 需要短接一起对应规格书各种脚位排列接口当选择外振时, 需要焊接对应频率的晶振与 SN-Link 仿真器接口 P03 PCB 标注丝印 U5 功能说明 当目标板需要仿真器供电时, 需要短接一起 U8, J2, U4 对应规格书各种脚位排列接口 Y2 U6 J1 当选择外振时, 需要焊接对应频率的晶振如果外接晶振为 16M, 则可以直接从仿真器引入, 引入时把 U6 及 R4 短接一起即可 与 SN-Link 仿真器接口 P04 PCB 标注丝印 U5 功能说明 当目标板需要仿真器供电时, 需要短接一起 版权所有 26 / 69

27 J2 J3 J4 Y1 J1 对应规格书各种脚位排列接口 当选择外振时, 需要焊接对应频率的晶振 与 SN-Link 仿真器接口 P05 PCB 标注丝印 J2 40PIN Y1 J3 J1 功能说明当目标板需要仿真器供电时, 需要短接一起对应规格书各种脚位排列接口当选择外振时, 需要焊接对应频率的晶振如果外接晶振为 8M, 则可以直接从仿真器引入, 引入时把 J3 短接一起即可 与 SN-Link 仿真器接口 P06 PCB 标注丝印 J2 U2,U3 Y1 J1 功能说明当目标板需要仿真器供电时, 需要短接一起对应规格书各种脚位排列接口当选择外振时, 需要焊接对应频率的晶振与 SN-Link 仿真器接口 P07 PCB 标注丝印 J2 24PIN 14PIN Y1 J1 功能说明当目标板需要仿真器供电时, 需要短接一起对应规格书各种脚位排列接口当选择外振时, 需要焊接对应频率的晶振与 SN-Link 仿真器接口 P08 PCB 标注丝印 J2 功能说明 当目标板需要仿真器供电时, 需要短接一起 版权所有 27 / 69

28 P1 J1 对应规格书各种脚位排列接口 与 SN-Link 仿真器接口 SM110X PCB 标注丝印 J2 14PIN 8PIN 6PIN 6PIN Y1 J3 J1 功能说明当目标板需要仿真器供电时, 需要短接一起对应规格书各种脚位排列接口当选择外振时, 需要焊接对应频率的晶振如果外接晶振为 8M, 则可以直接从仿真器引入, 引入时把 J3 短接一起即可 与 SN-Link 仿真器接口 SM111X PCB 标注丝印 J2 14PIN 8PIN 6PIN 6PIN Y1 J3 J1 功能说明当目标板需要仿真器供电时, 需要短接一起对应规格书各种脚位排列接口当选择外振时, 需要焊接对应频率的晶振如果外接晶振为 8M, 则可以直接从仿真器引入, 引入时把 J3 短接一起即可 与 SN-Link 仿真器接口 SM112X PCB 标注丝印 J2 14PIN 8PIN 6PIN 6PIN Y1 J3 J1 功能说明当目标板需要仿真器供电时, 需要短接一起对应规格书各种脚位排列接口当选择外振时, 需要焊接对应频率的晶振如果外接晶振为 8M, 则可以直接从仿真器引入, 引入时把 J3 短接一起即可 与 SN-Link 仿真器接口 版权所有 28 / 69

29 SM113X PCB 标注丝印 J2 P1 P2 P3 Y1 J3 J1 功能说明当目标板需要仿真器供电时, 需要短接一起对应规格书各种脚位排列接口当选择外振时, 需要焊接对应频率的晶振如果外接晶振为 8M, 则可以直接从仿真器引入, 引入时把 J3 短接一起即可 与 SN-Link 仿真器接口 SM511X PCB 标注丝印 J2 16PIN Y1 J3 J1 功能说明当目标板需要仿真器供电时, 需要短接一起对应规格书各种脚位排列接口当选择外振时, 需要焊接对应频率的晶振选择外接晶振时,J3 短接, 可以直接从仿真器引入时钟代替外部晶振与 SN-Link 仿真器接口 SM512X PCB 标注丝印 J2 16PIN 14PIN J1 功能说明当目标板需要仿真器供电时, 需要短接一起对应规格书各种脚位排列接口与 SN-Link 仿真器接口 版权所有 29 / 69

30 6 WinScope IDE 快速开发实例 本章通过一个实际例子让用户快速的掌握如何使用 WinScope IDE 进行项目的开发 假设 为了简单测试仿真器的好坏 现在我需要对 P03 编写一段代码 代码中包含几个简单的 功能 对 RAM 进行读写测试 我随意选几个地址 对 P0 端口的 P07 设置为外部中断 P06 为输出 开启定时器 0 的定时中断 测试函数的调用与返回 功能定义好后 现在可以开始了 6.1 建立项目 双击 打开仿真软件 如图 24 所示 图 24 WinScope IDE 界面 在菜单栏中选择 项目管理 新建项目 这时会出现如图 25 所示对话框 在对话框中 选择芯片型号 P03 在项目名称一栏输入 P03_Test 在项目存放路径中选择你需要存放项 目的地方 建议选择的路径和项目名称 中间不要含有空格 星号等不附合 C 命名标准的字符 当你选择完芯片型号之后编译器会自动的选择 不需要手工干预 版权所有 30 / 69

31 图 25 新建项目向导 设置完路径 点击下一步 会出现如图 26 所示对应型号的 OPTION 设置窗口 我们按照如图 26 所示设置 OPTION 值为 3 设置完后点保存 然后一直下一步至完成 图 26 点击 完成 按键之后 可以看到 WinScope IDE 窗口的工程管理窗中已经按照 P03_Test 名称建立了一个新的工程 但这时工程还是空的 我们需要添加一个 ASM 文件 添加的方法 右键选中 SourceCode 文件夹 添加文件 如图 27 左所示 根据提示将路径指向刚才建 立项目的文件夹下 输入文件名 P03_Test.asm 然后点击保存后 可以看到图 27 右边的图 版权所有 31 / 69

32 图 27 在项目中添加文件 6.2 代码编辑 项目建立完成后, 可以开始编辑代码 在编辑的过程中默认规定以 fn_ 开头的标号会与 RTS 或者 RTI 进行配对, 可以进行代码折叠 如下图 28 所示 fn_int0 代码段已经折叠起 来, 双击标号将会展开 在编辑中可以使用书签, 查找等功能进行快速定位 图 28 代码折叠 6.3 编译 生成代码 代码编写完之后, 可以对文件进行编译除错 需要注意的是 WinScope 中有三个非常相似的功能菜单, 用户需要对他们加以区分 如图 29 所示 编译 / 汇编只编译当前打开的文件, 而生成代码则是编译整个工程项里的文件并把中间文件生成 S19 目标文件 所以我们需要选择的是 生成代码 的菜单 而 重新生成并下载 菜单是连同进入仿真模式的功能 版权所有 32 / 69

33 图 29 编译和生成代码菜单区分 当编译出错时,WinScope IDE 会提示编译出错, 并在构建输出框输出相关出错信息 如 下图 30 所示, 双击输出信息框中的出错行号, 将会自动对应到文本编辑窗中的对位置 如图 30, 我们看到 241 行指令 JBST 出错, 应该为 JBSET 图 30 编译出错提示 版权所有 33 / 69

34 6.4 进入调试模式 当编译生成代码通过后 即可以连接仿真器进行代码仿真 点击工具栏上的 图标 进入 仿真模式 如果仿真器连接失败将会提示找不到端口等出错提示 当正确进入模式后看到如下 图所示 PC 光标会复位到程序入口地址 RAM,REG 等窗口会被刷新 这时候 离成功能已经很接近了 我们选择在定时器中断程序 time0 中设置一个断点 然 后点击 全速运行程序 PC 指针将停留在定时器中断的断点处 如下图 31 所示 这时候可以查 看各寄存器 RAM 变量的参数 版权所有 34 / 69

35 图 31 PC 停留在断点处 6.5 项目后续工作 仿真功能都正确之后 就可以到项目存放的目录下把 S19 文件烧写到实际的芯片中进行实物 测试了 RISC 内核单片机的 S19 文件是 OUTPUT 子目录中 版权所有 35 / 69

36 7 RISC 汇编器介绍 7.1 汇编器语法 汇编程序由语句和空白组成 空白可以是一个空格或多个空格或制表符 使用空白的目的是使代码便于他人阅读 除非在字符常量内部, 否则任何空白的意义与一个空格相同 每个语句后均跟有新行, 它的一般格式如下 [label:] [mnemonic [operands]] [;comment] 或 [label:] [directive [arguments]] [;comment] Label 标号 Mnemonic 助记符 Directive Oprand Argument Comment 伪指令操作数参数注释 标号 (Lable) 标号是从所有字母 数字的集合以及两个特殊字符 ( 下划线 (_) 和句点 (.)) 中挑选出来的一个或多个字符 除非是局部符号这一特殊情况, 否则标号不能以十进制数开始 标号是区分大小写的 ; 它没有长度限制, 并且所有字符都有意义 标号定义之后必须紧跟一个冒号 冒号后面可跟有空格 制表符 换行符 汇编器助记符或伪指令 标号本身可以单独放在一行, 其代表的地址就是下一行代码的地址 链接完成后, 标号的值为存储器中单元的绝对地址 助记符 (Mnemonic) 助记符告诉汇编器对哪些机器指令进行汇编 例如, 加 (ADD) 跳转 (goto) 或移动 (MOVRA) 与您自己创建的标号不同, 助记符由 RISC 内核编译器提供 助记符不区分大小 写 伪指令 (Directive) 汇编器伪指令是源代码中出现的命令, 但不会直接翻译为机器代码 伪指令用于控制汇编器 的输入 输出和数据分配 伪指令的第一个字符是句点 (.) 欲知更多有关可用伪指令的信息, 请参见后面相关 汇编器伪指令 章节 版权所有 36 / 69

37 7.1.4 操作数 操作数和助记符之间必须用一个或多个空格或制表符隔开 操作数由立即数 寄存器, 目标选择和累加器选择组成 十六进制数的标志是以 0x 开头可 H 结尾 八进制数的标志是用 O 结尾 二进制数的标志是用 B 结尾 十进制数对开头或结尾的字符没有特殊要求 示例 :0xe 16O 1110B 和 14 都代表立即数值 参数和注释 每个伪指令可使用 0-3 个参数, 这些参数为伪指令提供其他有关如何执行命令的信息 参数 之间必须用一个或多个空格或制表符隔开 必须用逗号隔开多个参数 注释 : 在汇编器中, 使用分号 ; 进行注释单行 如 :Movai 0x16 ;mov 0x16 to A reg 7.2 常量表示 数字常量 数字常量分为整数 浮点数 定点数 整数是在 C 语言中适合 long 的数字 浮点数字是 IEEE 754 浮点数字 定点数字是 Q-15 定点格式的 字符常量 有两种类型的字符常量 字符常量 : 用一个字节表示一个字符, 并且其值可以在数字表达式中使用 字符串可能包含多个字节, 并且它们的值不能在算术表达式中使用 单个字符可以被写成一个单引号后面紧跟着该字符的形式, 或是使用一对单引号引用该字符的形式 汇编器接受以下转义字符来代表特殊控制字符 : 转义字符 说明 十六进制值 \a 报警字符 07 \b 后退字符 08 \f 换页字符 0C \n 换行字符 0A \r 回车字符 0D \t 水平制表字符 09 \v 垂直制表字符 0B \\ 反斜杠 5C 版权所有 37 / 69

38 \? 问号字符 3F \ 双引号 22 表 转义字符 数字表达式中字符常量的值是该字符的机器字节宽度的代码 汇编器假设字符代码是 ASCII 码 字符串被写在一对双引号之间 可能包括双引号或空字符 在字符串中添加特殊字符的方 法是在这些特殊字符前用反斜杠 \ 进行转义 应用于字符串的转义序列同样也适用于字符 7.3 表达式语法和运算 表达式指定地址和数字值 在表达式前面和 / 或后面可以有一段空白 表达式的结果必须是一个绝对数字, 或是偏移到特定段的偏移量 如果表达式的值不是绝对的, 并且没有足够的信息使汇编器在查看表达式时能确定其所在的段, 在这种情况下, 汇编器将终止其操作并返回一条错误消息 整数表达式 整数表达式是由运算符分隔的一个或多个参数 参数是符号 数字或子表达式 子表达式是一个左括号 ( 后面跟着一个整数表达式和一个右括号 ) ; 或者是一个后面有参数的前缀运算符 在整数表达式中, 如果包含程序空间地址符号, 将按照程序计数器 (PC) 的单位进行相关计算 程序计数器每执行一个指令字就会加 1 例如, 要跳转到 L 标号所在指令的下一条指令, 就应指定目标为 L+1( 这里的 1 代表 1 条指令 ) 示例 :goto L 运算符 运算符是诸如 + 或 % 之类的算术函数 前缀运算符后面跟有一个参数 中缀运算符在两个参数之间 运算符的前面和 / 或后面可以是空白 前缀运算符具有比中缀运算符高的优先级 中缀运算符的优先级顺序由其类型决定 前缀运算符 : 汇编器有两个前缀运算符 每个运算符使用一个参数, 参数必须是绝对的 运算符说明示例 - 取负值 取二进制补码 -1 编译后为 0xff 版权所有 38 / 69

39 ~ 位非 1的补码 ~1编译后为 0xfe 表7-3-1 前缀运算符 中缀运算符 中缀运算符的两边各有一个参数 运算符根据其类型具有不同的优先级 如下表所示 但 是优先级相同的运算按照从左到右的顺序执行 除了+或-之外 运算符都必须是绝对的 而且 结果也必须是绝对的 运算符 说明 示例 + 加 2+6 =8 - 减 6-2 =4 * 乘 5*4 =20 / 斜杠与C运算符 / 相同 23/4 (=5) % 求余 30%4 (=2) << 左移 与C左移运算符相同 0x13<<2 (=0x4c) >> 右移 与C右移运算符相同 0x4c>>2 (=0x13) 位与 4&6 =4 ^ 位异或 4^6 (=2) 位或 2 4 =6 位操作 & 表7-3-2 中缀运算符 7.4 伪指令 为了增加源程序的可读性和可维护性 我们引入了伪指令的概念 伪指令本身不会产生可 执行的汇编指令 但它们可以帮组 管理 你编写的程序 其实用性和必要性绝不亚正真的汇 编指令 我们在此着重介绍最常用的几种伪指令 #include 或 include #include 伪指令的作用是把另外一个文件的内容全部包含复制到本伪指令所在的位置 被包含复制的文件可以是任何形式的文本文件 当然文件中的内容和语法结构必须是汇编器能 够识别的 最经常被 include 的是针对RISC单片机内部特殊功能寄存器定义的包含头文 件 它们全部放在WinScope IDE的安装目录INC 和BIN文件夹下 每一个RISC型号单片机有 一个对应的预定义包含头文件 扩展名是.inc 除了一些符号预定义文件可以把现有的其 版权所有 39 / 69

40 它程序文件作为一个代码模块直接 包含 进来作为自己程序的一部分 如下例 : #include <P03.inc> ; 把预定义的 P03 寄存器符号包含到此处 #include fun001.asm ; 把现有的程序文件包含进来作为自己代码的一部分 请注意被包含文件的引用方式 一种是 <> 尖括号引用, 这种引用意味着让编译器去默认的路径下寻找该文件,WinScope 默认的寄存器预定义文件存放路径即为 WinScope 安装后的目录 ; 另一种是 双引号引用, 这种引用方式的意思是指示编译器从引号中指定的全程文件路径下寻找该文件 上例 fun001.asm 没有指定路径, 即意味着在当前项目路径下寻找 fun001.asm 文件 如果编译器找不到被包含的文件, 将会有错误信息告知 List list 伪指令可以设定程序编译时的一些信息, 例如所选单片机的型号, 编译时选择的缺省数制等 例如 : list p=p03, r=dec ; 单片机型号为 P03, 无特别指明的数字为十进制数 #define / #undefine #define 的作用是定义常数符号, 即用一个符号变量替换另一个符号串或变量 被替换的可以是任意字母数字组成的符号但替换者本身不能是一个纯数字 例如 : #define DELAY_TIME 1000 ; 定义常数符号, 即用 DELAY_TIME 符号代替 1000 #define KEY1 PORTB,7 ; 用 KEY1 符号代替端口 PORTB 的第 7 引脚 用 #define 伪指令定义符号后, 可使程序中的变量或指令变得更具实际意义, 也使程序变得更易维护 指令 bset PORTB,7 和 bset KEY1 在事先用了上例中的 #define 后编译的结果是一样的, 但明显地后者看起来更容易理解, 一看就知道这是在测试编号为 KEY1 的一个按键 而且如果你的硬件设计改动了 KEY1 所接的单片机引脚, 只要改动这一处 #define 重新定义引脚位置, 程序的其它部分无需任何修改, 再编译一次即可得到更新后的软件代码 一个好的编程习惯是事先把一些代表实际意义的变量 单片机的输入输出引脚在硬件电路中的实际功能等用 #define 伪指令定义成简单直观的符号名字, 然后在程序中直接用其符号名字而不用简单机械的数字形式 替换的工作由编译器在编译时自动完成 它会先扫描你的源程序代码, 把事先 #define 的符号名改回成被替换的字符串, 然后再继续编译生产机器码 equ equ 顾名思义是 等于 的意思, 其作用和 #define 伪指令有点类似, 也是用一个符号名字替换其它数字变量, 但它只能替换立即数 如果要替换一个符号名字, 则此符号名必须事先用 #define 或 equ 伪指令已经定义替换了一个立即数 例如 : #define MyCount 0x70 ; 定义 MyCount 符号替换立即数 0x70 版权所有 40 / 69

41 w_temp equ 0x20 ; 符号名 w_temp 等于 0x20 count1 equ MyCount ; 符号名 count1 等同于 MyCount ; 如果 MyCount 没有事先定义则 会产生一个错误 在绝对定位的编程模式中 equ 被经常用于定义用户自己的变量, 即用一个符号名代替一个固定的存储单元地址, 上例中的 w_temp 定义即属于此类 用 equ 方式定义的符号在汇编后可以生成相关的调试信息, 可以通过各种变量观察的方式显示此符号所代表的内存地址处的数据内容, 但用 #define 方式定义的符号则不能产生调试信息 要注意 equ 伪指令本身并没有限定所定义的一定是一个变量地址, 它只是一个简单的符号和数字替换而已, 其意义必须和具体的指令结合才能确定 cblock / endc 用 equ 伪指令可以给一个符号变量分配一个地址 但在一个程序设计过程中往往需要定义很多变量, 你当然可以给每一个变量逐个用 equ 的方法分配一个地址空间 但如果变量很多, 这样做就显得非常麻烦, 你必须自己安排每个变量的地址, 小心不能出现地址重叠 ; 若要在已定义分配好的变量间插入新的变量, 那就必须重新逐个安排随后变量的地址等等 cblock/endc 伪指令可以轻松解决有很多变量定义的场合出现的这些问题, 我们把它叫作变量块连续定义 具体用法如下 : cblock 伪指令声明变量块的起始地址,endc 伪指令声明变量块定义结束,cblock/endc 中间可以插入任意多的变量声明 其地址编排由编译器自动计算 : 第一个变量地址分配从起始地址开始, 然后按所声明变量保留的字节数自动分配后面变量的地址, 变量所需保留的字节数用 : 加后面的数字表示, 如果只有一个字节 :1 可以省略不写 以下例来 cblock 0x20 ; 变量定义起始地址为 0x20 w_temp ;w_temp 地址为 0x20, 占一个字节 status_temp ;status_temp 地址为 0x21, 占一个字节 buffer:8 ;buffer 的起始地址为 0x22, 并保留 8 个字节单元 var1 ;var1 的地址为 0x2a, 占一个字节 var2 ;var2 的地址为 0x2b, 占一个字节 endc ; 结束变量连续定义 用 cblock 方式定义的变量和用 equ 方式定义的变量一样在汇编后可以生成相关的调试信息, 可以通过各种变量观察的方式显示此符号所代表的内存地址和其中的数据内容, 所以实际编程时一般无需关心计算每个变量的具体地址 程序员要注意的用这种方式连续定义很多变量时不要让变量块跨越所处 bank 的边界 你可以在 cblock 中随意插入新定义的变量, 或通过改变起始地址的方式使变量块挪到其它内存地址处, 地址的更新由编译器代劳 版权所有 41 / 69

42 org org 用以定义程序代码的起始地址, 通过此伪指令你可以把程序定位到任何可用的程序空 间, 它实现的是程序代码绝对定位, 如例 : org 0x0000 ; 定义复位入口地址, 以下指令从地址 0x0000 开始 goto main ; dt dt 的作用是定义表格数据 RISC 汇编指令实现表格定义的最基本指令是 RETAI xx, 表格中的每一个字节数据都以指令 RETAI 的形式出现 若表格较大, 就需要很多 RETAI 指令, 比较麻烦, 可读性也差 这时我们可以用此 dt 伪指令替代 RETAI 实现很多数据的表格定义 如例 : dt 0 ; RETAI 0 dt 1, 2, 3 ; RETAI 1 ; RETAI 2 ; RETAI 0x33 ( 3 的 ASCII 码 ) dt ABC ; RETAI A ; RETAI B ; RETAI C fill fill 伪指令可以实现对程序空间连续自动填充某一特定的指令数据, 被填充的可以是一个立即数 ( 实际肯定代表某一条指令 ), 也可以是一条形象的汇编指令 基本上在一个设计中都有一些程序空间没有写上具体的指令编码 ( 空白处 ), 在单片机正常运行时这些地方的指令是不会被执行到的 但在有干扰的情况下程序跑飞正好落在这些非法指令处时, 就有必要设置软件陷阱捕捉这些非法跳转, 让程序恢复正常运行 如果要程序员一个一个地址去分析哪里有空的指令单元然后又用特殊指令一条一条填入, 这是根本行不通的 fill 伪指令在这时就派上用场了 fill 0x0000, 5 ; 从当前地址处连续 5 个程序字填成 0x0000(NOP 指令 ) fill (goto $), NEXT_BLOCK-$ ; 从当前地址开始到标号 NEXT_BLOCK 前所有程序空间填上 goto $ ( 死循环 ) 指令 org 0x0100 NEXT_BLOCK end end 伪指令告诉汇编编译器编译工作到此为止,end 后面所有的信息, 不管正确与否, 一概不管 绝大多数情形下你的程序的最后一行应该是 end 无论如何,end 必须出现在程序中, 不然编译器会报错, 无法进行编译工作 版权所有 42 / 69

43 high 和 low 一个 16 位的数在 8 位单片机中必须被拆解成高 8 位一个字节 ( 高字节 ) 和低 8 位一个字节 ( 低字节 ) 才能用指令一条条处理, 类似的处理在对两字节变量赋立即数初值和基于 PC 相对跳转查表前设定 PCL 寄存器时经常碰到 WinScope 提供了 high 和 low 两个运算符分别计算一个立即数的高字节和低字节 例如 : #define abc 0x20a5 movai low(sks); 把 0xa5 赋给了 A ai high(sks); 把 0X20 赋给了 A 版权所有 43 / 69

44 8 RISC C 语言开发与调试 8.1 项目建立 本章介绍如何在 WinSope IDE 下建立 RISC C 语言项目 具本使用方法如下 1. 建立项目 点击菜单中 项目管理 然后选择 新建项目 这时会出现如下对话框 图 36 新建项目 2. 选择相关的 RISC 核芯片型号 项目名称填写需要按照 C 命名规则进行 项目存放路径选择 路径中不允许出现中文名路径 开发语言 请选择 C 语言 例如 我们选择 P03 型号 项目名 称为 P03_c_test 然后点击下一步 这时会出现如下图所示对话框: 图 37OPTION 设置 版权所有 44 / 69

45 3. 根据项目的需要, 对芯片的 OPTION 进行设置 设置完成后, 点击下面的保存设置 然后回 到原来的对话框, 点击 完成 8.2 添加文件 项目建立完成之后, 开始添加 C 文件 开发环境对 C 文件有如下要求 : 1. 必须包含 main 函数 2. 所有 C 文件只能放在项目文件夹根目录下 8.3 乘除法使用说明 RISC C 乘除法运算规则如下 : 1. 只涉及到 unsigned char unsigned int unsigned long 三种类型的参数和结果 2. char*char=char int*int=int long*long=long char/char=char int/int=int long/long=long, 以上六种计算形式请直接使用, 如 :a=0x2,b=0x0e,temp=a*b; 3. char*char=int ( 宏名 :_MULINT_CC 调用函数:mulint_cc(unsigned char, unsigned char)) int*char=int( 宏名 :_MULINT_IC 调用函数:mulint_ic(int,unsigned char)) int*char=long( 宏名 :_MULLONG_IC 调用函数:mullong_ic(int,unsigned char)) int*int=long( 宏名 :_MULLONG_II 调用函数:mullong_ii(int,int)) long*char=long( 宏名 :_MULLONG_LC 调用函数:mullong_lc(long,unsigned char)) long*int=long( 宏名 :_MULLONG_LI 调用函数:mullong_li(long,int)) int/char=char( 宏名 :_DIVUCHAR_IC 调用函数:divuchar_ic(unsigned int, unsigned char)) int/int=char( 宏名 :_DIVUCHAR_II 调用函数:divuchar_ii(unsigned int, unsigned int)) int/char=int( 宏名 :_DIVUINT_IC 调用函数:divuint_ic(unsigned int, unsigned char)) long/char=int( 宏名 :_DIVUINT_LC 调用函数:divuint_lc(unsigned long, unsigned char)) long/int=char( 宏名 :_DIVUCHAR_LI 调用函数:divuchar_li(unsigned long, unsigned int)) long/int=int( 宏名 :_DIVUINT_LI 调用函数:divuint_li(unsigned long, unsigned int)) long/long=char( 宏名 :_DIVUCHAR_LL 调用函数:divuchar_ll(unsigned long, unsigned long)) long/char=long( 宏名 :_DIVULONG_LC 调用函数 : divulong_lc(unsigned long, unsigned char)) long/int=long( 宏名 :_DIVULONG_LI 调用函数:divulong_li(unsigned long, unsigned int)) long/long=int( 宏名 :_DIVUINT_LL 调用函数:divuint_ll(unsigned long, unsigned long)) 以上 16 种计算形式统一定义于 \tools\share\include\sm-cacul.h 中, 所有的方法采用 C 条件调用方式书写, 只有定义了相应的宏才会对相应的计算方法进行编译解析, 因此不会造 版权所有 45 / 69

46 成不必要的 ram rom 资源消耗, 具体使用方法如下 : 如 char*char=int, 需调用 mulint_cc 函数实现, 参考代码 : #define _MULINT_CC // 定义所需计算方式宏 #include <sm-cacul.h> // 包含计算方法所在的头文件 // 宏和头文件的定义顺序必须是先宏后头文件 temp = mulint_cc(left,right); 8.4 RISC C 使用注意事项 RISC C 使用需注意如下要求 : 1. 调用 ASM 方法 asm 汇编代码 endasm; 另外需要注意的是, 调用汇编代码使用到寄存器时, 需加 _ 前缀, 如 _T0CR 2. 位定义方法请参考.h 头文件里面的定义方法, 如下 : typedef struct { unsigned char bit0 : 1; unsigned char bit1 : 1; unsigned char bit2 : 1; unsigned char bit3 : 1; unsigned char bit4 : 1; unsigned char bit5 : 1; unsigned char bit6 : 1; unsigned char bit7 : 1; } BITS_T; 3. 指定地址变量定义方法, 如下 : 指定 ram 地址 : sfr at 0x17 a0; typedef union { struct { unsigned char a00:1; unsigned char a01:1; unsigned char a02:1; unsigned char a03:1; 版权所有 46 / 69

47 unsigned char a04:1; unsigned char a05:1; unsigned char a06:1; unsigned char a07:1; }; } a0bits_t; volatile a0bits_t at 0x17 a0bits; #define a00 a0bits.a00 /* bit 0 */ #define a01 a0bits.a01 /* bit 1 */ #define a02 a0bits.a02 /* bit 2 */ #define a03 a0bits.a03 /* bit 3 */ #define a04 a0bits.a04 /* bit 4 */ #define a05 a0bits.a05 /* bit 5 */ #define a06 a0bits.a06 /* bit 6 */ #define a07 a0bits.a07 /* bit 7 */ 也可以用 unsigned char at 0x17 a0; 方法进行定义 指定 rom 地址 : const unsigned char at 0x17 a0; 4..h.c 文件的文件名必须由字母或数字或下划线组成 5. 编译器默认占用前七个寄存器地址, 请勿重复定义 6. 临时变量已修改能正常使用, 但是目前还不能查看变量的值, 如还有问题, 请联系软件开 发人员 7. 代码输入, 同一行建议不要写多行代码 8. switch 语句已修改能正常使用, 如还有问题, 请联系软件开发人员 9. 中断函数定义 void int_isr(void) interrupt { asm movra _ABuf swapar _STATUS movra _StatusBuf endasm; code asm swapar _StatusBuf movra _STATUS 版权所有 47 / 69

48 swapr _ABuf swapar _ABuf endasm; } 请将 ABuf StatusBuf 定义成全局变量 ; 另外, 在中断函数中尽量使用不要过多层的调用函数, 以防止堆栈溢出, 可以定义标志位来处理 10. Ram 使用情况查看已在输出信息框中列出, 格式为 : RAM USAGE MAP ('X' = Used, '-' = Unused) 0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXX 编译说明 数据类型长度 Type Size(byte) Scope char ~ 127 unsigned char 1 0 ~ 255 short ~ unsigned short 2 0 ~ int ~ unsigned int 2 0 ~ long ~ unsigned long 4 0 ~ long long ~ unsigned long long 4 0 ~ float 4 / double 4 / long double 4 / Bit 变量的定义和使用 1. Bit 变量可被声明为 global static local extern 以及函数返回值, 函数参数等形式 2. Bit 类型赋值时能够接收的常量值只 0 和 1 3. Bit 类型除了支持同类型变量之间的赋值外, 还可以与 1 byte 类型相互赋值, 当 1byte 类型赋值给 bit 类型时, 取变量最后一个 bit 赋与 bit 变量 Bit 变量不支持与大于 1byte 的类型 版权所有 48 / 69

49 相互赋值 4. Bit 类型可以用于 if while do while for 语句中 与同类型的变量或 0/1 进行相等与不等 的比较 5. Bit 类型用于 switch 语句时 switch 的条件判断表达式可以是 b 或!b case 只能使用 0 1 两种常量值 6. Bit 类型仅支持逻辑 & ^ 运算 不支持其他任何二元 如 /等运算 7. Bit 类型不可声明或定义为指针 数组等类型 8. Bit 类型不能在 Struct/Union 中使用 Sbit 数据类型的声明 sbit bit_name = var_name:bit_number; sbit bit_name = address: bit_number; bit_name: 所声明 sbit 变量的名称 var_name: 指向变量的名称 address: 指向某个地址 必须是十六进制或十进制常数值 bit_number: 指定对应的 Bit 位置 十六进制或十进制常数值 范围 0 ~ 7 1. Sbit 类型继承了 bit 类型的属性和限制 2. Sbit 类型定义的变量必须先对其绑定地址后使用 3. 不支持 extern sbit 变量 中断函数的声明 1. 定义中断函数的方式需要使用 void interrupt [0x8] FunName(void) 如 void interrupt[0x08] interrupt_isr(void) { asm movra _ABuf swapar _STATUS //或者_PFLAG 不同芯片状态寄存器名称不同 movra _StatusBuf endasm; // //code // asm swapar _StatusBuf movra _STATUS //或者_PFLAG 不同芯片状态寄存器名称不同 swapr _ABuf swapar _ABuf endasm; } 版权所有 49 / 69

50 进入中断函数时系统会备份所有寄存器, 中断函数结束前, 前述备份的寄存器均会被还原 使用者若其他额外的备份需求, 需要自行撰写代码进行备份 中断函数不能被其它函数调用 2. 定义中断子函数定义和声明中断子函数时必须使用 interrupt 关键字, 如 : int interrupt callbyisr(int x) { return x; } 中断子函数只可被中断函数 中断子函数直接或间接调用 内嵌汇编 ( 暂不支持 ) 函数使用说明 1. strcpy - 拷贝字符串格式 : #include <string.h> char *strcpy(char *dest, const char *src); 函数 strcpy() 将 src 指向的字符串 ( 包含字符串结束符 \0 ) 复制到 dest 所指向的数组中 字符串不能重复, 目标字符串 dest 必须足够大来承接拷贝 在 src 长度小于 n 长度的情况下, dest 的余数被 null 填充 返回值 : 函数 strcpy() 返回指向 dest 字符串的指针 2. strncpy - 复制字符串格式 : #include <string.h> char *strncpy(char *dest, const char *src, size_t n); 函数 strncpy() 与 strcpy() 相似, 除非 src 中多于 n bytes 被复制 因此, 若 src 的前 n bytes 中没有 null byte, 不以 null 结尾 在 src 长度小于 n 长度的情况下,dest 的余数以 null 填充 返回值 : 函数 strncpy() 返回指向字符串 dest 的指针 3. strcat - 连接两个字符串 格式 : 版权所有 50 / 69

51 #include <string.h> char *strcat(char *dest, const char *src); 函数 strcat() 将 src 字符串附加到 dest 字符串并在 dest 结尾覆盖 \0, 然后在结尾处添加 \0 字符串不能重复,dest 字符串必须足够大存放结果 返回值 : 函数 strcat() 返回指向 dest 字符串的指针 4. strncat - 连接两个字符串格式 : #include <string.h> char *strncat(char *dest, const char *src, size_t n); 函数 strncat() 与 strcat() 相似, 除了只将 src 首部的 n 个字符被附加到 dest 将 src 字符串附加到 dest 字符串并在 dest 结尾覆盖 \0, 然后在结尾处添加 \0 字符串不能重复,dest 字符串必须足够大存放结果 返回值 : 函数 strncat() 返回指向 dest 最终字符串的指针 5. strcmp - 比较两个字符串格式 : #include <string.h> int strcmp(const char *s1, const char *s2); 函数 strcmp() 比较两个字符串 s1 和 s2 当 s1<s2 时, 返回值 <0; 当 s1=s2 时, 返回值 =0; 当 s1>s2 时, 返回值 >0 返回值 : 若 s1( 或者前面 n byte) 被查询到, 函数 strcmp() 返回值 : 当 s1<s2 时, 返回值 <0 当 s1=s2 时, 返回值 =0 当 s1>s2 时, 返回值 >0 6. strncmp - 比较两个字符串格式 : #include <string.h> int strncmp(const char *s1, const char *s2, size_t n); 与 strcmp() 函数相似, 只比较 s1 和 s2 开始的 n 个字符 版权所有 51 / 69

52 返回值 : 若 s1( 或者前面 n byte) 被查询到, 函数 strncmp() 返回值 : 当 s1<s2 时, 返回值 <0 当 s1=s2 时, 返回值 =0 当 s1>s2 时, 返回值 >0 7. strchr - 查找字符串中某个字符首次出现的位置格式 : #include <string.h> char *strchr(const char *s, char c); 说明函数 strchr() 返回首次出现 c 的位置的指针, 如果 s 中不存在 c 则返回 null 这里 字符 单位是 byte, 这些函数在较长字符或多 byte 字符下不能正常运行 返回值 : 函数 strchr() 返回首次出现所查找字符位置的指针, 如果不存在该字符则返回 NULL 8. strrchr - 定位字符串中某个字符格式 : #include <string.h> char *strrchr(const char *s, int c); 函数 strrchr() 返回指向字符串 s 中的字符 c 最后出现位置的指针 这里 字符 单位是 byte- 这些函数在较长字符或多 byte 字符下不能正常运行 返回值 : 函数 strrchr() 返回指向字符串中的目标字符最后出现位置的指针, 未找到的情况下返回 NULL 9. strspn - 计算某个字符串在字符集中出现的次数格式 : #include <string.h> int strspn(const char *s, const char *accept); 函数 strspn() 计算 s 初始值长度, 并在 accept 字符中查找 s 初始值出现的次数 返回值 : 函数 strspn() 返回 s 初始化字符在 accept 中出现的次数 10. strcspn - 本函数用来比较二字符串并计算出不同处的字符串长度 格式 : #include <string.h> 版权所有 52 / 69

53 int strcspn(const char *s, const char *reject); 本函数用来比较 s 和 reject 二字符串, 并计算出不同处的字符串长度 返回值 : 返回 s 和 reject 不同处字符串长度 11. strpbrk - search a string for any of a set of characters 格式 : #include <string.h> char *strpbrk(const char *s, const char *accept); 在字符串 s 中寻找字符串 accept 中任何一个字符相匹配的第一个字符的位置 返回值 : 函数 strpbrk() 返回指向 s 中和 accept 任何一个字符相匹配的第一个字符位置的指针, 若找不到则返回 NULL 12. strstr - 定位子字符串格式 : #include <string.h> char *strstr(const char *haystack, char *needle); 函数 strstr() 在 haystack 中查找子字符串 needle 第一次出现的位置 字符串结束符 \0' 不参与比较 返回值 : 返回指向第一次出现子字符串首位的指针, 如果没找到则返回 NULL 13. strlen - 计算字符串长度格式 : #include <string.h> int strlen(const char *s); 函数 strlen() 计算字符串 s 的长度, 不包含字符串结束符 \0 返回值 : 函数 strlen() 返回字符串 s 中字符的个数 14. strtok - extract tokens from strings 格式 : #include <string.h> 版权所有 53 / 69

54 char *strtok(char *s, const char *delim); 一个 token 是在字符串 delim 中未出现的非空字符串, 以 \0 或者 delim 中出现的某个字符结束 函数 strtok() 用于将字符串分解为不同的 token 第一次调用 strtok() 时 s 为第一个参数 其余调用许建第一个参数设置为 NULL 每次调用返回指向下一个 token 的指针, 在没有 token 时返回 NULL 若 token 以分隔符结束, 该分隔符被 \0 覆盖, 且指向下个字符的指针被用作下一个 strtok() 调用 分隔符字符串 delim 在每次调用 strtok() 函数时有所不同 返回值 : 函数 strtok() 返回指向下一个 token 的指针, 若没有 token 则返回 NULL 15. memcpy - 复制内存区域格式 : #include <string.h> void *memcpy(void *dest, void *src, size_t n); 函数 memcpy() 从内存区域 src 复制 n byte 到 dest 所指内存区域 内存空间不能重复 若内存区域重复, 使用 memmove(3) 返回值 : 函数 memcpy() 返回指向 dest 的指针 16. memcmp - 比较内存区域格式 : #include <string.h> int memcmp(void *s1, void *s2, size_t n); 函数 memcmp() 比较内存区域 s1 和 s2 的前 n 个 byte 当 s1<s2 时, 返回值 <0; 当 s1=s2 时, 返回值 =0; 当 s1>s2 时, 返回值 >0 返回值 : 函数 memcmp() 返回值 : 当 s1<s2 时, 返回值 <0; 当 s1=s2 时, 返回值 =0; 当 s1>s2 时, 返回值 >0 17. memset - 在内存中填充常量个字节格式 : #include <string.h> void *memset(void *s, int c, size_t n); 版权所有 54 / 69

55 函数 memset() 将 s 所指向的前 n 个 byte 内存中的每个字节的内容全部设置为 c 指定的 ASCII 值 返回值 : 函数 memset() 返回指向内存空间 s 的指针 18. memmove - 复制一块内存区域格式 : #include <string.h> void *memmove(void *dest, void *src, size_t n); 函数 memmove() 复制 src 内存区域中的 n 个 byte 到 dest 内存区域 内存区域可能重复 返回值 : 函数 memmove() 返回指向 dest 的指针 19. strerror - 返回字符串描述的错误代码格式 : #include <string.h> char *strerror(int errnum); 函数 strerror() 返回 errno.h 中定义的描述错误代码的字符串, 由 errnum 传递参数 该字符串必须没有被应用程序修改 没有哭函数将修改该字符串 返回值 : 函数 strerror() 返回合适的错误描述字符串, 在错误代码不明确的情况下返回未知的错误信息 的值 errno 调用成功时不会改变, 调用失败时被设置为非 0 值 20. memchr - 在内存中扫描某个字符格式 : #include <string.h> void *memchr(void *s, int c, size_t n); 函数 memchr() 扫描 s 所指向的内存区域中查找字符 c 在与 c 相匹配 ( 被翻译为 unsigned character) 的第一个字节处停止 返回值 : 函数 memchr() 返回与 c 相匹配的第一个字节 ; 否则返回 NULL 21. sinf - sine 函数 格式 : #include <math.h> 版权所有 55 / 69

56 float sinf(float x); 函数 sinf() 返回 x 的正弦值,x 是给定的弧度值 返回值 : 函数 sinf() 返回值在 -1~1 之间 22. cosf - cosine 函数格式 : #include <math.h> float cosf(float x); 函数 cosf() 返回 x 的余弦值,x 是给定的弧度值 返回值 : 函数 cosf() 返回值在 -1~1 之间 23. tanf - tangent 函数格式 : #include <math.h> float tan(float x); 函数 tanf() 返回 x 的正切值,x 是给定的弧度值 24. asinf - 反正弦函数格式 : #include <math.h> float asinf(float x); 函数 asinf() 计算 x 的反正弦值 ; 即其正弦值为 x 若 x 在 -1~1 的范围外,asinf() 调用失败, 设置为 errno 返回值 : 函数 asinf() 返回弧度的反正弦值, 且值被定义在 -PI/2 ~ PI/2( 包括边界 ) 之间 25. acosf - 反余弦函数格式 : #include <math.h> float acosf(const float x); 函数 acosf() 计算 x 的反余弦值 ; 其余弦值为 x 若 x 在 -1~1 的范围外,acosf() 调用失败, 设 版权所有 56 / 69

57 置为 errno 返回值 : 函数 acosf() 返回弧度的反余弦值, 且值被定义在 0 ~ PI ( 包括边界 ) 之间 26. atanf - 反正切函数格式 : #include <math.h> float atanf(const float x); 函数 atanf() 计算 x 的反正切值 ; 即其正切值为 x 返回值 : 函数 atanf() 返回弧度的反正切值, 且其值在 -PI/2 ~PI/2 ( 包含边界 ) 范围内 27. atan2f - 含有两个变量的反正切函数格式 : #include <math.h> float atan2f(float y, float x); 函数 atanf() 计算 x 和 y 的反正切值 除两个参数都用于决定结果是否为 90 外, 与计算 y/x 的反正切值相似 返回值 : 函数 atanf() 返回值为弧度, 在 -PI ~ PI( 包括边界 ) 范围内 28. sinhf - 双曲线正弦函数格式 : #include <math.h> float sinhf(float x); 函数 sinhf() 返回 x 的双曲线正弦值, 被定义为 :(exp(x) - exp(-x)) / coshf - 双曲线余弦函数格式 : #include <math.h> float coshf(float x); 函数 coshf() 返回 x 的双曲线余弦值, 被定义为 :(exp(x) + exp(-x)) / tanhf - 双曲线正切函数 版权所有 57 / 69

58 格式 : #include <math.h> float tanhf(float x); 函数 tanhf() 返回 x 的双曲线正切值, 被定义为 :sinhf(x) / coshf(x) 31. Expf - 幂函数格式 : #include <math.h> float expf(float x); 函数 expf() 返回 e( 自然对数体系中的底数 ) 的 x 次方所得的幂值 32. logf - 对数函数格式 : #include <math.h> float logf(float x); 函数 logf() 返回 x 的自然对数 log10f - 对数函数格式 : #include <math.h> float log10f(float x); 函数 log10f() 返回参数 x 以 10 为底的对数 33. powf - 幂函数格式 : #include <math.h> float powf(float x, float y); 函数 powf() 返回以 x 为底的 y 次幂 34. sqrtf - 平方根函数格式 : #include <math.h> float sqrt(float x); 版权所有 58 / 69

59 函数 sqrtf() 返回 x 的非负数平方根 若调用失败, 若 x 为负数, 这设置 errno 为 EDOM 35. fabsf - 浮点数绝对值函数格式 : #include <math.h> float fabsf(float x); 函数 fabsf 返回浮点数 x 的绝对值 36. frexpf - 将浮点数分为整数部分和小数部分的函数格式 : #include <math.h> float frexpf(float x, int *exp); 函数 frexpf() 用于建 x 分解为标准小数和 exp 中的指数两个部分返回值 : 函数 frexpf() 返回标准小数 若 x 不是 0, 标准小数是 2 的 x 次方所得的幂, 范围在 1/2( 包含 1/2) ~1( 不包含 1) 之间 若 x 为 0, 标准小数值为 0 且被存放至 exp 中 37. ldexpf - 浮点数与以 2 为底的幂的乘法格式 : #include <math.h> float ldexpf(float x, int exp); 函数 ldexpf() 返回参数 x 与 2 的 exp 次方的乘积 :x* (2 exp) 38. ceilf - ceiling 函数 : 不小于参数的最小整数格式 : #include <math.h> float ceilf(float x); 该函数找到不小于 x 的最近整数 返回值 : 函数返回参数不小于 x 的最小整数 若 x 是整数或无穷大, 返回 x 本身 39. floorf - 查找不大于参数的最大整数的函数 格式 : #include <math.h> 版权所有 59 / 69

60 float floor(float x); 查找不大于 x 的最近整数 返回值 : 函数返回参数不大于 x 的最大整数 若 x 为整数或者无穷大, 返回 x 本身 40. modff - 该函数将浮点数分割为小数部分和整数部分 格式 : #include <math.h> float modff(float x, float * y); 函数 modff 将浮点数 x 分割为小数部分和整数部分, 两部分均与 x 的标记相同 返回 x 的已标记小数部分 将整数部分存储为浮点数 y 返回值 : 该函数返回 x 的已标记小数部分 无返回错误 41. fmodf - 浮点数求余函数格式 : #include <math.h> float fmodf(float x, float y); 函数计算参数 x/y 的余数 返回 x - n * y, 其中 n 为 x/y 的商, 在 0 到整数范围里 返回值 : 函数返回参数 x/y 的余数, 除非为 0, 在函数调用失败时, 设置 errno 42. atof - convert a string to a double 格式 : #include <stdlib.h> float atof(const char * nptr); 函数 atof() 将 nptr 所指的字符串初始位置转换为 double 类型 返回值 : 转换后的值 43. atoi, atol- 将字符串转换为整数格式 : #include <stdlib.h> int atoi(const char * nptr); 版权所有 60 / 69

61 long atol(const char * nptr); 函数 atoi() 将 nptr 指向的字符串初始位置转换为 int 类型函数 atol() 转换字符串初始位置为其返回值类型 long 返回值 : 转换后的值 44. abs- 计算整数的绝对值格式 : #include <stdlib.h> int abs(int j); 函数 abs() 计算整数参数 j 的绝对值 返回值 : 返回函数参数相应类型的绝对值 45. labs- 计算整数的绝对值格式 : #include <stdlib.h> long int labs(long j); 函数 labs() 计算函数参数 j 的绝对值 返回值 : 返回函数参数相应类型的绝对值 46. div - 计算整数除法的商和余数格式 : #include <stdlib.h> div_t div(int numer, int denom); 函数 div() 计算 numer/denom 的值, 并返回包含两个成员 quot 和 rem 的 div_t 结构体的商和余数 返回值 : The div_t structure 47. ldiv - 计算 long int 型整数的商和余数 格式 : #include <stdlib.h> 版权所有 61 / 69

62 ldiv_t ldiv(long int numer, long int denom); 函数 div() 计算 numer/denom 的值, 并返回包含两个 long int 成员 (quot 和 rem) 的 ldiv_t 结构体的商和余数 商与 0 接近 返回值 : 机构体 ldiv_t 48. rand - 产生随机数字格式 : #include <stdlib.h> int rand(void); 函数 rand() 返回 0 ~ RAND_MAX 间的一个伪随机整数 若提供了随机数种子值 (seed value),rand() 则自动赋值为 1 返回值 : 函数 rand() 返回 0 ~ RAND_MAX 中的一个随机值 49. srand - 产生随机数字格式 : #include <stdlib.h> void srand(unsigned int seed); 函数 srand() 将其参数设置为序列种子, 并返回伪随机整数序列 这些序列是重复调用相同种子值的 srand() 产生的 若未提供种子值,srand() 则自动赋值为 1 返回值 : 不返回任何值 50. strtol - 将字符串转换为 long 类型格式 : #include <stdlib.h> long strtol(const char *nptr, char **endptr, int base); 函数 strtol() 根据所给的基数, 将 nptr 中字符串的初始位置转换为一个 long int 值, 范围 2 ~ 36 ( 包含边界值 ) 或者为特殊值 0 字符串须以任意个空格开头 ( 取决于 isspace(3)), 后面是 + 号或 - 号 若基数是 0 或者 16, 字符串可能要以 0x 开头的十六进制数 ; 否则, 以 0 为基数会被当作十进制数, 若后面的字符还是 0, 则是八进制数 版权所有 62 / 69

63 字符串的余数被转换为 long int 型, 在当前进制下的第一个不合法字符处结束 十进制中,A 在大小写的情况下都是 10,B 是 11, 以此类推,Z 为 35 若 endptr 非 NULL,strtol() 存储 *endptr 的第一个不合法字符 若没有任何数字,strtol() 存储 *endptr 中 nptr 的初始值, 并返回 0 若*nptr 不是 \0,**endptr 则返回 \0, 整个字符串是合法的 返回值 : 函数 strtol() 返回转换结果, 除非结果下溢或者上溢 若下溢,strtol() 返回 LONG_MIN; 若上溢,strtol() 返回 LONG_MAX 若两者同时发生,errno 被设置为 ERANGE 51. strtoul - 将字符串转换为 unsigned long 类型格式 : #include <stdlib.h> unsigned long strtoul(const char *nptr, char** endptr, int base); 函数 strtoul() 根据所给的基数, 将 nptr 中字符串的初始位置转换为一个 unsigned int 值, 范围 2 ~ 36 ( 包含边界值 ) 或者为特殊值 0 字符串须以任意个空格开头 ( 取决于 isspace(3)), 后面是 + 号或 - 号 若基数是 0 或者 16, 字符串可能要以 0x 开头的十六进制数 ; 否则, 以 0 为基数会被当作十进制数, 若后面的字符还是 0, 则是八进制数 字符串的余数被转换为 long int 型, 在当前进制下的第一个不合法字符处结束 十进制中,A 在大小写的情况下都是 10,B 是 11, 以此类推,Z 为 35 若 endptr 非 NULL,strtoul() 存储 *endptr 的第一个不合法字符 若没有任何数字,strtoul() 存储 *endptr 中 nptr 的初始值, 并返回 0 若*nptr 不是 \0,**endptr 则返回 \0, 整个字符串是合法的 返回值 : 函数 strtoul 返回转换结果 ; 若有负号存在而否定了转换结果, 除非初始值溢出,strtoul() 返回 ULONG_MAX 且将全局变量 errno 设置为 ERANGE 版权所有 63 / 69

64 附录一 RISC 指令集 RISC 内核目前有两种产品分别为 14 位和 16 位两种 16 位比 14 位多出几要指令 助记符 指令说明 周期数 影响标志位 ADDAR R R+A-->R 1 Z,DC,C ADDRA R R+A-->A 1 Z,DC,C ANDAR R R&A-->A 1 Z ANDRA R R&A-->R 1 Z CLRR R 0-->R 1 Z CLRA 0-->A 1 Z COMAR R /R-->A 1 Z COMRA R /R-->R 1 Z DECAR R R-1-->A 1 Z DECR R R-1-->R 1 Z DJZAR R R-1-->A,SKIP if 0 1(2) - DJZR R R-1-->R,SKIP if 0 1(2) - INCAR R R+1-->A 1 Z INCR R R+1-->R 1 Z JZAR R R+1-->A,SKIP if 0 1(2) - JZR R R+1-->R,SKIP if 0 1(2) - ORAR R R A-->A 1 Z ORRA R R A-->R 1 Z MOVAR R R-->A 1 Z MOVR R R-->R 1 Z MOVRA R A-->R 1 - RLAR R R<<1-->A 1 C RLR R R<<1-->R 1 C RRAR R R>>1-->A 1 C RRR R R>>1-->R 1 C 版权所有 64 / 69

65 RSUBAR R R-A-->A 1 Z,DC,C RSUBRA R R-A-->R 1 Z,DC,C SWAPAR R R 半字节交换 -->A 1 - SWAPR R R 半字节交换 -->R 1 - XORAR R R 异或 A-->A 1 Z XORRA R R 异或 A-->R 1 Z JBCLR R,b if R[b]==0,SKIP 1(2) - JBSET R,b if R[b]==1,SKIP 1(2) - BCLR R,b 0-->R[b] 1 - BSET R,b 1-->R[b] 1 - ADDAI I A+I-->A 1 Z,DC,C ANDAI I A&I-->A 1 Z ORAI I A I-->A 1 Z MOVAI I I-->A 1 - RETAI I Stack-->PC,I-->A 2 - ISUBAI I I-A-->A 1 Z,DC,C XORAI I A 异或 I-->A 1 Z ADCAI I I+A+C-->A 1 Z,DC,C ISBCAI I I-A-/C-->A 1 Z,DC,C MULAR R R*A -> HIBYTE,A 1 - MULRA R R*A -> HIBYTE,R 1 - ADCAR R R+A+C-->A 1 Z,DC,C ADCRA R R+A+C-->R 1 Z,DC,C RSBCAR R R-A-/C-->A 1 Z,DC,C RSBCRA R R-A-/C-->R 1 Z,DC,C ASUBAR R A-R-->A 1 Z,DC,C ASUBRA R A-R-->R 1 Z,DC,C ASBCAR R A-R-/C-->A 1 Z,DC,C ASBCRA R A-R-/C-->R 1 Z,DC,C 版权所有 65 / 69

66 CLRWDT 0-->WDTCNT 1 - RETIE Stack-->PC,1-->GIE 2 - RETURN Stack-->PC 2 - STOP 进入待机模式 1 - NOP None Operation 1 - DAA 加法后十进制调整 1 DC,C DSA 减法后十进制调整 1 DC,C CALL I I-->PC,PC-->Stack 2 - GOTO I I-->PC 2 - 版权所有 66 / 69

67 附录二 win 8.1 强制禁用数字签名方法 目前烧写软件 仿真软件安装驱动时需把我们的 Driver 中对应系统位文件夹中的 usbser.sys 文件拷贝到 C:\Windows\System32\drivers 中, 然后才能进行驱动程序的安装 由于 win8 对 第三方数字签名要求严格, 故给出在 win8 中针对禁用数字签名的方法, 如下 : 1. 按 Win+C 组合键, 调出 Charm 菜单 设置 2. 点选左边设置选项卡中的常规菜单, 再点击右边的立即启动即会重启电脑 3. 来到这个选项卡界面, 点选疑难解答选项 4. 再在高级选项中选择 Windows 启动设置, 继续点选重新启动 5. 然后会来到这个设置界面, 选择禁用驱动程序强制签名 ( 或按 F7 键 ) 重启电脑即可 版权所有 67 / 69

68 版权所有 68 / 69

69 附录三 SM112X 芯片仿真 SM110X 说明 使用 SM112X 仿真芯片编写 SM110X 程序, 配置位 P0SEL,P0RES,LOADS,RCOUT 都必须设置 1 版权所有 69 / 69

新版 明解C言語入門編

新版 明解C言語入門編 328, 4, 110, 189, 103, 11... 318. 274 6 ; 10 ; 5? 48 & & 228! 61!= 42 ^= 66 _ 82 /= 66 /* 3 / 19 ~ 164 OR 53 OR 164 = 66 ( ) 115 ( ) 31 ^ OR 164 [] 89, 241 [] 324 + + 4, 19, 241 + + 22 ++ 67 ++ 73 += 66

More information

新・明解C言語入門編『索引』

新・明解C言語入門編『索引』 !... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177

More information

手册 doc

手册 doc 1. 2. 3. 3.1 3.2 3.3 SD 3.4 3.5 SD 3.6 3.7 4. 4.1 4.2 4.3 SD 4.4 5. 5.1 5.2 5.3 SD 6. 1. 1~3 ( ) 320x240~704x288 66 (2G SD 320x2401FPS ) 32M~2G SD SD SD SD 24V DC 3W( ) -10~70 10~90% 154x44x144mm 2. DVR106

More information

附錄C.doc

附錄C.doc C C C-1 C -2 C -3 C -4 C -5 / C -6 2 C/C++ C-1 FILE* fopen(const char* filename, const char* mode) filename NULL FILE* freopen(const

More information

新・解きながら学ぶC言語

新・解きながら学ぶC言語 330!... 67!=... 42 "... 215 " "... 6, 77, 222 #define... 114, 194 #include... 145 %... 21 %... 21 %%... 21 %f... 26 %ld... 162 %lf... 26 %lu... 162 %o... 180 %p... 248 %s... 223, 224 %u... 162 %x... 180

More information

新版 明解C++入門編

新版 明解C++入門編 511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,

More information

untitled

untitled 串 串 例 : char ch= a ; char str[]= Hello ; 串 列 ch=getchar(); scanf( %c,&ch); 串 gets(str) scanf( %s,str); 8-1 數 ASCII 例 : char ch= A ; printf( %d,ch); // 65 A ascii =0x41 printf( %c,ch); // A 例 : char ch;

More information

2.5 idlocs PIC idloc idloc 0x1234 ; 0x config idloc HEX errorlevel errorlevel Error (Warning) Message HEX 3-14 errorlevel

2.5 idlocs PIC idloc idloc 0x1234 ; 0x config idloc HEX errorlevel errorlevel Error (Warning) Message HEX 3-14 errorlevel 3.2.3 MPASM PIC 35 35 #include include #include MPASM include PIC MPLAB C:\Program Files\MPLAB IDE\MCHIP_Tools PIC.inc 3-01 #include ; PIC16F877A #include math.asm ; 3-01 MPASM MPLAB

More information

M8Rxxx 指令集说明 Version 年 11 月 上海磐芯电子有限公司 SHANGHAI MASSES ELECTRONIC Co., Ltd. 本公司保留对产品在可靠性, 功能和设计方面的改进作进一步说明的权利 说明文档的更改, 恕不另行通知

M8Rxxx 指令集说明 Version 年 11 月 上海磐芯电子有限公司 SHANGHAI MASSES ELECTRONIC Co., Ltd. 本公司保留对产品在可靠性, 功能和设计方面的改进作进一步说明的权利 说明文档的更改, 恕不另行通知 M8Rxxx 指令集说明 Version 1.04 2014 年 11 月 上海磐芯电子有限公司 SHANGHAI MASSES ELECTRONIC Co., Ltd. 本公司保留对产品在可靠性, 功能和设计方面的改进作进一步说明的权利 说明文档的更改, 恕不另行通知 修正记录 版本 日期 描述 Ver1.02 2014-5-15 补全指令说明 Ver1.03 2014-10-8 勘误 Ver1.04

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

第5章:汇编语言程序设计

第5章:汇编语言程序设计 第 5 章 : 汇编语言程序设计 程 汇编语言指令格式 系统伪指令 存储器选择方式 常用子程序 1 汇编语言程序设计 PIC 指令系统 语言系统 指 CPU 编 器语言 器语言 器语言 设计 用 语言 设计 语言 汇编语言 2 汇编语言指令格式 汇编语言指令格式 ( 指令 ) label opcode operand comment 指令 用 存 指令 指令语 3 汇编语言指令格式 1 指令 用 指令

More information

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464>

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464> 第 1 章 进入 Photoshop 的全新世界 本章导读 Photoshop 1 1.1 Photoshop CS6 Photoshop Photoshop 1.1.1 Photoshop POP 1-1 图 1-1 平面广告效果 1.1.2 Photoshop 1-2 Photoshop CS6 Photoshop CS6 Photoshop CS6 Extended 3D 3 Photoshop

More information

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File 51 C 51 51 C C C C C C * 2003-3-30 pnzwzw@163.com C C C C KEIL uvision2 MCS51 PLM C VC++ 51 KEIL51 KEIL51 KEIL51 KEIL 2K DEMO C KEIL KEIL51 P 1 1 1 1-1 - 1 Project New Project 1 2 Windows 1 3 N C test

More information

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63> 第三章 Q3 1 1. 省略了 I/O 操作的复杂逻辑, 易实现, 耗费低 ; 2. 可以利用丰富的内存寻址模式实现灵活的 I/O 操作 Q3 2 假设存储单元 ds1 处寄存器地址为 0x2000, 代码如下 #define ds1 0x2000 while ( *ds1 == 0 ) ; Q3 3 假设设备 (dev1) 中有两个寄存器 ds1 和 dd1,dev1 的地址为 0x1000,ds1

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

学习MSP430单片机推荐参考书

学习MSP430单片机推荐参考书 MSP430 16 MSP430 C MSP430 C MSP430 FLASH 16 1 CPU 16 ALU 16 PC SP SR R4~R15 2 3 00-FFH 100-1FFH 4 5 1 2 51 24 27 6 1 2 3 4 5 6 4 12 SR SP SR CPU SR CPU C Z N GIE CPUOff CPU OscOff SCG0 SCG1 CPU EXIT SP

More information

C 1

C 1 C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=

More information

51 C 51 isp 10 C PCB C C C C KEIL

51 C 51 isp 10   C   PCB C C C C KEIL http://wwwispdowncom 51 C " + + " 51 AT89S51 In-System-Programming ISP 10 io 244 CPLD ATMEL PIC CPLD/FPGA ARM9 ISP http://wwwispdowncom/showoneproductasp?productid=15 51 C C C C C ispdown http://wwwispdowncom

More information

Microsoft PowerPoint - 01_Introduction.ppt

Microsoft PowerPoint - 01_Introduction.ppt Hello, World C 程序设计语言 第 1 章章观其大略 孙志岗 sun@hit.edu.cn http://sunner.cn prf("hello,, world\n"); 超级无敌考考你 : 如何把 hello 和 world 分别打印在两行? 2004-12-19 A Tutorial Introduction 2 hello.c 打印华氏温度与摄氏温度对照表 计算公式 : C=(5/9)(

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; Memory & Pointer trio@seu.edu.cn 2.1 2.1.1 1 int *p int a 0x00C7 0x00C7 0x00C7 2.1.2 2 int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; 2.1.3 1. 2. 3. 3 int A,

More information

Microsoft Word - CX1000-HMI_程序开发_PLC通讯

Microsoft Word - CX1000-HMI_程序开发_PLC通讯 用 VB.Net 开发 CX1000 的 HMI 第二部分和 TwinCAT PLC 通讯 一 TwinCAT 动态库 TwinCAT.Ads.dll The TwinCAT.Ads.dll 是一个.NET 类库, 它提供和 ADS 设备通讯的类 如果 TwinCAT PLC 运行在 IPC 上, 则需要添加的类库是路径 \TwinCAT\ADS Api\.NET\v1.1.4322 下的 TwinCAT.Ads.dll

More information

F515_CS_Book.book

F515_CS_Book.book /USB , ( ) / L R 1 > > > 2, / 3 L 1 > > > 2 + - 3, 4 L 1 了解显示屏上显示的图标 Wap 信箱收到一条 Wap push 信息 ( ) GSM 手机已连接到 GSM 网络 指示条越多, 接收质量越好 2 ...........................4.............................. 4 Micro SD (

More information

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式] Arrays and Strings 存储同类型的多个元素 Store multi elements of the same type 数组 (array) 存储固定数目的同类型元素 如整型数组存储的是一组整数, 字符数组存储的是一组字符 数组的大小称为数组的尺度 (dimension). 定义格式 : type arrayname[dimension]; 如声明 4 个元素的整型数组 :intarr[4];

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 177 [P179] (1) - [P181] [P182] (2) - for [P183] (3) - switch [P184] [P187] [P189] [P194] 178 [ ]; : : int var; : int var[3]; var 2293620 var[0] var[1] 2293620

More information

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit 6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C51 6.1 C51 6.1.1 C51 C51 ANSI C MCS-51 C51 ANSI C C51 6.1 6.1 C51 bit Byte bit sbit 1 0 1 unsigned char 8 1 0 255 Signed char 8 11 128

More information

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony Ioncube Php Encoder 8 3 Crack 4 ->>->>->> DOWNLOAD 1 / 5 2 / 5 Press..the..General..Tools..category4Encrypt..and..protect..files..with..PHP..encoding,..encryption,..ob fuscation..and..licensing... 2016

More information

ARM中C和汇编混合编程及示例.doc

ARM中C和汇编混合编程及示例.doc ARM 中 C 和汇编混合编程及示例 在嵌入式系统开发中, 目前使用的主要编程语言是 C 和汇编,C++ 已经有相应的编译器, 但是现在使用还是比较少的 在稍大规模的嵌入式软件中, 例如含有 OS, 大部分的代码都是用 C 编写的, 主要是因为 C 语言的结构比较好, 便于人的理解, 而且有大量的支持库 尽管如此, 很多地方还是要用到汇编语言, 例如开机时硬件系统的初始化, 包括 CPU 状态的设定,

More information

untitled

untitled MODBUS 1 MODBUS...1 1...4 1.1...4 1.2...4 1.3...4 1.4... 2...5 2.1...5 2.2...5 3...6 3.1 OPENSERIAL...6 3.2 CLOSESERIAL...8 3.3 RDMULTIBIT...8 3.4 RDMULTIWORD...9 3.5 WRTONEBIT...11 3.6 WRTONEWORD...12

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

目录

目录 ALTERA_CPLD... 3 11SY_03091... 3 12SY_03091...4....5 21 5 22...8 23..10 24..12 25..13..17 3 1EPM7128SLC.......17 3 2EPM7032SLC.......18 33HT46R47......19..20 41..20 42. 43..26..27 5151DEMO I/O...27 52A/D89C51...28

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

Microsoft Word - word2007排版

Microsoft Word - word2007排版 目 录 目 录 第 一 章 排 版 前 准 备 工 作... 1 1.1 排 版 基 本 术 语... 1 1.1.1 开 本... 1 1.1.2 扉 页... 1 1.1.3 版 心... 1 1.1.4 版 面... 1 1.1.5 页 眉 和 页 脚... 1 1.2 导 入 文 本... 2 1.3 基 本 编 辑 操 作... 2 1.3.1 选 定 文 本 内 容... 2 1.3.2

More information

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

C/C++ - 函数

C/C++ - 函数 C/C++ Table of contents 1. 2. 3. & 4. 5. 1 2 3 # include # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh

More information

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha CYPOK CYPOK 1 UltraEdit Project-->Install Language Tool: Language Suite----->hi-tech picc Tool Name ---->PICC Compiler Executable ---->c:hi-picinpicc.exe ( Command-line Project-->New Project-->File Name--->myc

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

FA-3000_Ver1.00

FA-3000_Ver1.00 FA-3000 1.00 TW Windows FA-3000 FA-3000 CASIO COMPUTER CO., LTD. Microsoft Windows Windows Vista Excel Aero Microsoft Corporation CASIO COMPUTER CO., LTD. CASIO COMPUTER CO., LTD. TM 2015 CASIO COMPUTER

More information

C/C++ - 字符串与字符串函数

C/C++ - 字符串与字符串函数 C/C++ Table of contents 1. 2. 3. 4. 1 char C 2 char greeting [50] = " How " " are " " you?"; char greeting [50] = " How are you?"; 3 printf ("\" Ready, go!\" exclaimed John."); " Ready, go!" exclaimed

More information

《C语言程序设计》第2版教材习题参考答案

《C语言程序设计》第2版教材习题参考答案 教材 C 语言程序设计 ( 第 2 版 ) 清华大学出版社, 黄保和, 江弋编著 2011 年 10 月第二版 ISBN:978-7-302-26972-4 售价 :35 元 答案版本 本习题答案为 2012 年 2 月修订版本 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p = &a A. *p = *a B. p = *a C.p = &a D. *p =

More information

c_cpp

c_cpp C C++ C C++ C++ (object oriented) C C++.cpp C C++ C C++ : for (int i=0;i

More information

X713_CS_Book.book

X713_CS_Book.book / / /USB ) ; ; C D ; ; B B 1 >> 2 3 B 1 ( > > ) 了解显示屏上显示的图标 Wap 信箱收到一条 Wap push 信息 GSM GPS ( ) 手机已连接到 GSM 网络 指示条越多, 接收质量越好 GPS 2 ...........................4.............................. 4 Micro SD (

More information

<4D F736F F D205A572D2D A1AAA1AAD4ACE7F42D43D3EFD1D4CAB5D1B5BDCCB3CC2E646F6378>

<4D F736F F D205A572D2D A1AAA1AAD4ACE7F42D43D3EFD1D4CAB5D1B5BDCCB3CC2E646F6378> 第 1 部分 Visual Studio 6.0 开发环境介绍 本书以 Visual C++ 6.0 作为 C 源程序的实践开发环境, 本章将首先介绍 Visual C++ 6.0 环境的基本操作, 包括 Visual C++ 6.0 的安装和启动,C 源程序的编辑 运行与调试 1.1 安装与启动 Visual C++ 6.0 MSDN Visual C++ 6.0 1.1 Microsoft Visual

More information

Microsoft Word - 在VMWare-5.5+RedHat-9下建立本机QTopia-2.1.1虚拟平台a.doc

Microsoft Word - 在VMWare-5.5+RedHat-9下建立本机QTopia-2.1.1虚拟平台a.doc 在 VMWare-5.5+RedHat-9 下建立 本机 QTopia-2.1.1 虚拟平台 张大海 2008-5-9 一 资源下载 1. 需要以下安装包 : tmake-1.13.tar.gz qtopia-free-source-2.1.1.tar.gz qt-embedded-2.3.10-free.tar.gz qt-x11-2.3.2.tar.gz qt-x11-free-3.3.4.tar.gz

More information

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor 1 4.1.1.1 (Load) 14 1.1 1 4.1.1.2 (Save) 14 1.1.1 1 4.1.2 (Buffer) 16 1.1.2 1 4.1.3 (Device) 16 1.1.3 1 4.1.3.1 (Select Device) 16 2 4.1.3.2 (Device Info) 16 2.1 2 4.1.3.3 (Adapter) 17 2.1.1 CD-ROM 2 4.1.4

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 TEMPLATE 1 Template 描述 使用模板函数求最大值 使用如下 main 函数对程序进行测试 int main() { double a, b; cin >> a >> b; cout c >> d; cout

More information

程序 14-9 linux/include/string.h 1 #ifndef _STRING_H_ 2 #define _STRING_H_ 3 4 #ifndef NULL 5 #define NULL ((void *) 0) 6 #endif 7 8 #ifndef _SIZE_T 9 #

程序 14-9 linux/include/string.h 1 #ifndef _STRING_H_ 2 #define _STRING_H_ 3 4 #ifndef NULL 5 #define NULL ((void *) 0) 6 #endif 7 8 #ifndef _SIZE_T 9 # 程序 14-9 linux/include/string.h 1 #ifndef _STRING_H_ 2 #define _STRING_H_ 3 4 #ifndef NULL 5 #define NULL ((void *) 0) 6 #endif 7 8 #ifndef _SIZE_T 9 #define _SIZE_T 10 typedef unsigned int size_t; 11 #endif

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,

More information

Converting image (bmp/jpg) file into binary format

Converting image (bmp/jpg) file into binary format RAiO Image Tool 操作说明 Version 1.0 July 26, 2016 RAiO Technology Inc. Copyright RAiO Technology Inc. 2013 RAiO TECHNOLOGY INC. www.raio.com.tw Revise History Version Date Description 0.1 September 01, 2014

More information

Date: :32:44 若要重复运行上面的命令, 也可以在调试程序的提示符处按 E n t e r 键 Date: :35:25 若要设置断点, 必须在程序中选定一个要停止运行的位置 命令 l 用于列出程序的下面 1 0 行 再次键 l, 可以列出下面的

Date: :32:44 若要重复运行上面的命令, 也可以在调试程序的提示符处按 E n t e r 键 Date: :35:25 若要设置断点, 必须在程序中选定一个要停止运行的位置 命令 l 用于列出程序的下面 1 0 行 再次键 l, 可以列出下面的 Summary of Comments on ebook65-12 Page: 1 Date: 2001-8-5 21:25:15 P e r l 的 - d 开关可使 P e r l 以调试方式启动运行 命令行上也指明了被调试的程序 Page: 2 Date: 2001-8-5 21:26:01 每当调试程序向你显示程序中的一个语句时, 它就是准备要执行的语句, 而不是上一个运行的语句 Date:

More information

没有幻灯片标题

没有幻灯片标题 指针作为函数参数 : 原因 : 1 需要修改一个或多个值,( 用 return 语句不能解决问题 ) 2 执行效率的角度 使用方法 : 在函数原型以及函数首部中需要声明能够接受指针值的形参, 具体的写法为 : 数据类型 * 形参名 如果有多个指针型形参, 则用逗号分隔, 例如 : void swap(int *p1, int *p2) 它说明了形参 p1 p2 是指向整型变量的指针 在函数调用时,

More information

Microsoft Word - install_manual-V _CN.docx

Microsoft Word - install_manual-V _CN.docx NO TASK Q-Sign Install Manual PAGE 1/28 Q-Sign INSTALL MANUAL Version 3.0 Server Manager Client Codec NO TASK Q-Sign Install Manual PAGE 2/28 History DATE Contents Name Ver. Remark 2009-02-11 Q-Sign Ver.

More information

Microsoft PowerPoint - string_kruse [兼容模式]

Microsoft PowerPoint - string_kruse [兼容模式] Strings Strings in C not encapsulated Every C-string has type char *. Hence, a C-string references an address in memory, the first of a contiguous set of bytes that store the characters making up the string.

More information

Microsoft Word - Codewarrior IDE快速入门.docx

Microsoft Word - Codewarrior IDE快速入门.docx Codewarrior IDE 快速入门 本章我们以 Codewarrior HC08 V3.1 为例, 创建一个工程, 编辑源文件, 编译后进行调试 1 创建新项目 打开 codewarrior IDE 后, 出现如图 2.1 的界面 在 File 菜单中选择 New 图 2.1 codewarrior 在弹出的新窗口中, 选择 HC(S)08 New Project Wizard, 在 Project

More information

C/C++ - 文件IO

C/C++ - 文件IO C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;

More information

untitled

untitled 不 料 料 例 : ( 料 ) 串 度 8 年 數 串 度 4 串 度 數 數 9- ( ) 利 數 struct { ; ; 數 struct 數 ; 9-2 數 利 數 C struct 數 ; C++ 數 ; struct 省略 9-3 例 ( 料 例 ) struct people{ char name[]; int age; char address[4]; char phone[]; int

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 30 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : /// <summary> /// 测试方法

ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 30 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : /// <summary> /// 测试方法 ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 0 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : 0 /// 测试方法 : 测试将 DataTable 导出到 EXCEL, 无模板 public void TestExportToExcelByDataTable() string excelpath

More information

* 4 6 R P r p . 1 2 3 4 7 89bk 6 5 1 2 3 4 5 6 7 8 9 0 bk r bl bm bn^ bo bl br bq bpbo bn bm [ ] [ ] [ ] bp 8 2 4 6 bq p [ ] [SET] br clckbt bs bs bt ck cl. 1 2 1 2+- 3 3 . 1 2 3 4 5 6 7 8 9 bk bl bm

More information

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1 21 , 7, Windows,,,, : 010-62782989 13501256678 13801310933,,,, ;,, ( CIP) /,,. : ;, 2005. 11 ( 21 ) ISBN 7-81082 - 634-4... - : -. TP316-44 CIP ( 2005) 123583 : : : : 100084 : 010-62776969 : 100044 : 010-51686414

More information

Using STM32 Software Library

Using STM32 Software Library 如何使用 STM32 的软件库在 IAR 的 EWARM 下 进行应用开发 上海 步骤一 : 创建项目目录, 拷贝公共文件 1 将 STM32 软件库中 FWlib 目录中的 library 目录拷贝到所建项目的目录中 2 将软件库的 Examples 目录里的任一例程的 stm32f10x_conf.h stm32f10x_it.c stm32f10x_it.h 和 main.c 拷贝到项目的目录中

More information

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple halcon 与 C# 混合编程之 Halcon 代码调用 写在前面 完成 halcon 与 C# 混合编程的环境配置后, 进行界面布局设计构思每一个按钮所需要实现 的功能, 将 Halcon 导出的代码复制至相应的 C# 模块下即可 halcon 源程序 : dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image,

More information

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

Introduction to Computer Systems /18-243, spring st Lecture, Jan. 12th

Introduction to Computer Systems /18-243, spring st Lecture, Jan. 12th 计算机组成原理习题课 1 授课老师 : 王浩宇 haoyuwang@bupt.edu.cn 1 练习 : 机器数的表示和相互转化 练习 1: 当十六进制数 9B 和 FF 分别表示为原码 补码 反码 移码和无符号数时, 所对应的十进制数各为多少 ( 设机器数采用一位符号位 )? 16 进制 真值 无符号数 原码 ( 真值 ) 反码 ( 真值 ) 补码 ( 真值 ) 移码 ( 真值 ) 9BH 二进制十进制

More information

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式] 指针 Pointers 变量指针与指针变量 Pointer of a variable 变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++

More information

PIC16F F MPLAB 08 16F LED 15 LED

PIC16F F MPLAB 08 16F LED 15 LED PIC16F877 PIC16F877 03 16F877 05 06 MPLAB 08 16F877 13 LED 15 LED 17 20 24 2 PIC16F877 PIC16F877 DIP VDD VSS CLOCK CPU :,AND,OR,XOR ROM: CPU ROM RAM: CPU,CPU I/O:CPU, CPU,, 16F877 RAM 512 128 Bank Bank

More information

32??????QuickStart [????????]

32??????QuickStart [????????] 32 位项目开发 QuickStart 作者卢昊部门软件部日期 2016.06 版权所有 上海东软载波微电子有限公司 一 :Keil 开发环境插件安装二 :Keil+J-link 仿真调试三 :idesigner4.1 开发环境及项目转换四 :idesigner4.1 仿真调试五 : ESBurner_HRLink 版权所有 上海东软载波微电子有限公司 Keil 开发环境插件安装 Keil 安装好后,

More information

WINAVR 中文教程

WINAVR 中文教程 WINAVR 中文教程 一 安装 WINAVR 是一款开发 AVR 系列单片机的免费编译软件 您可以在 网上搜索或者到 www.qm999.cn 中资源下载栏目中下载 安装完 WINAVR 的菜单 二 建立项目 运行 Programmers Notedpad [WinAVR] 1 建立项目组, 如下图 : 2 建立项目, 如下图 : 输入工程名 :first 放在目录 D:\tt 下 3 在新建的文件中输入第一个程序,

More information

C/C++ 语言 - 循环

C/C++ 语言 - 循环 C/C++ Table of contents 7. 1. 2. while 3. 4. 5. for 6. 8. (do while) 9. 10. (nested loop) 11. 12. 13. 1 // summing.c: # include int main ( void ) { long num ; long sum = 0L; int status ; printf

More information

Microsoft Word - MAN2011A_CH_RTT.doc

Microsoft Word - MAN2011A_CH_RTT.doc 基于 SAM7X EK 和 IAR EWARM 文档编号 文档版本 Rev. A 文档摘要 基于 AT91SAM7X EK 开发板的代码解读,RTT 代码解读 关键词 AT91SAM7X256 SAM7X EK IAR EWARM J LINK RTT 创建日期 2010 06 08 创建人员 Cust126 审核人员 Robin 文档类型 公开发布 / 开发板配套文件 版权信息 Mcuzone 原创文档,

More information

C语言的应用.PDF

C语言的应用.PDF AVR C 9 1 AVR C IAR C, *.HEX, C,,! C, > 9.1 AVR C MCU,, AVR?! IAR AVR / IAR 32 ALU 1KBytes - 8MBytes (SPM ) 16 MBytes C C *var1, *var2; *var1++ = *--var2; AVR C 9 2 LD R16,-X ST Z+,R16 Auto (local

More information

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3 浙江大学 C 程序设计及实验 试题卷 2002-2003 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:30-10:30 注意 : 答题内容必须写在答题卷上, 写在本试题卷上无效 一. 单项选择题 ( 每题 1 分, 共 10 分 ) 1. 下列运算符中, 优先级最低的是 A.

More information

的 汉 字, 再 选 择 格 式 中 文 版 式 拼 音 指 南 选 项, 在 拼 音 指 南 对 话 框 中 单 击 组 合 按 钮, 如 图 1-1 所 示, 则 将 拼 音 文 字 复 制 粘 贴 到 正 文 中, 同 时 还 可 删 除 不 需 要 的 基 准 文 字 图 1-1 拼 音 指

的 汉 字, 再 选 择 格 式 中 文 版 式 拼 音 指 南 选 项, 在 拼 音 指 南 对 话 框 中 单 击 组 合 按 钮, 如 图 1-1 所 示, 则 将 拼 音 文 字 复 制 粘 贴 到 正 文 中, 同 时 还 可 删 除 不 需 要 的 基 准 文 字 图 1-1 拼 音 指 文字处理实战正文 第 1 章 Word 篇 1.1 文字录入技巧 1.1.1 叠字轻松输入 在汉字中经常遇到重叠字 比如 爸爸 妈妈 欢欢喜喜 等 在 Word 中输 入时除了利用输入法自带的功能快速输入外 还有没有其他办法轻松进行输入呢 答 在 Word 中提供了一个这样的功能 只需通过组合键 Alt+Enter 便可轻松输 入 如在输入 爸 字后 按组合键 Alt+Enter 便可再输入一个 爸

More information

概述 基于 Cortex-M3 内核的 STM32F103 系列单片机, 并没有浮点运算协处理器 在 STM32F103 上进行的浮点运算都是软件模拟实现 考虑到加入浮点运算库需要大约 10K 左右的 FLASH 空间 ( 即 <math.h> 对应的数学库 ), 而且浮点运算速度较慢,EC30-E

概述 基于 Cortex-M3 内核的 STM32F103 系列单片机, 并没有浮点运算协处理器 在 STM32F103 上进行的浮点运算都是软件模拟实现 考虑到加入浮点运算库需要大约 10K 左右的 FLASH 空间 ( 即 <math.h> 对应的数学库 ), 而且浮点运算速度较慢,EC30-E 基于 EC30-EKSTM32 扩展浮点运算 CREATE: 2010/08/05 UPDATE: 2010/08/05 GUTTA Ladder Editor Version 1.1 Version 1.1 http://www.plcol.com http://www.visiblec.com 概述... 2 指令描述... 2 +R... 2 -R... 2 *R... 3 /R... 3 SQRT...

More information

1

1 1 2 3 4 5 GNUDebugger 6 7 void main(int argc, char **argv){ vulncpy(argv[1]); return; } void vulncpy(char *a){ char buf[30]; strcpy(buf, a); return; } *argv[1] buf Shellcode *argv[1]... &buf &buf 8 strcpy

More information

Computer Architecture

Computer Architecture ECE 3120 Computer Systems Assembly Programming Manjeera Jeedigunta http://blogs.cae.tntech.edu/msjeedigun21 Email: msjeedigun21@tntech.edu Tel: 931-372-6181, Prescott Hall 120 Prev: Basic computer concepts

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

C/C++ - 字符输入输出和字符确认

C/C++ - 字符输入输出和字符确认 C/C++ Table of contents 1. 2. getchar() putchar() 3. (Buffer) 4. 5. 6. 7. 8. 1 2 3 1 // pseudo code 2 read a character 3 while there is more input 4 increment character count 5 if a line has been read,

More information

C/C++程序设计 - 字符串与格式化输入/输出

C/C++程序设计 - 字符串与格式化输入/输出 C/C++ / Table of contents 1. 2. 3. 4. 1 i # include # include // density of human body : 1. 04 e3 kg / m ^3 # define DENSITY 1. 04 e3 int main ( void ) { float weight, volume ; int

More information

《计算概论》课程 第十九讲 C 程序设计语言应用

《计算概论》课程 第十九讲  C 程序设计语言应用 计算概论 A 程序设计部分 字符数组与字符串 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn 字符数组的定义 #include int main() char a[10] = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ; for (int i = 0; i < 10; i++) cout

More information

专注于做最好的嵌入式计算机系统供应商

专注于做最好的嵌入式计算机系统供应商 专注于做最好的嵌入式计算机系统供应商 基于 ARMSYS2440/2410 开发应用程序 (EVC&VS2005) Rev 1.0 2008 年 3 月 24 日 杭州立宇泰电子有限公司 HangZhou LiYuTai Elec.Co.,Ltd 开发应用程序的过程一般分两步, 第一步在 PC 机开发环境下设计和编译应用程序, 第二步将它下载到 目标系统, 也就是我们的 ARMSYS2440 平台上运行

More information

JLX

JLX PRODUCT:LCD MODULE. Model No.: JLX177-006 Product Type: 1.77 inch QVGA TFT Modoule. 产品规格书 晶联讯研发研发部 : Written By Checked By Approved By 客户名称 : 结构电子核准 地址 : 深圳市宝安区西乡宝安大道东华工业区 A3 栋 6 楼电话 :0755-29784961 Http://www.jlxlcd.cn

More information

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc 2 5 8 11 0 13 1. 13 2. 15 3. 18 1 23 1. 23 2. 26 3. 28 2 36 1. 36 2. 39 3. 42 4. 44 5. 49 6. 51 3 57 1. 57 2. 60 3. 64 4. 66 5. 70 6. 75 7. 83 8. 85 9. 88 10. 98 11. 103 12. 108 13. 112 4 115 1. 115 2.

More information

C/C++语言 - C/C++数据

C/C++语言 - C/C++数据 C/C++ C/C++ Table of contents 1. 2. 3. 4. char 5. 1 C = 5 (F 32). 9 F C 2 1 // fal2cel. c: Convert Fah temperature to Cel temperature 2 # include < stdio.h> 3 int main ( void ) 4 { 5 float fah, cel ;

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式]

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式] 函数 Function 如何重用代码 How to reuse code 3 4 = 3*3*3*3 3 4,6 5 : 拷贝 - 粘帖代码 (Copy-paste code) 3 4,6 5,12 10 : 拷贝 - 粘帖代码 (Copy-paste code) Bad! 使用函数 (with a function) 使用函数 (with a function) 使用函数 (with a function)

More information

fvalue = (pdata[y][i] + pdata[y][i + 1]) / 2; pdata[y][nhalfw + i] -= fvalue; fvalue = (pdata[y][nhalfw - 1] + pdata[y][nhalfw - 2]) / 2; pdata[y][nwi

fvalue = (pdata[y][i] + pdata[y][i + 1]) / 2; pdata[y][nhalfw + i] -= fvalue; fvalue = (pdata[y][nhalfw - 1] + pdata[y][nhalfw - 2]) / 2; pdata[y][nwi #include #include #include // 二维离散小波变换 ( 单通道浮点图像 ) void DWT(IplImage *pimage, int nlayer) // 执行条件 if (pimage) if (pimage->nchannels == 1 && pimage->depth == IPL_DEPTH_32F

More information

目 录(目录名)

目  录(目录名) 目录 目录...1-1 1.1 域名解析配置命令... 1-1 1.1.1 display dns domain... 1-1 1.1.2 display dns dynamic-host... 1-1 1.1.3 display dns server... 1-2 1.1.4 display ip host... 1-3 1.1.5 dns domain... 1-4 1.1.6 dns resolve...

More information

untitled

untitled 3 C++ 3.1 3.2 3.3 3.4 new delete 3.5 this 3.6 3.7 3.1 3.1 class struct union struct union C class C++ C++ 3.1 3.1 #include struct STRING { typedef char *CHARPTR; // CHARPTR s; // int strlen(

More information

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco Windows RTEMS 1 Danilliu MMI TCP/IP 80486 QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos ecos Email www.rtems.com RTEMS ecos RTEMS RTEMS Windows

More information

微机原理--汇编、连接和调试

微机原理--汇编、连接和调试 微机原理课程 汇编语言程序的编辑 汇编 连接和调试 西安电子科技大学 探测制导系 内容提要 编写汇编语言程序的五个重要步骤 编写源程序 汇编过程 连接过程 汇编语言编程过程 DEBUG 主要功能 DEBUG 命令 程序设计举例 结束语 编写汇编语言程序的五个重要步骤 1. 编写源程序, 如 L1.ASM 2. 汇编源程序, 得到目标代码,L1.OBJ 3. 目标代码文件的连接, 生成可执行文件 L1.EXE

More information

移动平台应用软件开发 C/C++/JAVA 基础 C 中的预处理指令 主讲 : 张齐勋 移动平台应用软件开发 课程建设小组北京大学二零一五年

移动平台应用软件开发 C/C++/JAVA 基础 C 中的预处理指令 主讲 : 张齐勋 移动平台应用软件开发 课程建设小组北京大学二零一五年 移动平台应用软件开发 C/C++/JAVA 基础 C 中的预处理指令 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组北京大学二零一五年 预处理 2 预处理器 C 语言的编译系统分为编译预处理和正式编译 预处理作用 : 对源程序编译之前做一些处理, 生成扩展 C 源程序 预处理器的行为是由预处理指令控制的 宏定义 文件包含 条件编译 #define #ifdef

More information

大侠素材铺

大侠素材铺 编译原理与技术 词法分析 Ⅱ 计算机科学与技术学院李诚 13/09/2018 主要内容 记号 (token) 源程序 词法分析器 getnexttoken 语法分析器 符号表 词法分析器的自动生成 正则表达式 NFA DFA 化简的 DFA 词法分析器的生成器 Lex: flex jflex Fst lexicl nlyzer genertor 2/51 Regulr Expr to NFA 正则表达式

More information

<4D F736F F D20CAB5D1E BACDBBE3B1E0D3EFD1D4B5C4BBECBACFB1E0B3CCCAB5D1E92E646F63>

<4D F736F F D20CAB5D1E BACDBBE3B1E0D3EFD1D4B5C4BBECBACFB1E0B3CCCAB5D1E92E646F63> 1 实验目的 实验 2 C 和汇编语言的混合编程实验 学习在 C 程序中使用嵌入式汇编编写程序 了解嵌入式汇编的格式 语言特点 2 实验设备 S3C2410 开发板 ADS1.2 集成开发环境,JTAG 调试器 串口连接线 3 实验原理 在 ARM 的应用开发中,C 语言功能强大且容易编写程序, 但是汇编程序在底层的操作仍然具有 C 程序无法替代的功能, 有时候我们需要在 C 程序中嵌入汇编程序来完成一些直接对底层的诸如寄存器的操作

More information