文档库 最新最全的文档下载
当前位置:文档库 › DSP28335代码学习

DSP28335代码学习

DSP28335代码学习
DSP28335代码学习

1.2、外设位域结构体方法综述

1.2.1、传统#define的方法

C代码访问寄存器的传统方法是使用#define宏为每一个寄存器分配一个地址。例如:

#define CPUTIMER0_TIM (volatile unsigned long *) 0x0c00

#define CPUTIMER0_PRD (volatile unsigned long *) 0x0c02

#define CPUTIMER0_TCR(volatile unsigned long *) 0x0c04

#define CPUTIMER0_TPR (volatile unsigned long *) 0x0c06

…..

同样的#define方法将在每一个外设寄存器上不断重复

弊端:

不容易访问寄存器中的位域部分

不容易在CCS观察窗口显示位域的值

不能利用CCS的自动完成功能

对于重复的外设,头文件的开发者不能获得重复利用的便利。

1.2.2、位域及结构体的方法

位域及结构体方法采用C代码的结构体方式,将属于某个指定外设的所有寄存器组成一个集合。通过链接器,每个C代码结构体就是外设寄存器的内存映射。这一映射允许编译器通过使用CPU数据页指针(DP)直接访问外设寄存器。另外,多数寄存器都定义了位域,从而使编译器能够读取或者操作某一个寄存器中的单个位域。

(1)下面代码是

下面代码示例是一个DSP28335的CPU定时器存器对应的C代码结构体类型。

// CPU Timer Register File:

//

struct CPUTIMER_REGS {

union TIM_GROUP TIM; // Timer counter register

union PRD_GROUP PRD; // Period register

union TCR_REG TCR; // Timer control register

Uint16 rsvd1; // reserved

union TPR_REG TPR; // Timer pre-scale low

union TPRH_REG TPRH; // Timer pre-scale high

};

该结构体类型包括6个成员组成,前后顺序与他们在内存中的顺序相同。CPUTIMER_REGS代表了一个结构体类型。他和系统已经定义的标准类型如int,char等一样可以用来作为定义变量的类型。

注意:

1、寄存器名字出现的顺序必须与他们在内存中被安排的顺序相同

2、在结构体中,通过使用保留变量rsvd1等来预留内存中的保留位置。这种保留结构体仅仅用以预留内存中的空间

3、Uint16 是无符号16位数类型定义,相应的类型定义申明由DSP2833x_Device.h文件建立。

(2)申明可访问寄存器的变量

寄存器结构类型可被用来申明一个可访问寄存器的变量,对器件的每个外设都采用这一相同的做法,同一种外设的复用外设可以采用同样的结构体类型定义。例如一个器件上有3个CPU-timer,可以创建如下所示的3个具有struct CPUTIMER_REGS结构体类型的变量。

volatile struct CPUTIMER_REGS CpuTimer0Regs ; // 定义CpuTimer0Regs是一个具有CPUTIMER_REGS类型的变量volatile struct CPUTIMER_REGS CpuTimer1Regs ;

volatile struct CPUTIMER_REGS CpuTimer2Regs ;

关键字volatile在变量声明中十分重要。它告诉编译器,这些变量的内容可由硬件改变,并且编译器无需优化使用volatile变量的代码。

(3)分配专用的数据区

单有上面的两个定义还不够,还必须为3个CPU定时器分配数据区。分配某个定时器在数据区的起始地址必须与系统定义的该定时器的内存地址一致。在DSP2833x_GlobalVariableDefs.c文件中,通过使用编译器的#pragma DATA_SECTION指令,与外设寄存器结构体类型相对应的每一个变量分配一个专用的数据区。任何使用DSP2833x外设头文件的项目都必须包含这个源文件。该文件时外设寄存器结构体变量及数据区分配的一个声明,在source目录中建立。下面代码为定时器0,1,2分配的数据区。

// FILE: DSP2833x_GlobalVariableDefs.c// 全局变量默认文件

// TITLE: DSP2833x Global Variables and Data Section Pragmas.//

//###########################################################################

// $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $

// $Release Date: August 4, 2009 $

//###########################################################################

#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File

//---------------------------------------------------------------------------

// Define Global Peripheral Variables:

//----------------------------------------

#ifdef __cplusplus // 用于C++代码

#pragma DATA_SECTION("CpuTimer0RegsFile")

#else

#pragma DATA_SECTION(CpuTimer0Regs,"CpuTimer0RegsFile"); // 用于C代码

#endif

volatile struct CPUTIMER_REGS CpuTimer0Regs;

//----------------------------------------

#ifdef __cplusplus

#pragma DATA_SECTION("CpuTimer1RegsFile")

#else

#pragma DATA_SECTION(CpuTimer1Regs,"CpuTimer1RegsFile");

#endif

volatile struct CPUTIMER_REGS CpuTimer1Regs;

//----------------------------------------

#ifdef __cplusplus

#pragma DATA_SECTION("CpuTimer2RegsFile")

#else

#pragma DATA_SECTION(CpuTimer2Regs,"CpuTimer2RegsFile");

#endif

volatile struct CPUTIMER_REGS CpuTimer2Regs;

注:

#ifdef #else #endif 为预处理器条件编译指令。对器件的每个外设寄存器结构体变量,都会重复这一数据区分配操作。

(4)映射到外设寄存器

当每个结构体都分配到自身的数据区以后,通过使用链接命令文件DSP2833x_Header_nonBIOS.cmd ,

FILE: DSP2833x_Headers_nonBIOS.cmd

// TITLE: DSP2833x Peripheral registers linker command file

// DESCRIPTION:

// This file is for use in Non-BIOS applications.

// Linker command file to place the peripheral structures

// used within the DSP2833x headerfiles into the correct memory

// mapped locations.

// This version of the file includes the PieVectorTable structure.

// For BIOS applications, please use the DSP2833x_Headers_BIOS.cmd file

// which does not include the PieVectorTable structure.

//###########################################################################

MEMORY /*定义存储区域*/

{

PAGE 0: /* Program Memory */

PAGE 1: /* Data Memory */

CPU_TIMER0 : origin = 0x000C00, length = 0x000008 /* CPU Timer0 registers */

CPU_TIMER1 : origin = 0x000C08, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/ CPU_TIMER2 : origin = 0x000C10, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/ }

SECTIONS /*分配存储区域*/

{

CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1 /* 将CpuTimer0RegsFile段分配到CPU_TIMER0区域*/

CpuTimer1RegsFile : > CPU_TIMER1, PAGE = 1

CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1

}

通过把变量直接映射到外设寄存器的同一内存地址,用户采用C代码对寄存器进行访问,只需要通过访问变量中所需的成员即可。例如对CpuTimer0 TCR寄存器进行写操作,只需访问CpuTimer0Regs变量中的TCR成员,如以下代码所示:

CpuTimer0Regs.TCR.all = TSS_MASK;

上面的操作是对CpuTimer0Regs.TCR整体赋值操作,可以通过添加位域结构体,直接访问某位。

1.2.3 添加位域结构体

(1)增加位域定义

我们经常需要直接访问寄存器中的某一位,C2833x C头文件及外设示例所涉及的位域结构体方法,为多数片上外设寄存器提供了位域定义。例如CPU_Timer控制寄存器的位域定义如下

// CP U Timer R e gister Bit Definitions:

// TCR: Control register bit definitions:

struct TCR_BITS { // bits description

Uint16 rsvd1:4; // 3:0 reserved

Uint16 TSS:1; // 4 Timer Start/Stop

Uint16 TRB:1; // 5 Timer reload

Uint16 rsvd2:4; // 9:6 reserved

Uint16 SOFT:1; // 10 Emulation modes

Uint16 FREE:1; // 11

Uint16 rsvd3:2; // 12:13 reserved

Uint16 TIE:1; // 14 Output enable

Uint16 TIF:1; // 15 Interrupt flag

};

然后通过共用体进行申明,以便访问位域结构体定义的各个成员或者16位或32位寄存器的值。例如,定时器的控制寄存器共用体如下所示:

// FIL E: DSP2833x_CpuTimers.h

union TCR_REG // 定义共用体类型TCR_REG(不是变量)

{

Uint16 all;

struct TCR_BITS bit; //bit是一个具有TCR_BITS结构体类型的变量

};

还例如:

// TPR: Pre-scale low bit definitions:

struct TPR_BITS {// bits description

Uint16 TDDR:8; // 7:0 Divide-down low

Uint16 PSC:8; // 15:8 Prescale counter low

};

union TPR_REG {

Uint16 all;

struct TPR_BITS bit;

};

// TPRH: Pre-scale high bit definitions:

struct TPRH_BITS {// bits description

Uint16 TDDRH:8; // 7:0 Divide-down high

Uint16 PSCH:8; // 15:8 Prescale counter high

};

union TPRH_REG {

Uint16 all;

struct TPRH_BITS bit;

};

等等,一旦每个寄存器的位域结构体和共用体的定义都建立起来了,则在CPU定时器(CPU-Timer)的寄存器结构体类型中,各个成员可以通过采用共用体定义的形式写。如前文所给的示例:

// FILE: DSP2833x_CpuTimers.h

// CPU Timer Register File:

struct CPUTIMER_REGS {

union TIM_GROUP TIM; // Timer counter register

union PRD_GROUP PRD; // Period register

union TCR_REG TCR; // Timer control register

Uint16 rsvd1; // reserved

union TPR_REG TPR; // Timer pre-scale low

union TPRH_REG TPRH; // Timer pre-scale high

};

到此,我们就可以既能访问CPUTimer寄存器中的某位,也可以对整个寄存器进行访问:

CpuTimer0Regs.TCR.bit.TSS = 1;

CpuTimer0Regs.TCR.all =TSS _MASK;

注意:对没有位域结构体和共用体定义的寄存器,不能使用*.bit或*.all名称进行访问。

2.3、关于ConfigCpuTimer()函数的说明

在DSP2833x_CpuTimers.c中,包含了两个函数:一个是定时器初始化函数InitCpuTimers(),另一个是CPU定时器的配置函数ConfigCpuTimer()。

1、对指令Timer->RegsAddr->TCR.bit.TRB = 1; 的注解

“struct CPUTIMER_V ARS *Timer”

