QJ 3300-2008 航天型号DSP-TMS系列汇编语言编程要求.pdf

上传人:周芸 文档编号:127105 上传时间:2019-07-06 格式:PDF 页数:13 大小:233.75KB
下载 相关 举报
QJ 3300-2008 航天型号DSP-TMS系列汇编语言编程要求.pdf_第1页
第1页 / 共13页
QJ 3300-2008 航天型号DSP-TMS系列汇编语言编程要求.pdf_第2页
第2页 / 共13页
QJ 3300-2008 航天型号DSP-TMS系列汇编语言编程要求.pdf_第3页
第3页 / 共13页
QJ 3300-2008 航天型号DSP-TMS系列汇编语言编程要求.pdf_第4页
第4页 / 共13页
QJ 3300-2008 航天型号DSP-TMS系列汇编语言编程要求.pdf_第5页
第5页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、 中华人民共和国航天行业标准FL 0112 QJ 33002008航天型号DSP-TMS系列 汇编语言编程要求 Requirements for DSP-TMS series assembly language programming of aerospace product 20080317发布 20081001实施国防科学技术工业委员会 发 布 QJ 33002008 I前言 本标准的附录A、附录B、附录C均为资料性附录。 本标准由中国航天科工集团公司提出。 本标准由中国航天标准化研究所归口。 本标准起草单位:中国航天科工集团公司第三研究院第三四研究所。 本标准主要起草人:于林宇、李昆、魏

2、伟波、陈义林、宋宇飞。 QJ 33002008 1航天型号DSP-TMS系列汇编语言编程要求 1 范围 本标准规定了采用TMS系列汇编语言编程的详细要求和约定。 本标准适用于采用TMS系列汇编语言编写的航天型号软件的开发与测试。 2 规范性引用文件 下列文件中的条款通过本标准的引用而成为本标准的条款。凡是注日期的引用文件,其随后所有 的修改单(不包含勘误的内容)或修订版均不适用于本标准,然而,鼓励根据本标准达成协议的各方研究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本标准。 GJB/Z 102 软件可靠性和安全性设计准则 3 术语和定义 下列术语和定义适用于本标准。

3、 3.1 程序模块 procedure module 用于完成特定功能的一组程序语句集合。 3.2 文件描述体 file description body 用于表述文件基本信息的注释行。 3.3 程序模块描述体 function description body 用于表述程序模块基本信息的注释行。 4 一般要求 4.1 程序编写应符合TMS系列汇编语言文本、GJB/Z 102的要求。 4.2 所有标识符应具有明显的含义,必要时可通过注释加以说明。 5 详细要求 5.1 程序文件 TMS系列汇编程序可由单个或多个文件组成,程序文件个数不宜超过14个。 一个程序文件一般包括文件描述体、引用声明、变

4、常量声明、程序模块等部分,在程序设计过程中,还应根据相关语言的具体要求进行调整。 以TMS320C30汇编程序为例,其文件结构一般由以下部分构成:文件描述体、外部引用声明、数据段、常量段、矢量段、主程序模块(一个软件只能有一个主程序模块)、子程序模块,其样例参见附录A。 5.2 程序模块 QJ 33002008 2程序模块在实现过程中应遵循以下原则: a) 程序模块应采用结构化编程方式; b) 每个程序模块应做到单入口、单出口; c) 程序模块名应具有唯一性; d) 多个程序模块不应共用一个返回指令; e) 不宜从循环体中引出多个出口; f) 程序模块长度宜控制在400行内(不包括注释行)。

5、5.3 程序语句 5.3.1 语句格式 程序语句格式应遵循以下原则: a) 若存在段定义,段名称前至少应有一个空格或制表符; b) 语句的缩进和语句内部的间隔宜使用制表符实现; c) 每一行只定义一个变量、常量或全局声明; d) 若存在代码段、矢量段,变量定义不应在代码段、矢量段中; e) 若无特殊要求,程序语句应放置在代码段中; f) 指令应保持一致的风格,如全部大写或小写; g) 单指令每一行只允许写一条语句,并行指令宜编写在同一行; h) 程序模块名和程序模块中的标号均不应缩进; i) 程序模块名和程序模块中的标号均应独占一行。 5.3.2 语句顺序 5.3.2.1 有明确顺序的程序语句

6、 有明确顺序的程序语句应遵循以下原则: a) 组织代码,使它们间的依赖关系更加明确; b) 与判定相联系的动作应紧跟着判定; c) 对不明确的依赖关系进行注释。 5.3.2.2 与顺序无关的程序语句 与顺序无关的程序语句应遵循以下原则: a) 确保代码由上至下执行,避免随意跳转; b) 将相关语句组织在一起。 5.4 命名要求与格式 5.4.1 变量 变量的命名应遵循以下原则: a) 变量名应具有实际意义,每个变量均应有相关注释; b) 若存在两个(含)以上的数据类型,变量名应包含数据类型的说明; c) 变量名称长度不宜超过20个字符; d) 不应单独使用系统保留字作为变量名; e) 变量名称