*为指针运算符,Timer是一个具有CPUTIMER_V ARS结构体类型的指针变量,它指向结构体CPUTIMER_V ARS。通过(*Timer).xxx可以访问CPUTIMER_V ARS结构体中的xxx成员。在C语言中,为使用方便和使之直观,可以把(*Timer).xxx 用Timer->xxx来代替。“->”是成员选择指针。看下面指令:

Timer->RegsAddr->TCR.bit.TRB = 1;

为了弄清楚前面两个指针的的含义,先引入结构体CPUTIMER_V ARS有关定义。

// CPU Timer Support Variables:

//

struct CPUTIMER_V ARS //该函数由DSP2833x_CpuTimers.h文件建立

{

volatile struct CPUTIMER_REGS *RegsAddr;

Uint32 InterruptCount;

float CPUFreqInMHz;

float PeriodInUSec;

};

这个结构体列出了CPU定时器所支持的变量,其第一个成员是一个包含CPU定时器所有专用寄存器的结构体(CPUTIMER_REGS),RegsAddr是一个具有CPUTIMER_REGS结构体类型的指针变量,InterruptCount是定时器中断计算器,另外两个的乘积构成定时器的周期。

现在再引入CPU定时器寄存器结构体CPUTIMER_REGS的有关定义:

// CPU Timer Register File:

//

struct CPUTIMER_REGS // 该定义由由DSP2833x_CpuTimers.h文件建立

{

union TIM_GROUP TIM; // Timer counter register

union PRD_GROUP PRD; // Period register

union TCR_REG TCR; // Timer control register

Uint16 rsvd1; // reserved

union TPR_REG TPR; // Timer pre-scale low 定时器预定标计数低位

union TPRH_REG TPRH; // Timer pre-scale high

};

这个结构体声明有6个成员,除第4个成员保留外,其余5个均属于CPU定时器专用寄存器,其中“union TCR_REG TCR;”声明TCR_REG是一种共用体类型,同时定义相应的共用体变量TCR,以便引用。下面列出TCR_REG共用体类型定义及TCR控制寄存器位域结构体(TCR_BITS)定义。

// CPU Timer Register Bit Definitions:

// TCR: Control register bit definitions:

struct TCR_BITS //该定义由由DSP2833x_CpuTimers.h文件建立

{ // bits description

Uint16 rsvd1:4; // 3:0 reserved

Uint16 TSS:1; // 4 Timer Start/Stop

Uint16 TRB:1; // 5 Timer reload

Uint16 rsvd2:4; // 9:6 reserved

Uint16 SOFT:1; // 10 Emulation modes

Uint16 FREE:1; // 11

Uint16 rsvd3:2; // 12:13 reserved

Uint16 TIE:1; // 14 Output enable

Uint16 TIF:1; // 15 Interrupt flag

};

//定义TCR_REG共用体类型。包含2个成员,一个是16位无符号整数all,一个是16位TCR_BITS结构体,他们占用同一个内存单元

union TCR_REG //该定义由由DSP2833x_CpuTimers.h文件建立

{

Uint16 all;

struct TCR_BITS bit;

};

现在再来看指令:“Timer->RegsAddr->TCR.bit.TRB = 1; ”这条指令最终访问的是TCR寄存器的TRB位。其中Timer指向CPU定时器变量(CPUTIMER_V ARS),RegsAddr指向CPUTIMER_V ARS中的CPU定时器寄存器结构体(CPUTIMER_REGS)。这种访问方法从外层入手,一层一层地进入内存。

2. ConfigCpuTimer()函数

// ConfigCpuTimer:

//---------------------------------------------------------------------------

// This function initializes the selected timer to the period specified

// by the "Freq" and "Period" parameters. The "Freq" is entered as "MHz"

// and the period in "uSeconds". The timer is held in the stopped state

// after configuration.

//

void ConfigCpuTimer(struct CPUTIMER_V ARS *Timer, float Freq, float Period)

{

Uint32 temp;

// Initialize timer period:

Timer->CPUFreqInMHz = Freq;

Timer->PeriodInUSec = Period;

temp = (long) (Freq * Period);

Timer->RegsAddr->PRD.all = temp;k

// Set pre-scale counter to divide by 1 (SYSCLKOUT):

Timer->RegsAddr->TPR.all = 0;

Timer->RegsAddr->TPRH.all = 0;

// Initialize timer control register:

Timer->RegsAddr->TCR.bit.TSS = 1; // 1 = Stop timer, 0 = Start/Restart Timer

Timer->RegsAddr->TCR.bit.TRB = 1; // 1 = reload timer

Timer->RegsAddr->TCR.bit.SOFT = 1;

Timer->RegsAddr->TCR.bit.FREE = 1; // Timer Free Run

Timer->RegsAddr->TCR.bit.TIE = 1; // 0 = Disable/ 1 = Enable Timer Interrupt

// Reset interrupt counter:

Timer->InterruptCount = 0;

}

//===========================================================================

2.4、定时器0中断启动程序实例(CpuTimer.c)

1. CpuTimer.c文件要点

(1)标题:定时器0中断启动程序

(2)说明:该程序需要DSP28xV1.00头文件支持,可将其配置为boot to H0操作方式,除了boot方式配置外,不需要进行其他硬件的配置。

(3)功能:本示例对CPU定时器0进行配置,定时器0每产生一次中断,中断计数器加1.本示例的前面部分加入了IQMATH 的简单示例,供参考。

(4)决定定时器0中断响应快慢的几个因素:

系统时钟SYSCLKOUT。系统时钟受锁相环控制寄存器(PLLCR)位域DIV及外部晶振的控制。参见“DSP2833x_SysCtrl.c”文件中的InitSysCtrl()函数。

装入计数器TIM的计数周期值PRD。该值通过对“ConfigCpuTimer(&CpuTimer0,x,y); ”函数后两个形参的赋值得到,其关系式为PRD=x*y。

定时器时钟周期。该值是通过定时器分频器(TDDRH:TDDR)对系统时钟SYSCLKOUT分频得到。设SYSCLKOUT=150Mhz (晶振为30Mhz,DIV=10),则决定定时器0中断响应快慢的只有PRD及(TDDRH:TDDR).

2. CpuTimer.c文件

// FILE: DSP2833x_CpuTimers.c

//

// TITLE: CPU 32-bit Timers Initialization & Support Functions.

//

// NOTES: CpuTimer2 is reserved for use with DSP BIOS and

// other realtime operating systems.

//

// Do not use these this timer in your application if you ever plan

// on integrating DSP-BIOS or another realtime OS.

//###########################################################################

#include "DSP2833x_Device.h" // Headerfile Include File头文件包含文件

#include "DSP2833x_Examples.h" // Examples Include File示例包含文件

struct CPUTIMER_V ARS CpuTimer0; //定义CpuTimer0是一个具有CPUTIMER_V ARS结构体类型的变量

// When using DSP BIOS & other RTOS, comment out CPU Timer 2 code.

struct CPUTIMER_V ARS CpuTimer1;

struct CPUTIMER_V ARS CpuTimer2;

//---------------------------------------------------------------------------

// InitCpuTimers:

//---------------------------------------------------------------------------

// This function initializes all three CPU timers to a known state.

//

void InitCpuTimers(void) //定时器初始化函数

{

// CPU Timer 0

// Initialize address pointers to respective timer registers:

CpuTimer0.RegsAddr = &CpuTimer0Regs; //把CpuTimer0Regs的地址赋给具有CPUTIMER_V ARS结构体类型的变量CpuTimer0中的成员,即具有CPUTIMER_REGS结构体类型的指针变量。

// Initialize timer period to maximum:

CpuTimer0Regs.PRD.all = 0xFFFFFFFF; //CpuTimer0Regs是具有CPUTIMER_REGS结构体类型的变量,给其成员周期寄存器PRD的值赋为0xFFFFFFFF

// Initialize pre-scale counter to divide by 1 (SYSCLKOUT):

CpuTimer0Regs.TPR.all = 0; 预定标计数器低位寄存器TPR,由8位TDDR(TPR[7:0])定时器分频器低位和8位PSC(TPR[15:8])定时器预定标计数器低位组成,全置为0.

CpuTimer0Regs.TPRH.all = 0;

// Make sure timer is stopped:

CpuTimer0Regs.TCR.bit.TSS = 1; //(定时器启止状态位)停止定时器

// Reload all counter register with period value:

CpuTimer0Regs.TCR.bit.TRB = 1; //(定时器重装位)(PRDH:PRD)的值装入(TIMH:TIM),并且把定时器分频器(TDDRH:TDDR)的值装入预定标计数器(PSCH:PSC)

// Reset interrupt counters:

CpuTimer0.InterruptCount = 0; //中断计数器

// CpuTimer2 is reserved for DSP BIOS & other RTOS

// Do not use this timer if you ever plan on integrating

// DSP-BIOS or another realtime OS.

// Initialize address pointers to respective timer registers:

CpuTimer1.RegsAddr = &CpuTimer1Regs;

CpuTimer2.RegsAddr = &CpuTimer2Regs;

// Initialize timer period to maximum:

CpuTimer1Regs.PRD.all = 0xFFFFFFFF;

CpuTimer2Regs.PRD.all = 0xFFFFFFFF;

// Make sure timers are stopped:

CpuTimer1Regs.TCR.bit.TSS = 1;

CpuTimer2Regs.TCR.bit.TSS = 1;

// Reload all counter register with period value:

CpuTimer1Regs.TCR.bit.TRB = 1;

CpuTimer2Regs.TCR.bit.TRB = 1;

// Reset interrupt counters:

CpuTimer1.InterruptCount = 0;

CpuTimer2.InterruptCount = 0;

}

//---------------------------------------------------------------------------

// ConfigCpuTimer:

//---------------------------------------------------------------------------

// This function initializes the selected timer to the period specified

// by the "Freq" and "Period" parameters. The "Freq" is entered as "MHz"

// and the period in "uSeconds". The timer is held in the stopped state

// after configuration.

//

void ConfigCpuTimer(struct CPUTIMER_V ARS *Timer, float Freq, float Period)