7、不宜全部大写,避免同常量的命名方式混淆; f) 状态变量应明确表示程序所处的状态。 QJ 33002008 3g) 变量命名的方法参见附录B。 5.4.2 常量 常量的命名应遵循以下原则: a) 常量命名应与5.4.1 a)d)的变量命名原则一致; b) 常量的名称应全部大写。 5.4.3 标号 标号的命名一般遵循以下原则: a) 标号名宜使用大小写混合格式,若标号名由多个独立的单词(或单词缩写)组合而成,每个单 词(或单词缩写)的第一个字母应大写,其它字母小写; b) 程序中所有标号的引用应与其定义保持一致; c) 标号的长度不应多于20个字符。 5.4.4 程序模块 程序模块的命名应遵循以

8、下原则: a) 程序模块的命名应与5.4.3命名原则一致; b) 程序模块名应具有实际意义,要准确地描述该模块的功能。 5.4.5 其它 应遵循的其它原则如下: a) 应避免含义相同或相近的名称; b) 应避免使用发音相同或相近的名称; c) 应避免使用易混淆的变量名称。如字符有“I”和“1”、“1”和“I”、“0”和“o”、“S” 和“5”、“G”和“6”等 ; d) 应避免使用常见的容易拼写错的单词; e) 应避免使用容易产生误会的名称或缩写。 5.5 程序注释 5.5.1 总体要求 程序注释总体要求为: a) 注释应准确、无二义性; b) 程序中的注释行数不应少于源程序总行数的1/5;

9、c) 程序修改后应注释修改日期及简要原因; d) 注释应为功能性的说明,而不应是指令的逐句说明。 5.5.2 文件注释 文件的开始应有文件描述体进行说明,一般包含以下信息:文件名和版本、软件支持环境、硬件支持环境、编译器名称和版本、功能描述、与其它文件的关系、开发单位、作者、日期。其样例参见附录A。 5.5.3 程序模块注释 程序模块注释要求为: a) 程序模块开始前应有程序模块描述体进行说明,达到清晰描述本程序模块基本信息的目的。 程序模块描述体一般包括功能描述、作者、日期、寄存器使用情况、输入、输出; QJ 33002008 4b) 程序模块内有多个功能点时应分别加以注释; c) 程序模块

10、起始标号前一行注释中应包含表示模块开始的统一标识,如“module_begin”; d) 程序模块结束下一行注释中应包含表示模块结束的统一标识,如“module_end”。 5.5.4 语句及变量注释 语句及变量注释要求为: a) 不应在注释中复述代码; b) 所有变量、常量定义时应注释其用途; c) 一条程序语句及其后注释的总长不应超过80个字符,超过后应分行编写。 5.6 数据类型的使用要求 数据类型的使用应遵循相应技术要求。 应注意一些使用时容易导致程序出现问题的数据类型。在TMS320C3X汇编程序中浮点数和整数使用时应注意以下要求: a) 程序中不宜使用浮点型立即数,以保证数据的精度

11、; b) 程序中不宜使用整型立即数,整型立即数由16位二进制补码表示,作为整型指令的操作数时 其最高位为符号位,将会被扩展,如语句“ADDI 8000H,R1”表示在R1基础上加FFFF8000H 而不是8000H; c) 浮点数在堆栈处理时的先后顺序应为:压栈时先PUSH、后PUSHF,出栈时先POPF,后 POP; d) 不应在数量级相差太大的数之间进行加减运算; e) 浮点数的比较不应使用“等于”判断; f) 程序中确实需要使用整型操作指令对浮点数进行操作的特殊用法时,应增加注释说明。 5.7 特殊用法 在TMS系列汇编中存在一些固有的特殊用法,使用时存在一定的风险,应谨慎使用。以TMS

12、320C30汇编程序为例,一些特殊用法参见附录C。 QJ 33002008 5附 录 A (资料性附录) TMS320C30汇编程序文件结构 TMS320C30汇编程序文件结构参见以下模式: * * 版权及版本声明 * * 文件名称:filename.asm * * 摘 要:简要描述本文件的内容 * * * * 开发单位:XXX院XXX所XXX室 * * 当前版本:Ver1.1 * * 作 者:XXX * * 完成日期:XX年XX月XX日 * * * * 取代版本:Ver1.0 * * 作 者:XXX * * 完成时间:XX年XX月XX日 * * * * 运行环境:XXX系统 * * 编译器名

13、称及版本:CodeComposer Ver4.0.9 * * ; 外部引用声明 .global TIM1_nCtrAdrss ;定时器1控制寄存器地址 .global Ctr_nNum ;容错控制计数值 ; 数据段 .data fk_nRadarCtr .word 00H ;发控程序模块的雷达控制字 tst_nKdhState .word 0AH ;测试程序模块的惯导状态字 ; 常量定义 .sect “.const“ FILT1_NSTARNUM . word 01H ;滤波次数计数器初值 ; 中断矢量定义 .sect “.vector“ INT0 BR ISR0 ;外部中断0对应的程序模块入