{

Uint32 temp;

// Initialize timer period:

Timer->CPUFreqInMHz = Freq;

Timer->PeriodInUSec = Period;

temp = (long) (Freq * Period);

Timer->RegsAddr->PRD.all = temp;

// Set pre-scale counter to divide by 1 (SYSCLKOUT):

Timer->RegsAddr->TPR.all = 0;

Timer->RegsAddr->TPRH.all = 0;

// Initialize timer control register:

Timer->RegsAddr->TCR.bit.TSS = 1; // 1 = Stop timer, 0 = Start/Restart Timer

Timer->RegsAddr->TCR.bit.TRB = 1; // 1 = reload timer

Timer->RegsAddr->TCR.bit.SOFT = 1;

Timer->RegsAddr->TCR.bit.FREE = 1; // Timer Free Run

Timer->RegsAddr->TCR.bit.TIE = 1; // 0 = Disable/ 1 = Enable Timer Interrupt

// Reset interrupt counter:

Timer->InterruptCount = 0;

}

//=========================================================================== // End of file.

3.通用输入/输出(GPIO)

3.1、GPIO概述

有3个32位I/O端口。端口A由GPIO0~GPIO31组成,端口B由GPIO32~GPIO63组成,端口C由GPIO64~GPIO87组成。

3.1.1、GPIO寄存器

1、控制寄存器:F2833x共有3个通用I/O端口。每个端口都有与之相对应的控制寄存器。下面列出端口A的寄存器GPACTRL GPIO A控制寄存器(GPIO0~GPIO31)

GPAQSEL1 GPIO A选择限制寄存器1 (GPIO0~GPIO15)

GPAQSEL2 GPIO A选择限制寄存器2 (GPIO16~GPIO31)

GPAMUX1 GPIO A多路开关控制寄存器1 (GPIO0~GPIO15)

GPAMUX2 GPIO A多路开关控制寄存器2 (GPIO16~GPIO31)

GPADIR GPIO A方向控制寄存器(GPIO0~GPIO31)

GPAPUD GPIO A上拉禁止寄存器(GPIO0~GPIO31)

2、数据寄存器:下面给出端口A的数据寄存器,B,C端口一样。

GPADAT GPIO A数据寄存器(GPIO0~GPIO31)

GPASET GPIO A置位寄存器(GPIO0~GPIO31)

GPACLEAR GPIO A清楚寄存器(GPIO0~GPIO31)

GPATOGGLE GPIO A切换寄存器(GPIO0~GPIO31)

3、GPIO中断和低功耗选择寄存器

3.1.2、寄存器功能介绍

1、GPxDAT寄存器(x=A,B,C)

每个I/O端口都有1个数据寄存器,它是一个读/写寄存器。读入的寄存器的值反映了输入限制后输入引脚当前的电平,写寄存器可设置输出引脚为相应的电平。

当GPxDAT.bit=0,并且引脚设置为输出,则把引脚拉成低电平;

当GPxDAT.bit=1,并且引脚设置为输出,则把引脚拉成高电平。

2、GPxSET寄存器(x=A,B,C)

每个I/O端口都有1个置位寄存器,它是一个只写寄存器,读为0。如果对应的引脚配置为输出,则向置位寄存器的该位写1,将对应的引脚电平拉高。写0无效。

当GPxSET.bit=0,无效;

当GPxDAT.bit=1,并且引脚设置为输出,则把引脚拉成高电平。

3、GPxCLEAR寄存器(x=A,B,C)

每个I/O端口都有1个清除寄存器,它是一个只写寄存器,读为0。如果对应的引脚配置为输出,则向置位寄存器的该位写1,将对应的引脚电平拉低。写0无效。

当GPxSET.bit=0,无效;

当GPxDAT.bit=1,并且引脚设置为输出,则把引脚拉成低电平。

4、GPxTOGGLE寄存器(x=A,B,C)

每个I/O端口都有1个切换寄存器,它是一个只写寄存器,读为0。如果对应的引脚配置为输出,则向置位寄存器的该位写1,将对应的引脚拉成反向电平。写0无效。

当GPxSET.bit=0,无效;

当GPxDAT.bit=1,并且引脚设置为输出,则把引脚拉成反向电平。既输出高电平变低电平,输出低电平变高电平。

小结:通过以上方式可以将引脚设置为高电平或者低电平。

3.1.3输入限制

用户可以通过配置GPAQSEL1、GPAQSEL2、GPBQSEL1、GPBQSEL2寄存器来选择GPIO引脚的输入限制类型。对于一个GPIO输入引脚,输入限制可以仅被指定为与SY_SCLKOUT同步或采样窗限制;而对于配置为外设输入的引脚,除同步于

SYSCLKOUT或采样窗限制之外,还可以是异步的。

1、输入异步

该模式仅用于不需要输入同步的外设或外设自身具有信号同步功能,如通信端口SCI、SPI、eCAN和IIC。如果引脚是GPIO引脚,则异步功能失效。

2、仅与SYSCLKOUT同步

这是所有引脚复位时默认的输入限制模式。在该模式中,输入信号仅与SYSCLKOUT同步。因为引入的信号不同步,所以需要1个SYSCLKOUT的延迟。

3、采用采样窗限制

在该模式中,输入信号首先与系统时钟同步(SYSCLKOUT同步),然后在允许输入改变之前通过特定的数个周期进行限制。需要指定两种参数:采样周期、采样数。

3.2程序实例

3.2.1、GPIO切换测试程序(GpioToggle.c)

1、GpioToggle.c文件要点

(1)内容:GPIO切换测试程序

(2)条件:本程序需要DSP2833Xv1.00头文件支持,另外还需要配置成“boot to H0”操作方式。除了boot方式配置之外,不需要其他的硬件配置。

(3)说明:这里包含了(数据寄存器方式、置位/清除寄存器方式、切换寄存器方式),可在编译前通过对程序开头#define声明选择执行其中的一个,并通过示波器观察各个引脚的输出波形。

2、GpioToggle.c文件

Example_2833xGpioToggle.c

//

// TITLE: DSP2833x Device GPIO toggle test program.

#include "DSP28x_Project.h" // Device Headerfile and Examples Include File

// Select the example to compile in. Only one example should be set as 1

// the rest should be set as 0.

#define EXAMPLE1 1 // Use DATA registers to toggle I/O's

#define EXAMPLE2 0 // Use SET/CLEAR registers to toggle I/O's

#define EXAMPLE3 0 // Use TOGGLE registers to toggle I/O's

// Prototype statements for functions found within this file.

void delay_loop(void);

void Gpio_select(void); //Gpio配置函数

void Gpio_example1(void); //用数据寄存器设置I/O引脚电平函数

void Gpio_example2(void); //用置位/清除寄存器设置I/O引脚电平函数

void Gpio_example3(void); //用切换寄存器设置I/O引脚电平函数

void main(void)

{

// Step 1. Initialize System Control:

// PLL, WatchDog, enable Peripheral Clocks

// This example function is found in the DSP2833x_SysCtrl.c file.

InitSysCtrl();

// Step 2. Initalize GPIO:

// This example function is found in the DSP2833x_Gpio.c file and // illustrates how to set the GPIO to it's default state.

// InitGpio(); // Skipped for this example

// For this example use the following configuration:

Gpio_select();

// Step 3. Clear all interrupts and initialize PIE vector table:

// Disable CPU interrupts

DINT;

// Initialize PIE control registers to their default state.

// The default state is all PIE interrupts disabled and flags

// are cleared.

// This function is found in the DSP2833x_PieCtrl.c file.

InitPieCtrl();

// Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000;

IFR = 0x0000;

// Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR).

// This will populate the entire table, even if the interrupt

// is not used in this example. This is useful for debug purposes. // The shell ISR routines are found in DSP2833x_DefaultIsr.c.

// This function is found in DSP2833x_PieVect.c.

InitPieVectTable();

// Step 4. Initialize all the Device Peripherals:

// This function is found in DSP2833x_InitPeripherals.c

// InitPeripherals(); // Not required for this example

// Step 5. User specific code:

#if EXAMPLE1

// This example uses DATA registers to toggle I/O's

Gpio_example1();

#endif // - EXAMPLE1

#if EXAMPLE2

// This example uses SET/CLEAR registers to toggle I/O's

Gpio_example2();

#endif

#if EXAMPLE3

// This example uses TOGGLE registers to toggle I/O's

Gpio_example3();

#endif

}

void delay_loop()

{

short i;

for (i = 0; i < 1000; i++) {}

}

void Gpio_example1(void)

{

// Example 1:

// Toggle I/Os using DATA registers

for(;;) //无限循环

{

GpioDataRegs.GPADAT.all =0xAAAAAAAA; // 十六进制的A代表二进制的1010,所以A口的偶数引脚为高电平,

//奇数为低电平

GpioDataRegs.GPBDAT.all =0x0000000A; // B口的B3、B1为高电平,其余为低电平。

delay_loop();

GpioDataRegs.GPADAT.all =0x55555555; // 十六进制的5代表二进制的0101,所以A口的奇数引脚为高电平,

//偶数为低电平

GpioDataRegs.GPBDAT.all =0x00000005; //B口的B2、B0为高电平,其余为低电平。

delay_loop();

}

}

void Gpio_example2(void)

{

// Example 2:

// Toggle I/Os using SET/CLEAR registers

for(;;)

{

GpioDataRegs.GPASET.all =0xAAAAAAAA;

GpioDataRegs.GPACLEAR.all =0x55555555;

GpioDataRegs.GPBSET.all =0x0000000A;

GpioDataRegs.GPBCLEAR.all =0x00000005;

delay_loop();

GpioDataRegs.GPACLEAR.all =0xAAAAAAAA;

GpioDataRegs.GPASET.all =0x55555555;

GpioDataRegs.GPBCLEAR.all =0x0000000A;

GpioDataRegs.GPBSET.all =0x00000005;

delay_loop();

}

}

void Gpio_example3(void)

{

// Example 2:

// Toggle I/Os using TOGGLE registers

// Set pins to a known state

GpioDataRegs.GPASET.all =0xAAAAAAAA;

GpioDataRegs.GPACLEAR.all =0x55555555;

GpioDataRegs.GPBSET.all =0x0000000A;

GpioDataRegs.GPBCLEAR.all =0x00000005;

// Use TOGGLE registers to flip the state of

// the pins.

// Any bit set to a 1 will flip state (toggle)

// Any bit set to a 0 will not toggle.

for(;;)

{

GpioDataRegs.GPATOGGLE.all =0xFFFFFFFF;

GpioDataRegs.GPBTOGGLE.all =0x0000000F;

delay_loop();

}

}