14、口 .text QJ 33002008 6* * 模块名称:Main(主程序模块) * * 摘 要:简要描述本模块功能 * * 作 者:XXX * * 完成日期:XX年XX月XX日 * * 输 入:对输入数据进行简要说明 * * 输 出:对输出数据进行简要说明 * * 寄存器使用情况:对寄存器使用情况进行简要说明 * * * module_begin * Main: LDI TIM1_nCtrAdrss,AR0 LDI 0ABCH, R0 STI R0,*AR0 ;初始化定时器1 LDI FILT1_NSTARNUM,R0 ;滤波计数器初值设为1 WnavStar LDI Ctr_nNum,R

15、0 SUBI 1,R0 BZ WnavStar ;导航开始阶段容错设计 STI R0,fk_nRadarCtr ;记录雷达控制字 STI R1, tst_nKdhState ;记录惯导状态字 BNZ WnavStar ;不为零则返回导航开始阶段 RETS * module_end * * * 模块名称:SubModule1 * * 摘 要:简要描述本程序模块功能 * * 作 者:XXX * * 完成日期:XX年XX月XX日 * * 输 入:R0 * * 输 出:R1 * * 寄存器使用情况:使用AR0、AR1 * QJ 33002008 7* * module_begin * SubModul

16、e1: STI R0,*AR0 ;某算法实现过程 SUBI 1,R1 ;获取输出值 RETS * module_end * QJ 33002008 8附 录 B (资料性附录) 自然语言变量命名规则 B.1 概述 一般使用自然语言对变量的名称进行命名,包含所属模块前缀、变量类型缩写、有意义的字符串。 B.2 变量名称的形式 变量名称的形式如xxx_yAbc,具体说明如下: xxx: 变量所属程序模块的全称或简称,由几个小写英文字母组成。 y: 变量类型,缩写为一个字母,程序中只存在单一类型时可以省略。 Abc: 一个单独意义的字符串,以大写英文字母开头,后接小写英文字母。 其中单独意义字符串A

17、bc部分根据需要可增加至两个或三个单独意义字符串,如AbcDef、 AbcDefGhi,但要注意变量命名长度不宜超过20个。 B.3 变量类型缩写的约定 TMS320C3X汇编程序变量类型的一些约定如下: b: byte f: float n: word/int/long (data) p: word/int/long (address) s: string u: struct 其它TMS汇编语言可以参照上述形式对变量类型的缩写进行约定。 B.4 变量命名举例 以TMS320C3X汇编程序为例,某变量命名为fk_nRadarCtr,含义是:该变量属于发控程序模 块、变量类型为整型、雷达控制字。

18、 QJ 33002008 9附 录 C (资料性附录) TMS320C30汇编程序中的一些特殊用法 TMS320C30汇编程序中的一些特殊用法如下: a) 使用单指令重复或块重复可提高程序精练程度; b) RPTB块重复时,块的最后一条指令不应是Bcond、BR、BDcond、CALL、CALLcond、TRAPcond、 RETIcond、RETScond、IDLE、RPTB、RPTS。从重复块底部起的四条指令中不应是BcondD、BRD、DBcondD; c) RPTB块重复时不宜在循环体中改变RE、RS、RC; d) 使用延迟跳转可提高程序执行效率; e) 延迟指令后紧随的三条指令中,任

19、何一条均不应是Bcond,BR,BDcond,BRD,DBcond, DBcondD,CALL,CALLcond,TRAPcond,RETIcond,IDLE,RPTB,RPTS; f) 预加偏移量的间接寻址和预减偏移量的间接寻址的默认值是1,不是0; g) 不应使用TSTB来代替CMPI作为比较,一般TSTB只是位区测试指令; h) 有符号和无符号数的比较时要注意两者的条件码和条件是不一样的,如无符号数“小于”的 判断条件码为“LO”,而有符号数“小于”的判断条件码为“LT”; i) 进入中断服务程序后,程序会自动将GIE位置0,如果在进入中断服务程序后两个周期之内 (含)的代码试图读或修改

20、状态寄存器,将会引起程序执行错误; j) 宜使用移位的方法来代替整数的除法; k) 使用Cache可提高程序执行效率; l) 使用内部RAM可提高程序执行效率; m) TMS320C30汇编程序中的中断操作有两种特殊情况需引起注意: 1) 如果条件陷阱指令已被取址,且陷阱条件为假,且发生了流水线冲突,导致在译码或读指 令阶段产生了一个延迟,则状态寄存器全局中断允许(GIE)位可能被错误地复位成0(被禁止的设置); 2) 对中断标志寄存器(IF)的异步存取会引起TMS320C30汇编程序不能识别和服务中断子程 序,这种情况可能发生在一个中断已经产生,并且正在准备锁存到 IF 寄存器中,而与此同时CPU正在写IF。 QJ 33002008 10中华人民共和国航天行业标准 航天型号DSP-TMS系列 汇编语言编程要求 QJ 33002008 * 中国航天标准化研究所出版 北京西城区月坛北小街2号 邮政编码:100830 中国航天标准化研究所 印务发行部印刷、发行 版权专有 不得翻印 * 2008年10月出版 定价:15.00元 QJ33002008

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 标准规范 > 行业标准 > QJ航天工业

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1