void Gpio_select(void)

{

EALLOW;

GpioCtrlRegs.GPAMUX1.all = 0x00000000; // All GPIO 所有引脚设置为数字I/O

GpioCtrlRegs.GPAMUX2.all = 0x00000000; // All GPIO

GpioCtrlRegs.GPAMUX1.all = 0x00000000; // All GPIO

GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF; // All outputs所有引脚设置为数字量输出

GpioCtrlRegs.GPBDIR.all = 0x0000000F; // All outputs

EDIS;

}

//===========================================================================

// No more.

//===========================================================================

4、串行通信接口(SCI)

SCI串行通信接口是一个两线异步串口,可以看做是通用异步接收器和发送器(UART)。它允许F28X与其他外围设备之间的异步通信。所谓异步指通信双方微处理器使用各自的时钟,即使他们的时钟有相同完全的频率,但在时间上他们仍然是不相关的。

SCI模块的奇偶校验及数据格式是通过端口硬件事先设计好的,如此可以减少软件的开销。SCI模块可以下在半双工通信中进行独立的操作(半双工允许两个方向但不能同时进行数据传送,只能交替进行),或在全双工通信中同时进行操作(全双工允许两个方向同时进行数据传送)。由于不需要同步时钟,在只发不接受或只收不发一个方向传送数据(单工)条件下,SCI可单线发送或接受数据。

5、串行外围接口(SPI)

SPI是一个同步串行I/O端口,它在F28x与其他外围设备之间通过移位寄存器方式传送一个可变长度和速率的串行位流。SPI通常用于DSP控制器与板上外扩设备或者其他控制器之间的通信。

在数据传送过程中,一个SPI设备必须配置为主机,所有其他的设备配置为从机。主机通过总线为所有从机提供时钟信号。SPI通信可以采用以下3种不同方式中的一种进行:

主机发数据,从机发送虚拟数据

主机发数据,一个从机发送数据

主机发虚拟数据,一个从机发送数据

SPI最简单的通信方式是一个可编程的移位寄存器。数据通过SPIDAT寄存器移入和移出。要传送的数据通过SPITXBUF 写入SPIDAT寄存器,接收的数据锁存在SPIRXBUF寄存器以便CPU读取。

9、模数转换器(ADC)

9.1概述

AD转换模块具有16个通道,可以配置为两个eCAP模块所需的独立8通道模块,这两个独立的8通道模块也可以级联成一个16通道模块。尽管A/D转换器中有多个输入通道和两个序列发生器,但是只有一个转换器。AD转换器模块的结构如下图:

模数转换器外设主要包括:

(1)带内置双采样保持器(S/H)的12位A/D转换核心;

(2)同步采样或顺序采样模式;

(3)模拟输入:0~3V;

(4)快速转换功能,时钟频率设置为12.5Mhz,或者最小采样宽度为6.25MSPS;

(5)16通道,多路输入;

(6)自动排序功能可以一次性提供最多16个“自动转换器”,每个转换器都可以通过程序选择1~16个输入通道中的任何一个;(7)序列发生器可以工作在两个独立的8通道模式或者一个16通道级联模式;

(8)16个可以独立寻址的结果寄存器用以存储转换结果,即将输入模拟量转换为数字量的过程如下:当输入小于等于0V时,数字值=0

当0V<输入<3V时,数字值=4096*(输入模拟电压-ADCLO)/3

当输入大于等于3V时,数字值=4095

(9)多触发源启动A/D转换(SOC);

S/W:软件立即启动;

ePWM1~6;

GPIO XINT2。

(10)灵活的中断控制,允许在每一个或每隔一个序列结束(EOS)时发出中断请求;

(11)序列发生器能够运行在“启动/停止”模式,允许多路“时间排序触发器”同步转换;

(12)ePWM触发器能够独立运行在双排序器模式

(13)采样保持(S/H)采样时间窗口具有独立的预定标控制。

9.1.1寄存器列表

ADC转换寄存器

9.1.2 、级联模式下工作原理

针对下图讨论级联模式下的运行机制

(1)决定级联模式的条件

在连续采样方式下(SMODE_SEL(ADCTRL3[0])=0(默认值)),当级联选择控制位SEQ_CASC(ADCTRL1[4])被置1时,两个独立的8状态SEQ1和SEQ2序列发生器就级联成一个16状态的序列发生器SEQ(SEQ1),而SEQ2被忽略。相应的指令为:AdcRegs.ADCTRL3.bit.SMODE_SEL=0; //连续采样模式

AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // Cascaded Mode

(2)最大转换通道数MAX_CONV1与序列计数器状态位SEQ_CNTR的关系

一旦序列发生器SEQ收到来自软件、EV A、EVB或外部引脚启动转换(SOC)的触发信号,就开始转换。此时,最大转换数MAX_CONV1(ADCMAXCONV[3:0])自动装入序列计数器状态位SEQ_CNTR(ADCASEQSR[11:8])。状态指针从指向CONV00开始,按增序逐一指向CONV01,CONV02,……,每指向一个CONVnn,序列发生器就通过采样/保持器及多路器自动完成相应于一个引脚的采样及模数转换,SEQ_CNTR的装入值也开始逐一递减,直到0。在一个自动序列化过程中,完成的转换数等于(MAXCONVn+1)。

(3) CONVnn的作用

CONVnn位域定义要采样和转换的引脚。对于SEQ1,取CONV00~CONV07;对于SEQ2,取CONV08~CONV15;对于级联SEQ,CONVnn可取值范围为CONV00~CONV15,即自动转换最多可达16个通道。每一个CONVnn的4位二进制用来选择模拟输入通道。

(4)CONT_RUN的设置及相应处理

如果SEQ处在连续转换方式(CONT_RUN(ADCTRL1[6])=1),则转换自动重新开始,即MAXCONVn的值再装入序列计数器状态位SEQ_CNTR,SEQ1的状态置位为CONV00。

如果SEQ处在启动/停止转换方式(CONT_RUN(ADCTRL1[6])=0),则在结束一个自动化序列(EOS)后,序列发生器保持在一个状态,并且SEQ_CNTR保持为0。

9.1.3、双序列模式下的工作原理

针对下图说明双序列ADC自动转换运行机制。它与级联(SEQ)模式下的ADC自动转换机制相似。下面介绍的是两种模式的不同点。

(1)决定双序列模式的条件

采样方式选择控制位SMODE_SEL(ADCTRL3[0])和级联选择控制位SEQ_CASC(ADCTRL1[4])也用来选择双序列模式。当SMODE_SEL=1是,为并发采样模式。这里的并发指序列发生器SEQ1和SEQ2都参与自动模数转换。由于只有一个转换器,因此两个序列发生器的采样和转换并不是同时进行的,SEQ1的优先级高于SEQ2。当SEQ_CASC(ADCTRL1[4])清0时,为双序列发生器方式,此时,SEQ1和SEQ2作为两个8状态序列发生器操作。

当需要对两个并列的引脚如(ADCINA0及ADCINB0)进行先后采样时,通常将SMODE_SEL和SEQ_CASC都置位为1,即采用并发级联模式。指令为

AdcRegs.ADCTRL3.bit.SMODE_SEL=1; //并发采样方式

AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // Cascaded Mode

(2)双序列发生器转换结果的存储

序列发生器1(SEQ1)模数转换的结果存入RESULT0~RESULT7,而序列发生器2(SEQ2)模数转换的结果存入RESULT8~RESULT15

(3)两个最大转换通道数MAX_CONV1及MAX_CONV2

与级联模式不同,这里的MAX_CONV1(ADCMAXCONV[2:0])与MAX_CONV1(ADCMAXCONV[6:4])是一个3位二进制数,它们分别表示SEQ1和SEQ2的最大转换通道数。

(4)双序列发生器的触发源

在双序列模式中,SEQ1的触发源与级联模式SEQ的触发源相同,但SEQ2的触发源只有软件和EVB两种。

(5)序列发生仲裁器

在双序列发生器模式中,仲裁器用来仲裁两序列发生器之间的竞争,SEQ1具有较高优先级。

(6)关于CONVnn

在并发模式下,CONVnn的最高位被舍弃,系统根据低3位的偏移量先进行对应A引脚的采样再进行对应B引脚的采样。

9.2 、ADC模块设置要领

9.2.1、ADC的上电顺序

10、外部接口(XINTF)

XINTF是一个非多路复用异步总线(non multiplexed asynchronous bus)。和TMS320x281x external interface类似。

说明文档约定:

十六定制数用一个后缀h,或者前缀0x。例如十六进制40(十进制64)写作40h或0x40。

寄存器都是以图表和表格的形式描述。

10.1、功能描述

XINTF映射到三个固定的内存映射区,如10.1.3所示。每一个区都有一个片选信号。每个区都可以通过特定的等待,保存和维持来被编程,这个过程可以分为读和写的过程。外部的XREADY信号可以来代替wait states。

通过配置XTIMINGx registers 来the set-up/hold and access wait states for each XINTF zone。

The access timing is based on an internal clock called XTIMCLK。XTIMCLK可以配置为系统频率,或者系统频率的一半。XTIMCLK可以运用于所有的区。XINTF bus cycles begin on the rising edge of XCLKOUT and all timings and events are generated with respect to the rising edge of XTIMCLK。

10.1.1、和TMS320x281x external interface 的区别

数据总线宽度:

281x是16位的,2833x是16位和32位。Using the 32-bit mode improves performance since 32 bits of data can be read or written in a single access.

地址总线:

增加到20位地址线。

存储器直接访问(Direct Memory Access(DMA)):

All three XINTF zones are connected to the on-chip DMA module. The DMA can be used to copy code and data to or from the XINTF while the CPU is processing other data.The281x devices do not include a DMA.

XINTF Clock Enable:

XINTF clock默认是关掉的,以减少能耗。XTIMCLK can be enabled by writing a 1 to bit 12 of the PCLKCR3 register。2812一直开着。

XINTF Pin MUXing:

许多XINTF pin是和普通I/O口是复用的,当想使用XINTF pin时,需要配置GPIO mux registers。2812的XINTF pin是明确的。

Number of Zones and Chip Select Signals:

The number of XINTF zones has been reduced to 3:Zone0,Zone6 and Zone7。Each of these zones has a dedicated chip select signal Zone 7 Memory Mapping:Zone7 is always mapped.

Zone Memory Map Locations:

Zone0 tarts at address 0x4000 and is 4Kx16。Zone6 and7 are both 1 Mx16 and start at 0x100000 and 0x200000 respectively。

EALLOW protection:The XINTF registers are now EALLOW protected.

10.1.2、进入XINTF区

每一个XINTF 区通过独特的读写进入的时序和每个区独自相连的片选信号可以被独立的配置。片信号置低意味着进入的发生。

外部地址总线XA为20位宽,且被各个区公用。产生什么外部地址依赖于要进入哪个区,如

Zone 0 为0x00000- 0x00FFF;Zone 6 and 7 both use external addresses 0x00000 - 0xFFFFF.Zone chip select signal (XZCS6 or XZCS7) will also go low。

(完整word版)WEB前端开发代码使用要求规范

WEB前端代码规范 规范目的 为提高团队协作效率,便于后台人员添加功能及前端后期优化维护,输出高质量的文档,特制订此文档。本规范文档一经确认,前端开发人员必须按本文档规范进行前台页面开发。本文档如有不对或者不合适的地方请及时提出,经讨论决定后方可更改。 基本准则 符合web标准;语义化html;结构、表现、行为分离;兼容性优良。页面性能方面,代码要求简洁明了有序,尽可能的减小服务器负载,保证最快的解析速度。 文件规范

3.jsp文件命名:英文驼峰式命名,文件名.jsp。按实际模块需求命名。 4.css文件命名:英文驼峰式命名,文件名.css。共用base.css,首页index.css,其他 页面按实际模块需求命名。 5.js文件命名:英文驼峰式命名,文件名.js。共用common.js,其他依实际模块需求命 名。 html书写规范 1.文档类型声明及编码:统一为html5的声明类型;编码统一为 ,书写时利用IDE实现层次分明的缩进。 2.非特殊情况下css文件必须在...之间引入,选择link方式引入而非 @import形式。 3.非特殊情况下js文件必须在页面底部引入。 4.引入样式文件或JavaScript文件时,须略去默认类型声明,写法如下:

11.语义化html,如标题根据重要性用h1-h6(同一页面只能有一个h1),段落标记用p,列表 用ul,内联元素中不可嵌套块状元素。 12.尽可能减少div的嵌套层数。 13.在页面中尽量避免使用内嵌样式表,即在标签内使用style="…"。 14.以背景形式呈现的图片,尽量写入css样式中;重要图片必须加上alt属性; 15.特殊符号使用:尽可能使用代码替代:比如<(<)、>(>)、空格( )、&(&)、 ”(")等等; 16.尽量避免使用过度复杂的HTML结构。 css书写规范 1.编码统一为utf-8。 2.为了避免一些浏览器兼容性问题以及增加样式重用性,每个页面必须引入base.css(详见 附件一),此文件不可随意修改。 3.class与id的使用:id是唯一的并是父级的,class是可以重复的并是子级的,所以id 仅使用在大的模块上,class可用在重复使用率高及子级中。 4.为JavaScript预留钩子的命名,请以js_起始,比如:js_hide,js_show。 5.class与id命名:使用英文命名,命名要语义化,简明化,但不要使用诸如first,last 之类的命名。使用驼峰式和下划线分隔相结合的命名规则,即命名应以父级加子级的命名规范,如:父级的类为simple 子级的类应该为simple_first,以此类推,但是尽量避免出现超过四级的类命名。 6.css属性书写顺序,建议遵循:自身属性-->布局定位属性-->文本属性-->其他属性。此条 可根据自身习惯书写,但尽量保证同类属性写在一起。

前端规范-HTML规范

来源:NEJ-更好的JS解决方案 搬运工:陈晓勉 HTML规范- 整体结构 ?文件应以“”首行顶格开始,推荐使用“”。 ?必须申明文档的编码charset,且与文件本身编码保持一致,推荐使用UTF-8编码。?根据页面内容和需求填写适当的keywords和description。 ?页面title是极为重要的不可缺少的一项。 锐诺互动 结构顺序和视觉顺序基本保持一致

?按照从上至下、从左到右的视觉顺序书写HTML结构。 ?有时候为了便于搜索引擎抓取,我们也会将重要内容在HTML结构顺序上提前。?用div代替table布局,可以使HTML更具灵活性,也方便利用CSS控制。 ?table不建议用于布局,但表现具有明显表格形式的数据,table还是首选。 结构、表现、行为三者分离,避免内联 ?使用link将css文件引入,并置于head中。 ?使用script将js文件引入,并置于body底部。 保持良好的简洁的树形结构 ?每一个块级元素都另起一行,每一行都使用T ab缩进对齐(head和body的子元素不需要缩进)。删除冗余的行尾的空格。 ?使用4个空格代替1个Tab(大多数编辑器中可设置)。 ?对于内容较为简单的表格,建议将tr写成单行。 ?你也可以在大的模块之间用空行隔开,使模块更清晰。

热门标签

...

最热TOP5

更多?

Web前端开发规范手册

Web前端开发规范手册 一、规范目的 1.1 概述 (1) 二、文件规范 2.1 文件命名规则 (1) 2.2 文件存放位置 (2) 2.3 css 书写规范 (3) 2.4 html书写规范 (7) 2.5 JavaScript书写规范 (11) 2.6 图片规范 (12) 2.7 注释规范 (13) 2.8 css 浏览器兼容 (13) 一、规范目的 1.1 概述 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进行前台页面开发. 本文档如有不对或者不合适的地方请及时提出, 经讨论决定后可以更改此文档. 二、文件规范 2.1 文件命名规则 文件名称统一用小写的英文字母、数字和下划线的组合,其中不得包含汉字、空格和特殊字符;命名原则的指导思想一是使得你自己和工作组的每一个成员能够方便的理解每一个文件的意义,二是当我们在文件夹中使用“按名称排例”的命令时,同一种大类的文件能够排列在一起,以便我们查找、修改、替换、计算负载量等等操作。

a. HTML的命名原则 引文件统一使用index.htm index.html index.asp文件名(小写) 各子页命名的原则首先应该以栏目名的英语翻译取单一单词为名称。例如: 关于我们\ aboutus 信息反馈\ feedback 产品\ product 如果栏目名称多而复杂并不好以英文单词命名,则统一使用该栏目名称拼音或拼音的首字母表示; 每一个目录中应该包含一个缺省的html 文件,文件名统一用index.htm index.html index.asp; b. 图片的命名原则 图片的名称分为头尾两部分,用下划线隔开,头部分表示此图片的大类性质 例如:广告、标志、菜单、按钮等等。 放置在页面顶部的广告、装饰图案等长方形的图片取名:banner 标志性的图片取名为:logo 在页面上位置不固定并且带有链接的小图片我们取名为button 在页面上某一个位置连续出现,性质相同的链接栏目的图片我们取名:menu 装饰用的照片我们取名:pic 不带链接表示标题的图片我们取名:title 范例:banner_sohu.gif banner_sina.gif menu_aboutus.gif menu_job.gif title_news.gif logo_police.gif logo_national.gif pic_people.jpg 鼠标感应效果图片命名规范为"图片名+_+on/off"。 例如:menu1_on.gif menu1_off.gif c. javascript的命名原则 例如:广告条的javascript文件名为ad.js 弹出窗口的javascript文件名为pop.js d. 动态语言文件命名原则 以性质_描述,描述可以有多个单词,用“_”隔开,性质一般是该页面得概要。 范例:register_form.asp register_post.asp topic_lock.asp 2.2 文件存放位置规范 _Root cn 存放中文HTML文件 en 存放英文HTML文件 flash 存放Flash文件 images 存放图片文件 imagestudio 存放PSD源文件 flashstudio 存放flash源文件 inc 存放include文件 library 存放DW库文件 media 存放多媒体文件 project 存放工程项目资料

前端代码标准最佳实践:HTML篇

我们今天来探讨Web前端HTML的一些最佳实践。 (1)HTML代码的基本规范 1. HTML的命名和格式 任何代码的混乱都是从命名和格式的混乱开始的,所以一定要有统一和规范的命名和格式,以下是一些基本的规范。 HTML代码所有的标签名和属性应该都为小写,虽然HTML代码是大小写不敏感的,但是W3c的规范建议为小写;属性值应该用双引号包括。 给所有的关键元素定义元素的id和class,便于和CSS,JavaScript的交互;id名称中的关键词用下划线(_)连接,class的关键词用中划线(-)连接,根据实际的意义和Dom树的层级关系定义合适的名称。 HTML代码的层级缩进为4个空格;值为空的元素定义应该单独占用一行;包含子元素的元素的起始标签和闭合标签分别单独占用一行。 例子: ? 1 2 3 4 5 6 7

...
2 CSS代码和HTML代码分离 样式可以直接写在标签的style属性里面,也可以写在页面head区域的style标签里面,这两种方式都是不好的方式,尤其第一种方式。应该把样式单独写到css样式文件中,方便代码的重用和维护。 3. 写标准的HTML代码 所有的HTML标签应该正确闭合;所有的元素定义都要有起始和闭合标签,即使元素的值为空,除了如下这些标签,如下的标签是可以自闭合:

等。

前端代码规范

福宝童趣 61区项目前端代码规范 代码规范 六一区项目前端组 2016

文档控制 更改记录 日期作者版本更改参考 2016-8-15 1.0 审阅 姓名职位 分发 拷贝号姓名地点 1 2 3 4

目录 代码规范 前端编码规范(1)——一般规范 这是一份旨在增强团队的开发协作,提高代码质量和打造开发基石的编码风格规范,其中包含了HTML, JavaScript 和CSS/SCSS 这几个部分。我们知道,当一个团队开始指定并实行编码规范的话,错误就会变得更加显而易见。如果一段特定的代码不符合规范的话,它有可能只是代码风格错误,而也有可能会是bug。早期指定规范就使得代码审核得以更好的开展,并且可以更精确的地定位到错误。只要开发者们能够保证源代码源文件都严格遵循规范,那接下去所使用的混淆、压缩和编译工具则可投其所好不尽相同。 文件命名规范 在web 项目中,所有的文件名应该都遵循同一命名约定。以可读性而言,减号(-)是用来分隔文件名的不二之选。同时它也是常见的URL 分隔符(i.e. //https://www.wendangku.net/doc/f41093019.html,/blog/my-blog-entry or //https://www.wendangku.net/doc/f41093019.html,/images/big-black-background.jpg),所以理所当然的,减号应该也是用来分隔资源名称的好选择。 请确保文件命名总是以字母开头而不是数字。而以特殊字符开头命名的文件,一般都有特殊的含义与用处(比如compass[1] 中的下划线就是用来标记跳过直接编译的文件用的)。 资源的字母名称必须全为小写,这是因为在某些对大小写字母敏感的操作系统中,当文件通过工具压缩混淆后,或者人为修改过后,大小写不同而导致引用文件不同的错误,很难被发现。 还有一些情况下,需要对文件增加前后缀或特定的扩展名(比如.min.js, .min.css),抑或一串前缀(比如3fa89b.main.min.css)。这种情况下,建议使用点分隔符来区分这些在文件名中带有清晰意义的元数据。 不推荐 推荐 推荐

前端代码编写规范

前端代码编写规范

前端代码编写规范 命名规则 1.项目名称 项目名称驼峰式命名。 例:myProject 2.目录命名 采用单数命名法。 例:css img font js 3.JS文件命名 字母全部小写,单词之间用“-”链接。 例:popup-window.js 4.CSS文件命名 字母全部小写,单词之间用“-”链接。 例:popup-window.css 5.H TML文件命名 文件名称驼峰式命名。 例:riverMonitor.html HTML 1.语法

缩进使用Tab(4个空格); 解释:对于非HTML标签之间的缩进,比如script或style标签内容缩进,与script 或style标签的缩进同级。

  • first
  • second
嵌套的节点应该缩进; 在属性上使用双引号(字符串拼接除外); 属性名全小写,用“-”做分隔符; 自动闭合标签处不能使用斜线。 Page title Company Hello, world!

html+css前端编码规范

HTML CSS编码规范 2012-05-08 目录 HTML CSS编码规范 (1) CSS样式文件的命名 (1) CSS选择符的命名 (2) 常用CSS选择符命名参考 (2) Id和class的区别 (3) CSS的优先级 (3) 不需要重复定义可继承的值 (4) 多重CSS样式定义,属性追加重复最后优先原则 (4) 导入(Import)和隐藏CSS (4) CSS链接规范 (5) CSS hack (5) JS调用规范 (5) HTML+CSS页面布局 (5) HTNL代码书写规范 (6) 字体规范 (6) 图片的分类及命名规则 (7) HTML CSS编码规范 任何一个项目或者系统开发之前都需要定制一个开发约定和规则,这样有利于项目的整体风格统一、代码维护和扩展。由于web 项目开发的分散性、独立性、整合的交互性等,所以定制一套完整的约定和规则显得尤为重要。 CSS样式文件的命名

在项目初期,会把不同的类别的样式放于不同的CSS文件,是为了CSS编写和调试的方便,在项目后期会为了网站性能上的考虑会整合不同的CSS文件到一个CSS文件。 CSS选择符的命名 所有选择符必须有小写英文字母或“_”下划线组成,必须以字母开头,不能为纯数字。为了开发后样式名管理方便,要用有意义的单词或缩写组合来命名,让人看命知其意,节省查找样式的时间。样式名必须是表示样式的大概含义(禁止出现如Div1、Div2、Style1….),参考下面的“样式命名参考”。 对CSS选择器的使用只允许派生选择器、类选择器和属性选择器,以及它们的组合使用,严禁使用ID选择器(ID是用于 javascript的编写)。 如:li span {…} td.fancy {…} input[type="text"]{…} 当定义的样式名比较复杂时用下划线把层次分开, 比如:dcrm_logo{ …} dcrm_logo_ico{…} 常用CSS选择符命名参考

前端代码编写规范

前端代码编写规 命名规则 1.项目名称 项目名称驼峰式命名。 例:myProject 2.目录命名 采用单数命名法。 例:css img font js 3.JS文件命名 字母全部小写,单词之间用“-”。 例:popup-window.js 4.CSS文件命名 字母全部小写,单词之间用“-”。 例:popup-window.css 5.HTML文件命名 文件名称驼峰式命名。 例:riverMonitor.html HTML 1.语法 缩进使用Tab(4个空格); 解释:对于非HTML标签之间的缩进,比如script或style标签容缩进,与script或style标签的缩进同级。

  • first
  • second

嵌套的节点应该缩进; 在属性上使用双引号(字符串拼接除外); 属性名全小写,用“-”做分隔符; 自动闭合标签处不能使用斜线。 Page title Company Hello, world! 2.HTML5 doctype 页面开头的doctype大写,html小写。 例: ... 3.字符编码 采用UTF-8的编码格式。 例: ... 4.引入CSS,JS CSS引入使用 JS 引入使用页面不允许出现style标签。 5.属性 1.属性名必须使用小写字母

...

前端开发规范

前端开发规范 一、静态界面规范 1、项目文件的创建如下: 注:a、静态页的制作必须按照上图所示文件目录;b、media.css 样式表只能写媒体查询;c、base.css样式表是清除默认样式,原则上是不许改动;d、bgImages文件夹只能放背景图,products 文件放产品图; 2、命名规范 a、html文件的命名必须有实际意义,根据页面展示的主体功 能命名; b、样式的类名定义尽量做到语义化,但是不能过长; c、图片的命名尽量做到语义化,不能随意命名; 注:可以参考一些第三方UI插件的命名规则(如:easy-ui、 bootstrap); 3、HTML文件规范 a、标签的使用和嵌套尽量遵循W3C的标准; b、页面中组合式标签严禁随意进行嵌套(如:ul、dl);

c、页面中标题尽量使用h1~h5这样的标签; d、内联元素和内联块元素严禁嵌套块级元素; e、元素使用浮动后必须在父级清理浮动; f、静态图片尽量通过背景图来实现; g、按照页面的功能模块添加注释,统一写在模块的开始; 4、CSS文件规范 a、涉及到css3的样式统一加上兼容性前缀; b、css3动画的定义统一放到样式的最顶部; c、原则上是不能在结构中定义样式; d、尽量不要使用!Important这样的后缀; e、样式尽量做到公用,避免大量定义类名; f、根据样式的功能添加注释,统一写在模块的开始;

二、数据交互 1、项目文件的创建前端部分如下: 注:a、Resources文件中的文件目录与静态界面中的一致;b、Areas文件和Views文件中的文件目录和后台协商,尽量根据 功能进行视图的拆分;c、Scripts文件中存放第三方插件;d、 Shared文件夹中放一些公用的视图,如项目中文件的引入、公 用的弹框等;e、文件的头部统一按上图所示 2、JavaScript代码规范 a、将公用的JS文件统一封装在common.js文件中; b、方法都要添加注释,注明该方法的功能以及参数的作用; c、方法名要有语义化,使用驼峰命名的规则; d、尽量不要使用全局变量,变量要语义化,使用驼峰命名; e、将交互代码写在对应的拆分视图的头部,并做好注释; f、JS代码中尽量不要直接操作样式,可以通过类名;

web前端开发岗位职责

web前端开发岗位职责 1、前端开发工程师岗位职责 1、根据工作安排高效、高质地完成代码编写,确保符合规范的前端代码规范; 2、负责公司现有项目和新项目的前端修改调试和开发工作; 3、与设计团队紧密配合,能够实现实现设计师的设计想法; 4、与后端开发团队紧密配合,确保代码有效对接,优化网站前端性能; 5、页面通过标准校验,兼容各主流浏览器。 2、WEB前端开发工程师的岗位职责 岗位职责: 1、协助系统架构设计师进行系统架构设计工作; 2、承担WEB前端核心模块的设计、实现工作; 3、承担主要开发工作,对代码质量及进度负责; 4、参与进行关键技术验证以及技术选型工作; 5、和产品经理沟通并确定产品开发需求。 3、web前端开发的岗位职责 在以前可能大部分的人都没有听过什么web前端,最多的就是网页设计或者语言开发。现在几乎所有的网络公司都有web前端的职位,甚至没有web前端都不好意思说自己是网络技术公司。那么现在学习web前端火不火呢?Web前端在公司主要是做什么呢? 先说说前端技术和后端技术的区别:用互联网来做比喻,凡是通过浏览器到用户端计算机的统称为前端技术.相反存贮于服务器端的统称为后端技术。前端技术包括JavaScript、ActionScript、CSS、xHTML等“传统”技术与Adobe AIR、Google Gears,以及概念性较强的交互式设计,艺术性较强的视觉设计等等.

前端开发工程师(或者说“网页制作”、“网页制作工程师”、“前端制作工程师”、“网站重构工程师”),这样的一个职位的主要职责是与交互设计师、视觉设计师协作,根据设计图用HTML和CSS完成页面制作。同时,在此基础之上,对完成的页面进行维护和对网站前端性能做相应的优化。另外,一名合格的前端开发工程师,应该具有一定的审美能力和基础的美工操作能力,能很好的与交互及视觉协作。 以上可以看出,要成为一名合格的前端开发人员,需要掌握的技术是非常多的,web前端的岗位也是非常具有挑战性的,因此想要加入web前端的人员,选择专业的学习机构是很必要的,笔者知道的北京八维教育有web前端课程。 4、web开发岗位职责 1. 负责网站前后台的修改和升级,根据网站业务需要开发,制作和程序修改。 2. 参与制定网站研发方案以及,升级方案。 3. 参与网站研发,按照要求按时按质按量的完成网站编程开发技术工作。 4. 负责网站上线前的测试。 5. 负责对网站软硬件设施进行安全和稳定性巡检;并负责统计和监视系统日志。 6. 协助公司各部门,满足和协调公司各相关部门提出的网站技术需求。 7. 负责网站日常运行的技术维护工作,对出现的问题积极有效的进行处理。 .

前端代码开发守则

前端代码开发守则集团公司文件内部编码:(TTT-UUTT-MMYB-URTTY-ITTLTY-

前端代码编写规范 一、规范目的 为提高团队协作效率,便于后台人员添加功能及前端后期优化维护,输出高质量的文档,特制订此文档。 本规范文档一经确认,前端开发人员必须按本文档规范进行前台页面开发。 本文档如有不对或者不合适的地方请及时提出,经讨论决定后方可更改。 二、基本准则 符合WEB标准,语义化HTML,结构化表现行为分离,代码兼容性优良。 页面性能方面,代码要求简洁明了有序,尽可能的减小服务器负载,保证最优最快的解析速度。 三、文件规范 1.Html,Css,Js,Images文件均归档至约定的目录中;目录命名尽可能使用英文,语义化,公用部分和各模块分开。比如:公用部分可放在comm目录文件夹下,各功能模块各建一个有意义的文件夹; 2.Html文件命名:英文命名,整个网站统一后缀,不要同时出现shtml、shtm、html、htm;本规范采用“.html”。同时将对应界面稿放于同目录中,若界面稿命名为中文,请重命名与html文件同名,以方便后端添加功能时查找对应页面; 3.css文件命名:英文命名,后缀.css。共用common.css,首页index.css,其他页面依实际模块需求命名; 4.Js文件命名:英文命名,后缀.js。共用common.js,其他依实际模块需求命名。 JS文件必须存入统一的JS目录文件夹; 四、HTML书写规范

1.文档类型声明及编码:统一为html5声明类型;编码统一为,书写时利用IDE实现层次分明的缩进; 2.非特殊情况下样式文件必须外链至…之间;非特殊情况下JavaScript 文件必须外链至页面底部; 3.引入样式文件或JavaScript文件时,须略去默认类型声明,写法如下: 4.所有编码均遵循xhtml标准,标签&属性&属性命名,必须由小写字母及下划线数字组成,且所有标签必须闭合,包括br(
),hr(


)等;属性值必须用双引号包括; 所有标签和属性名称都必须小写; 5.充分利用无兼容性问题的html自身标签,比如span,em,strong,optgroup,label等等;需要为html元素添加自定义属性的时候,首先要考虑下有没有默认的已有的合适标签去设置,如果没有,可以使用须以”data-”为前缀来添加自定义属性,避免使用”data:”等其他命名方式; 6.语义化html,如:标题根据重要性用h*(同一页面只能有一个h1),段落标记用p,列表用ul,内联元素中不可嵌套块级元素; 7.尽可能减少div嵌套,如: 欢迎访问XXX,您的用户名是 用户名

(完整word版)WEB前端开发代码使用要求规范.docx

实用文档 WEB前端代码规范 规范目的 为提高团队协作效率,便于后台人员添加功能及前端后期优化维护,输出高质量的文档,特制订此文档。本规范文档一经确认,前端开发人员必须按本文档规范进行前台页面开发。本文档如有不对或者不合适的地方请及时提出,经讨论决定后方可更改。 基本准则 符合 web标准;语义化 html ;结构、表现、行为分离;兼容性优良。页面性能方面,代 码要求简洁明了有序,尽可能的减小服务器负载,保证最快的解析速度。 文件规范 1.Html, css ,js ,images 文件均归档至相应约定的目录中。 css images backStage js 后台模?? css WebRoot images frontStage js WEB-INF 前台模?? 全局公共模?? 2. html 文件命名:英文驼峰式命名,文件名.html 。按实际模块需求命名。

3.jsp 文件命名:英文峰式命名,文件名 .jsp 。按模需求命名。 4.css 文件命名:英文峰式命名,文件名 .css 。共用 base.css ,首 index.css ,其他面按模 需求命名。 5.js 文件命名:英文峰式命名,文件名 .js 。共用 common.js,其他依模需求命名。 html 书写规范 1. 文档型声明及:一html5的声明型;一 ,写利用IDE 次分明的。 2.非特殊情况下 css 文件必在 ... 之引入, link 方式引入而非 @import 形式。 3.非特殊情况下 js 文件必在面底部引入。 4.引入式文件或 JavaScript 文件,略去默型声明,写法如下: 5.引入 JS 文件,文件名包含名称及版本号及是否版,比如: jquery- 1.4.1.min.js ; 6.引入插件,文件名格式名称 +插件名称,比如: jQuery.cookie.js 。 7.所有 HTML嵌套必是正确的,禁止出多出或者少出合的情况。 8.所有均遵循 xhtml 准,、属性、属性命名必由小写字母及下划数字成, 且所有必合,包括br(
) ,hr(


) 等;属性必用双引号包括。 9.充分利用无兼容性的 html 自身,比如 span、em、strong 、optgroup 、label ?? 10.需要 html 元素添加自定属性的候,首先要考下有没有默的已有的合适去 置,如果没有,以 "data-" 前来添加自定属性,避免使用 "data :" 等其他命名方式。

前端开发设计规范

前端开发设计规范 目录 前端开发设计规范 (1) 一、HTML使用规范 (1) 1.1、页面文件命名规范 (1) 1.2、页面head部分书写规范 (1) 1.3、HTML元素开发规范 (2) 1.3.1、HTML元素书写规范 (2) 1.3.2、HTML元素命名规范 (3) 二、WEB页面开发规范 (4) 2.1、错误跳转页面的处理 (4) 2.2、提示信息的处理 (4) 2.3、页面的返回 (4) 2.4、提交前数据的判断验证 (4) 2.5、删除操作 (5)

2.6、页面中java代码的使用 (5) 2.7、网站页面布局规范 (5) 2.7.1、前台页面尺寸 (5) 2.7.2、标准网页广告图标规格(参考) (6) 2.7.3、页面字体 (6) 2.7.4、字体颜色 (7) 三、javaScript开发规范 (7) 3.1、javaScript文件命名规范: (7) 3.2、javaScript开发规范 (7) 3.2.1、javaScript书写规范 (7) 3.2.2、javaScript命名规范 (8) 四、css样式规范 (10) 4.1、css样式文件命名规范 (10) 4.1.1、通用样式文件命名规范: (10) 4.1.2、业务类样式文件命名规范 (10) 4.1.3、css样式文件命名须知 (11)

4.2、css样式文件存放目录规范 (11) 4.3、css样式定义规范 (11) 4.3.1、css样式内容顶部注释规范 (11) 4.3.2、css样式内容注释规范 (12) 4.3.3、css样式定义规范 (12) 4.3.4、css样式常用id的命名 (13) 4.3.5、css样式常用class的命名 (16) 4.4、css样式书写规范 (16) 4.4.1、css样式排版规范 (16) 4.4.2、css样式书写风格规范 (16) 4.4.3、css样式属性定义顺序规范 (17) 4.4.4、css样式其他规范 (18) 4.4.5、css样式 Hack的使用 (19) 4.4.6、字体定义规范 (19) 4.4.7、css样式检测 (20) 4.4.8、注意事项 (20)

前端代码规范

前端开发规范 一、基本准则 符合web标准, 语义化html, 结构表现行为分离, 兼容性优良. 页面性能方面, 代码要求简洁明了有序, 尽可能的减小服务器负载, 保证最快的解析速度. 二、文件规范 1. html, css, js, images文件均归档至约定的目录中; 2. html文件命名: 英文命名, 后缀.html. 同时将对应界面稿放于同目录中, 若界面稿命名为中文, 请重命名与html文件同名, 以方便后端添加功能时查找对应页面; 3. css文件命名: 英文命名, 后缀.css. 共用global.css, 首页index.css, 其他页面依实际模块需求命名.; 4. Js文件命名: 英文命名, 后缀.js. 共用global.js, 其他依实际模块需求命名. 三、书写规范 HTML 基本架构请参照template.html,移动端参照template-mobile.html

1. 文档类型声明及编码: 统一为html5声明类型; 编码统一为, 书写时利用IDE实现层次分明的缩进; 2. 非特殊情况下样式文件必须外链至之间;非特殊情况下JavaScript文件必须外链至页面底部; 3. 引入样式文件或JavaScript文件时, 须略去默认类型声明. CSS: JS: 4. 引入JS库文件, 文件名须包含库名称及版本号及是否为压缩版, 比如jquery-1.7.1.min.js; 引入插件, 文件名格式为库名称+插件名称, 比如jQuery.cookie.js; 5. 所有编码均遵循xhtml标准, 标签 & 属性 & 属性命名必须由小写字母及中、下划线数字组成, 且所有标签必须闭合; 属性值必须用双引号包括; 6. 充分利用无兼容性问题的html自身标签, 比如span, em, strong, optgroup, label,等等; 需要为html元素添加自定义属性的时候, 首先要考虑下有没有默认的已有的合适标签去设置, 如果没有, 可以使用须以”data-”为前缀来添加自定义属性,避免使用”data:”等其他命名方式; 7. 语义化html, 如标题根据重要性用h(同一页面只能有一个h1), 段落标记用p, 列表用ul, 内联元素中不可嵌套块级元素; 8. 尽可能减少div嵌套

美工与前端开发人员工作规范

美工与前端开发人员工作规范
一、 美工设计规范
1、文件命名 、
命名规范一般为文件名+日期: 例如:home 首页 2011-6-1.psd,亦可以细分,命名尽量做到简洁清晰,易于查找。 文件夹要分类命名,文件要分类放置,方便查找管理。
2、网页设计元素命名与图层分组 、
下面是网页中比较常用的中英文命名,结合了网站制作的 CSS 命名规范,这样可以统 一并提高效率。 为了方便大家看,特制简易表格。 登录条 标志 侧栏 页面头 导航 子导航 菜单 子菜单
LoginBar 搜索
Logo 页面主体
Sidebar 滚动
Banner 内容
Nav 标签 页
SubNav 文章列 表 List 合作伙 伴
Menu 提示信息
SubMenu 小技巧
Search 下载
Main 注册
Scroll 状态
Content 按钮
Tab 投票
Message 版权
Tips 路径导航
Downloa d 栏目标题
Register
Status
Botton
Vote
Partner
Copyright
Showpath
友情链接
页脚
加入
指南
服务
热点
新闻
Title
FriendLink
Footer
JoinUs
Guide
Service
Hot
News
当然,命名不一定要照搬,可以根据具体来实施,做到规范明了即可。上面的每个组可能都 包含着若干图层路径,这些都要命名详细。细节决定深度,按类分组图层,既方便过程的编辑又 方便以后的修改,亦可以避免冗余图层的存在。 一个页面包括很多元素,要分组管理,还要规范每一个图层、路径的命名,方便查找修改, 这是设计的基本要求。一般是按块级元素把图层分组并命名,每个组包含若干图层和路径,再相 应命名。好比我们的文件夹下的文件夹和文件。
3、图形对象约定 、
? 图片的格式:最后生成 jpg、gif、png、swf 格式的图形文件;

前端代码规范文档

前端代码规范文档 规范目的 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档。 基本准则 符合web标准, 语义化html, 结构表现行为分离, 兼容性优良。页面性能方面, 代码要求简洁明了有序, 尽可能的减小服务器负载, 保证最快的解析速度。 文件规范 html, css, js, images文件均归档至<系统开发规范>约定的目录中。 html书写规范 1.文档类型声明及编码: DOCTYPE声明:过渡型(Transitional)、严格型(Strict)、框架型(Frameset),如: , 设定编码: 2.非特殊情况下样式文件必须外链至...之间;非特殊情况下JavaScript文 件必须外链至页面底部; 3.所有编码均遵循xhtml标准, 标签 & 属性 & 属性命名必须由小写字母及下划线数字 组成, 且所有标签必须闭合, 包括 br (
), hr(


)等; 属性值必须用双引号包括; 4.语义化html, 如标题根据重要性用h*(同一页面只能有一个h1), 段落标记用p, 列表 用ul, 内联元素中不可嵌套块级元素。 5.尽可能减少div嵌套, 如
欢迎访问XXX, 您 的用户名是
用户名
完全可以用以下代码替代:
欢迎访问XXX, 您的用户名是用户名
; 6.书写链接地址时, 必须避免重定向,例如:href="https://www.wendangku.net/doc/f41093019.html,/", 即须 在URL地址后面加上“/”; 7.在页面中尽量避免使用style属性,即style="…"; 8.能以背景形式呈现的图片, 尽量写入css样式中; 9.重要图片必须加上alt属性; 给重要的元素和截断的元素加上title; 10.给区块代码及重要功能(比如循环)加上注释, 方便后台添加功能; 11.特殊符号使用: 尽可能使用代码替代: 比如 <(<) & >(>) & 空格( ) & ?(?)等 等; 12.书写页面过程中, 请考虑向后扩展性; 13.class & id 参见 css书写规范.

WEB前端编码规范精修订

W E B前端编码规范集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#

XXXX有限公司 XXXXXXXX管理平台 Web前端代码编写规范 XXXXXX 2016年1月

修改历史 第一部分 HTML规范 HTML并不是一种编程语言,而是一种标记语言,它没有任何真正的编程语言中的循环或是流程控制语句。然而,HTML代码的格式和风格是非常重要的,因为要经常对HTML代码进行维护和修改,因此HTML代码必须有很清晰的逻辑结构和布局,而使其易懂和易于维护。 HTML 语言是不区分大小写的,但为改善可读性,规定小写所有字母(除最上一行引用外)。与HTML不一样,XHTML对大小写是敏感的,和<TITLE>是不同的标签。 具体规范如下:</p><p>1.文件定义 <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 2.网站head区代码规范: head区是指<head>和</head>之间的内容。必须加入的标签: 公司版权注释 网页显示字符集 简体中文:<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 繁体中文:<meta http-equiv="Content-Type" content="text/html; charset=BIG5"> 英语:<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 作者与版权信息 此处用于存储开发公司版权信息,如: <meta name="author" content=""></p><h2>前端代码评审规范V1.0</h2><p>代码评审实行制度 2018-09-30 历史记录 号码修改日期修改内容版本号作者批准者1 2018-08-22 前端代码评审规范 1.0</p><p>目录 1 引言 (3) 1.1 编写目的 (3) 1.2 阅读对象 (3) 1.3 术语 (3) 1.4 参考文献 (3) 2 评审时间 (4) 3 评审范围 (4) 4 评审代码选择 (4)</p><p>5 人员组成 (4) 6 评审结果 (4) 7 评审记录 (5)</p><p>1引言 1.1编写目的 通过阅读代码来检查源代码与编码标准的符合性以及代码质量的活动,优点如下: 1、提高代码质量 2、在项目的早期发现缺陷,将损失降至最低 3、评审的过程也是重新梳理思路的过程,双方都加深了对系统的理解 4、促进团队沟通、促进知识共享、共同提高 1.2 阅读对象 全体前端开发人员 1.3术语 1.4参考文献</p><p>2评审时间 每两周的周一晚上进行一次代码评审,如遇临时紧急事务时往后推迟。单次评审总时长不超过2小时。 3评审范围 1、命名规范 2、注释规范 3、样式规范 4、代码结构 5、实现方式 6、性能优化 代码评审不负责检查功能、逻辑是否正确,这些要靠单元测试和QA工作来解决。 4评审代码选择 1、最近一次迭代开发的代码 2、系统关键模块 3、业务较复杂的模块 4、缺陷率较高的模块 评审代码选择控制不超过200行。 5人员组成 代码评审按前端、后端区分,两个团队单独进行代码评审。 单次代码评审被评人数:3人。 6评审结果 代码评审中评审人提出的代码问题如果合理,被评审人需当场记录问题,在评审结果后最近的一次版本上线时修改并测试完成上线。</p></div> </div> <div> <div>相关文档</div> <div class="relatedtopic"> <div id="tabs-section" class="tabs"> <ul class="tab-head"> <li id="23514726"><a href="/topic/23514726/" target="_blank">前端代码规范</a></li> </ul> </div> </div> </div> </div> <div class="category"> <span class="navname">相关文档</span> <ul class="lista"> <li><a href="/doc/2719355146.html" target="_blank">前端开发规范与代码质量管理</a></li> <li><a href="/doc/fb19231378.html" target="_blank">前端开发中的代码规范与团队协作技巧</a></li> <li><a href="/doc/5019316434.html" target="_blank">前端开发中的代码规范化指南</a></li> <li><a href="/doc/8f19154589.html" target="_blank">前端开发中的代码规范与代码质量管理方法</a></li> <li><a href="/doc/3c19217581.html" target="_blank">前端代码规范考核标准</a></li> <li><a href="/doc/6a18993979.html" target="_blank">前端开发中的代码规范与团队协作指南</a></li> <li><a href="/doc/c019056779.html" target="_blank">前端开发中的代码风格规范</a></li> <li><a href="/doc/fb19231379.html" target="_blank">前端开发中的代码规范约定</a></li> <li><a href="/doc/dd2363582.html" target="_blank">Web前端考核标准</a></li> <li><a href="/doc/e913764416.html" target="_blank">前端代码规范</a></li> <li><a href="/doc/1f6090156.html" target="_blank">前端代码标准最佳实践:HTML篇</a></li> <li><a href="/doc/fd15922457.html" target="_blank">WEB前端编码规范</a></li> <li><a href="/doc/4c4138835.html" target="_blank">web前端开发规范手册</a></li> <li><a href="/doc/7f6961883.html" target="_blank">web前端开发岗位职责</a></li> <li><a href="/doc/ba14857117.html" target="_blank">HTML+CSS前端编码规范</a></li> <li><a href="/doc/df8124182.html" target="_blank">前端代码规范</a></li> <li><a href="/doc/f54659926.html" target="_blank">WEB前端开发代码使用规范</a></li> <li><a href="/doc/5215376537.html" target="_blank">html+css前端编码规范</a></li> <li><a href="/doc/934318148.html" target="_blank">(完整word版)WEB前端开发代码使用要求规范.docx</a></li> <li><a href="/doc/db974120.html" target="_blank">Web前端考核标准</a></li> </ul> <span class="navname">最新文档</span> <ul class="lista"> <li><a href="/doc/0719509601.html" target="_blank">幼儿园小班科学《小动物过冬》PPT课件教案</a></li> <li><a href="/doc/0e19509602.html" target="_blank">2021年春新青岛版(五四制)科学四年级下册 20.《露和霜》教学课件</a></li> <li><a href="/doc/9319184372.html" target="_blank">自然教育课件</a></li> <li><a href="/doc/3019258759.html" target="_blank">小学语文优质课火烧云教材分析及课件</a></li> <li><a href="/doc/db19211938.html" target="_blank">(超详)高中语文知识点归纳汇总</a></li> <li><a href="/doc/af19240639.html" target="_blank">高中语文基础知识点总结(5篇)</a></li> <li><a href="/doc/9919184371.html" target="_blank">高中语文基础知识点总结(最新)</a></li> <li><a href="/doc/8b19195909.html" target="_blank">高中语文知识点整理总结</a></li> <li><a href="/doc/8019195910.html" target="_blank">高中语文知识点归纳</a></li> <li><a href="/doc/7f19336998.html" target="_blank">高中语文基础知识点总结大全</a></li> <li><a href="/doc/7a19336999.html" target="_blank">超详细的高中语文知识点归纳</a></li> <li><a href="/doc/6719035160.html" target="_blank">高考语文知识点总结高中</a></li> <li><a href="/doc/6a19035161.html" target="_blank">高中语文知识点总结归纳</a></li> <li><a href="/doc/4d19232289.html" target="_blank">高中语文知识点整理总结</a></li> <li><a href="/doc/3a19258758.html" target="_blank">高中语文知识点归纳</a></li> <li><a href="/doc/2519396978.html" target="_blank">高中语文知识点归纳(大全)</a></li> <li><a href="/doc/2419396979.html" target="_blank">高中语文知识点总结归纳(汇总8篇)</a></li> <li><a href="/doc/1f19338136.html" target="_blank">高中语文基础知识点整理</a></li> <li><a href="/doc/ef19066069.html" target="_blank">化工厂应急预案</a></li> <li><a href="/doc/bc19159069.html" target="_blank">化工消防应急预案(精选8篇)</a></li> </ul> </div> </div> <script> var sdocid = "f0e61566453610661fd9f408"; </script> <div class="footer"> <p><a href="/tousu.html" target="_blank">侵权投诉</a>  © 2013-2023 www.wendangku.net  <a href="/sitemap.html">站点地图</a> | <a href="https://m.wendangku.net">手机版</a></p> <p><a href="https://beian.miit.gov.cn" target="_blank">闽ICP备11023808号-7</a>  本站文档均来自互联网及网友上传分享,本站只负责收集和整理,有任何问题可通过上访投诉通道进行反馈</p> </div> <script type="text/javascript">foot();</script> </div> </body> </html>