0%

A

accurate clock 精确的时钟

results in an accurate clock 产生了(导致、致使)一个精确的时钟

adaptive layout 自适应布局

adequate adj. 充足的;适当的;胜任的

For correct operation, the input signal to the ADC must be allowed adequate time to charge the sample and hold capacitor.

advance vt. 使……前进

advancing the connected timer by one second 将连接的时钟向前推进1秒

advance at different rates 以不同的速率前进

aligned /əˈlaɪnd/ v. 结盟;支持;使成一直线;校准;安放,排列;使一致(align 的过去式和过去分词)

be aligned on B 对齐至B

byte-aligned memory address 字节内存地址

alternate /ɔːlˈtɜːnət/ adj. 交替的,轮流的;间隔的,每隔(……天等)的;(一或多个事物)另外的,可供选择的;(两者)互不相容的;另类的,非传统的;v. (使)交替,(使)轮流 n. 替换物,代理人

alternate mux selection 交替复用选择

transient pulse 瞬时脉冲

alternate mux selections 交替复用选择

The GPyGMUXn register should be configured before the GPyMUXn to avoid transient pulses on GPIOs from alternate mux selections. GPyGMUXn 寄存器应在 GPyMUXn 之前配置,以避免交替复用选择对GPIO产生瞬时脉冲。

alteration n. 改变;变更;服装修改

The Embedded C++ library works in conjunction with 15 of the headers from the Standard C library, sometimes with small alterations.

amplify vt. 放大,扩大;增强;详述 vi. 详述

amplifier n. 增益器;放大器;

power amplifier (也简写: power amp)功率放大器

pre-amplifier 前置放大器(也写作:preamplifier 或 preamp)

operational amplifier 运算放大器

analog to analog latency 模比延迟

38 μs analog-to-analog latency

appends sth. as appropriate 适当地附加某物

When sending out the address on the bus, the TWI controller appends the read/write bit as appropriate, based on the state of the TWIMDIR bit in the master mode control register.

approximate /əˈprɒksɪmət/ adj. 近似的,大概的 v. 接近,近似;粗略估计

approximately /əˈprɒksɪmətli/ adv. 大约,近似地;近于

approximation n. 近似值

A typical motherboard, including an Am486DX2-80CPU, consumes around 13 W, meaning that the CPU accounts for approximately 16 percent of the total motherboard power consumption. 一个典型的主板,包括Am486DX2-80CPU,消耗约13W,这意味着CPU约占主板总功耗的16%。

arbitration /ˌɑːbɪˈtreɪʃn/ n. 公断,仲裁

arbitrarily /ˌɑːbɪˈtrerəli/ adv. 武断地;任意地;专横地;

SOC5 is chosen arbitrarily. (此处就)任意选择SOC5。

arithmetic /əˈrɪθmətɪk/ n. 算术,算法;数字

arithmetic operations 算术运算

assemble vt. 集合,聚集;装配;收集 vi. 集合,聚集

assembly n. 装配;集会,集合 n. 汇编,编译

assembly source 汇编源代码

assembly code 汇编码

assert vt. 维护,坚持;断言;主张;声称

assertion /əˈsɜːʃn/ n. 断言,声明;主张,要求;坚持;认定

assertion check 断言检查

internal asserts 内部断言

A be assigned to B A被分配给了B

Parameters are assigned to instructions in the order in which the instructions are instantiated in the code. 参数按照在代码中实例化指令的顺序被分配给了指令。

attribute n. 属性;特质 vt. 归属;把……归于

property n. 性质,性能;财产;所有权

pin attributes 引脚分配

the attached clock 附带的时钟

attenuate v. (使)减弱;(使)纤细,稀薄 adj. 减弱的;稀薄的;细小的

attenuated adj. (力量或效果)衰减的;(人)瘦长的 v. 使减弱;使变细;稀释

attenuation n. [物] 衰减;变薄;稀释

digital attenuation step 数字衰减步长

digital attenuation range 数字衰减范围

The volume setting of each ADC can be digitally attenuated in the ADCx_VOLUME registers.

auto increment 自增

auto-increment circuit 自增电路

The ADAU1772 always decodes the subaddress and sets the auto-increment circuit so that the address increments after the appropriate number of bytes.

auxiliary /ɔːɡˈzɪliəri/ adj. 辅助的;副的;附加的;(发动机、设备等)备用的

auxiliary definitions 辅助定义

B

base address 基地址

batch session 批处理会话

To launch a batch session using two command files "input1" and "input2".

sth. become scattered throughout somewhere 某物被分散到某处

As memory blocks are "freed" back to the HeapMem, the available memory in the HeapMem becomes scattered throughout the heap.

benchmark n. 参考标准,基准 (a standard by which something can be measured or judged)

bias n. 偏移;偏差;偏见;vt. 使存偏见 adj. 偏斜的 adv. 偏斜地

bias generators 偏置发生器

bitfield reference 位域参考

bond n. 债券;结合;约定;粘合剂;纽带 vi. 结合,团结在一起 vt. 使结合;以…作保

unbond adj. 未绑定的

floating unbonded inputs 未绑定的浮点输入

To avoid any floating unbonded inputs, the Boot ROM will enable internal pullups on GPIO pins that are not bonded out in a particular package. 为了避免任何未绑定的浮点输入,Boot ROM将在特定封装中未绑定的GPIO引脚上启用内部上拉。

boost vt. 促进;增加;支援 vi. 宣扬;偷窃 n. 推动;帮助;宣扬

PGA boost 可编程增益放大器(功率)提升

booster n. 升压机;支持者;扩爆器

booster-pack / boosterpack 增强包

bootloader 引导器

be broken down into

The process of converting an analog voltage to a digital value is broken down into an S+H phase and a conversion phase.

bypass n. 旁路,支流 v. 绕过,避开;忽视,不顾(规章制度);设旁路,迂回

bypass capacitor 旁路电容

旁路电容

be bypassed with a capacitor 用一个电容进行绕装

Each supply signal on the board should also be bypassed with a single bulk capacitor (10 μF to 47 μF).

C

calibration n. 校准;刻度;标度

self-calibration 自校准

offset self-calibration 偏移自校准

Internal connection to VREFLO on all ADCs for offset self-calibration. ADC上所有到VREFLO的内部连接,都用于偏移自校准。(这语法也很迷)

A calls into B A调用B

Internally, the Memory module calls into the heap’s interface functions.

A make calls to B A调用B

it makes calls to the Heap module through the IHeap_Handle.

capacibility

capacitance n. 电容(值)

capacitor n. 电容器

easy parallel switching capacibility 易于并联开断/切换的电容

care should be taken when 当/在……时需要小心

Care should be taken when choosing a Task stack size.

在选择任务堆栈大小时要小心。

characteristic n. 特性

thermal resistance characteristics 热阻特性

static characteristic 静态特性

dynamic characteristic 动态特性

electrical characteristic 电气特性

switching characteristic 开关特性

diode characteristic 二极管特性

circuitry /ˈsɜːkɪtri/ n. 电路;电路系统;电路学;一环路

The easiest way to achieve this is to use a regulator that has a power good (PGOOD) signal to power the ADAU1772 or generate a power good signal using additional circuitry external to the regulator itself.

clamp v. 固定,稳定

The inputs are internally clamped to VDD and GND by diodes.

coefficient write 系数写入

collision /kəˈlɪʒn/ n. 碰撞;冲突;(意见,看法)的抵触;(政党等的)倾轧

collision detection 冲突检测

several-input-lines command 多行输入命令

Commands may extend over several input lines by ending each line but the last with a backslash ().

命令可以扩展到多个输入行,每一行以反斜杠()结束,最后一行以反斜杠()结束。

comment out sth. 注释掉

Therefore, commenting out a continued line comments out the entire command.

因此,注释掉一个连续的行就会注释掉整个命令.

That is, no white space is implied, nor is a comment terminated.

也就是说,没有空格,注释也不会终止。

commit /kəˈmɪt/ vt. 犯罪;把...交托给;指派…作战;使…承担义务;(公开地)表示意见 vi. 忠于(某个人、机构等);承诺

amend last commit 修改上一次提交(的数据)

initial commit message 初始提交消息

configuration entry 配置条目

conjunction n. 结合;[语] 连接词;同时发生

connect A in series with B 让A与B以串联形式连接

The headphone outputs can also be configured as ground centered outputs by connecting coupling capacitors in series with the output pins.

consistency n. 一致性

data consistency 数据一致性

data consistency in every node of the system 系统内部各节点的数据一致性

constrain vt. 驱使;强迫;束缚

be significantly constrained 非常有限 / 显著不足的

This is particularly useful on targets where the code memory is significantly constrained.

constructor n. 构造函数;构造器;建造者

destructor n. 析构函数

context of a software interrupt 软件中断的上下文

Memory allocation APIs such as Memory_alloc() and Memory_calloc() cannot be called from within the context of a software interrupt.内存分配接口如A和B不能够在软件中断的上下文中被调用。

convention n. 公约

software convention 软件公约、软件惯例

Allocation of source bits to source processor and meaning is entirely based on software convention.源位分配到源处理器和意义完全基于软件惯例。

corner frequency 角频率

correspond /,kɒrə'spɒnd/ vi. 符合,一致;相应;通信

the corresponding modules 对应模块

The ADAU1772 knows to increment its subaddress register every two bytes because the requested subaddress corresponds to a register or memory area with a 2-byte word length. [此处应该是语法有问题,个人感觉应该是increase而不是increment]

For example, Ipc_S_SUCCESS, MessageQ_E_FAIL, and SharedRegion_E_MEMORY are status codes that may be returned by functions in the corresponding modules.

curly braces 花括号

denote optional arguments 表示可选参数

mutually exclusive choices 互相排斥的选择

In this document, curly braces ({}) denote optional arguments and a vertical bar (|) separates mutually exclusive choices.

在本文档中,花括号({})表示可选参数,竖线(|)分隔互斥的选项。

current n. 电流

concurrent adj. 并发的;一致的;同时发生的;并存的 n. [数] 共点;同时发生的事件

concurrently adv. 同时地

nominal current 名义电流、额定电流

rated current 额定电流

D

declaration /,deklə'reiʃən/ n. (纳税品等的)申报;宣布;公告;申诉书;声明;

function declaration 函数声明

derived /dɪˈraɪvd/ class 派生类

In derived classes, super() must be called before you can use this. 在派生类中,使用this 前必先调用 super() 函数。

diagnostics n. 诊断学(用作单数)

discrete /dɪˈskriːt/ adj. 离散的,不连续的 n. 分立元件;独立部件

discrete device 分离部件

dissipation n. 损耗,耗散

power dissipation 功率损耗

dynamic memory allocation and deallocation 动态内存分配和回收

SYS/BIOS provides reentrant versions of malloc() and free() that internally use the xdc.runtime. SYS/BIOS为内部使用XDC.RUNTIME的 malloc() 和 free() 提供了可重入版本。

E

electric

electrical

electron

electronic

electret /ɪˈlektrət/ n. 驻极体;电介体

electret microphone 驻极体麦克风

seamless interfacing 无缝连接(的接口)

Two microphone bias pins provide seamless interfacing to electret microphones. 两个麦克风偏置针为驻极体麦克风提供了无缝连接。

electrical layer requirements 电气层要求

elicit /i'lisit/ vt. 引出

endian n. 字节存储次序,元组排列顺序

big-endian 高位对齐,大端

small-endian 低位对齐,小端

device endianness 设备字节顺序

equivalent adj. (在价值、数量等方面)相等的;等价的;等效的;等量的;同意义的 n. 对等的人(或事物);当量

equidistant /ˌiːkwɪˈdɪstənt/ adj. 等距的;距离相等的

For maximum effectiveness, locate the capacitor equidistant from the power and ground pins or slightly closer to the power pin if equidistant placement is not possible. 为了获取最大效率,应在电源及接地的等距接口处置放电容,若等距放置无法采用,则应在放置在电源一侧。

encoded internal representations 编码的内部表示

an entire contiguous Ethernet packet 一个完整连续的以太网包

error n. 错误,误差

fatal error 致命错误

offset error 便宜误差

gain error 增益误差

explicitly /ɪkˈsplɪsɪtli/ adv. 明确地;明白地

implicitly /ɪmˈplɪsɪtli/ adv. 含蓄地;暗中地

explicity and implicity 显性和隐性

exploring the ecosystem 探索生态系统

extent n. 程度;范围;长度

extend vt. 延伸;扩大;推广;伸出;给予;使竭尽全力;对…估价 vi. 延伸;扩大;伸展;使疏开

extensive adj. 广泛的;大量的;广阔的

extension n. 拓展;延伸;接发;(医学)牵引;(计算机)拓展名;(逻辑)外延

extended adj. 延伸的;扩大的;长期的;广大的 v. 延长;扩充(extend 的过去分词)

The extent to which this is true depends on the floating-point processor’s architecture. 这一点在多大程度上取决于浮点处理器的架构。

event combiner 事件组合器

expand vt. 扩张;使膨胀;详述 vi. 发展;张开,展开

expansion n. 膨胀;阐述;扩张物

It also expands the vector table to allow each interrupt to have its own ISR.

F

facility n. 设备,设施

facilitate v. 促进,帮助,使容易

These registers also provide a Source ID facility by which up to 28 different sources of interrupts can be identified. 这些寄存器还提供了一个 源 ID设备 ,通过它可以识别多达28个不同的中断源。

The IPCGRH register facilitates interrupts to external hosts. IPCGRH寄存器促进中断到外部主机。

farad /ˈfæræd/ n. 法拉

microfarad 微法

millifarad 毫法

nanofarad /ˈneɪnəˈfærəd/ 纳法

fed vt. 喂养

A be fed directly to somewhere / B A被直接带到某处 、A被直接喂给B(吃掉)

The ADAU1772 can generate its clocks either from an externally provided clock or from a crystal oscillator. In both cases, the on board PLL can be used or the clock can be fed directly to the core.

filter n. 滤波器

all-pole filters / gain 全通角过滤器/增益

second order filter 二阶滤波器

sinc filter

fixed adj. 固定的

variable-sized buffers 可变大小缓冲

fixed-size buffers 固定大小缓冲

formal parameter 形式参数

C++ allows you to specify default values for formal parameters within the function declaration. C++允许你在函数声明中指定形参的默认值。

forward adj. 正向的

diode forward current 二极管正向电流

on-board fractional PLL 板载小数分频PLL

frame sync edge detection 帧同步边缘检测

These registers (where x signifies SPORT 0 through 7) allow programs to set frame sync edge detection for I2S compatibility. 这些寄存器(其中x表示SPORT 0到7)允许程序设置帧同步边缘检测以实现I2S的兼容性。****

full-scale 全尺寸的、全尺度的、满量程的

full-scale input voltage 满量程输入电压

function call sequence 函数调用顺序

Standard IPC Function Call Sequence

A as a function of B. 把B带入函数求得A;把B当作自变量,A当作因变量。用于描述 A与B的关系。

collector current as a function of case temperature 集电极电流与外壳温度的关系

G

ganged adj. 成组的,联动的;v. 用金属细丝加固

ganged references

gate off 关闭

turn on 打开

give more control over sth. 在某事上予以更多控制权

graphical programming software 图形化编程软件

The program and parameter RAMs can be loaded with custom audio processing signal flow built using the SigmaStudio™ graphical programming software from Analog Devices, Inc. 在使用Analog Devices公司的SigmaStudio图形化编程软件建立自定义音频处理信号流时,程序和参数内存会被自动加载。

granularity n. 间隔尺寸,[岩] 粒度

the quality of being composed of relatively large particles

H

a handful of sth. 一些某物(可数)

An adaptive layout will give you more control over the design because you only have a handful of states to consider.

harmonic n. 谐波

total harmonic distortion + noise 总谐波失真和噪声

harness n. 马具;背带,吊带;甲胄;挽具状带子;降落伞背带;日常工作 v. 治理,利用;套;驾驭;披上甲胄;将(两只动物)拴在一起

wiring harness 线束

the complex wiring harness 复杂的线束

hierarchy board 层次结构板

hint n. 暗示;线索 vt. 暗示;示意 vi. 示意

This chapter provides hints for improving the runtime performance and shared memory usage of applications that use IPC.

I

identical adj. 一致的,一样的

Each ePWM instance is identical with one exception. 所有ePWM实例都是一致的,只有一个例外。

impedance /ɪmˈpiːdns/ n. 阻抗

input impedance 输入阻抗

output impedance 输出阻抗

load impedance 负载阻抗

impedance matching 阻抗匹配

impedance mismatch 阻抗失配

implement v. 实施,执行;实现,使生效 n. 工具,器具;手段 (apply in a manner consistent with its purpose or design)

implementation of the interface 接口的实现

instantiation of clock 时钟实例化

incorporate 包含

The ADAU1772 is a codec with four inputs and two outputs that incorporates a digital processing engine to perform filtering, level control, signal level monitoring, and mixing.

be independent of 独立于……;相对于……独立

indicate vt. 表明;指出;预示;象征

inherent adj. 固有的;内在的;与生俱来的,遗传的

In Round-Robin priority method, no SOC has an inherent higher priority than another. 在RR优先级模式下,所有SOC的优先级都平等。

install sth. across sth. 在某物上安装某物

To use MCLK on the J4 header, first install a resistor across the R2 pads. 要在J4引脚上使用MCLK,首先要在R2焊盘上安装一个电阻。

instantiation n. 实例化;[计] 例示

interact vt./vi. 互相影响;互相作用

interaction n. 相互作用,相互影响;交流;[数] 交互作用;互动

interactive adj. 交互式的;相互作用的

interactive plot windows 互动式绘制窗口

-p tells the program not to close any remaining interactive plot windows when the program exits.

internal digital supply voltage 内部数字电源电压

The operating voltage range is 1.8 V to 3.63 V, with an on-board regulator generating the internal digital supply voltage.

interrupt n. 中断

peripheral interrupt 外设中断

hardware interrupt 硬件中断

software interrupt 软件中断

external interrupt 外部中断

intuitive /ɪnˈtjuːɪtɪv/ adj. 直觉的;凭直觉获知的

counterintuitive adj. 违反直觉的

The naming convention for these endpoints is very consistent, but frequently counterintuitive.

invention n. 发明

inventory n. 存货,存货清单;详细目录;财产清册 vt. 给……开列清单

take inventory of 盘点一下

take inventory of the unique signals 对独特的信号进行盘点

invoke the class member function 调用类成员函数

By writing a wrapper function which accepts a class instance as a parameter, you can invoke the class member function from within the wrapper. 通过编写以类实例作为参数的包装函数,你可以在包装函数中调用其类成员函数。

insertion/withdrawal force 推拉力

isolate vt. (使)隔离,孤立;将……剔出;(某物质、细胞等)分离;区别看待(观点、问题等)n. 被隔离的人(或物);[生](用于研究的)分离菌,隔离群

isolated adj. 偏远的;孤立的;孤独的;单独的; 绝缘的

inter-channel isolation 通道间隔

optimal isolation 隔离优化

As previously stated, the stack has been designed for optimal isolation, and so that it may seamlessly plug in to varying run-time environments.

J

left/right justified 左/右对齐

L

legacy n. 遗产;遗赠财物;遗留问题;后遗症

latch vi. 占有,抓住;闭锁 vt. 闩上;纠缠住某人 n. 门闩,锁存器

latency n. 潜伏;潜在因素;延迟

leap year 闰年

locate sth. from somewhere 从某处定位某物

low latency 低延迟

The path from the analog input to the DSP core to the analog output is optimized for low latency and is ideal for noise cancelling headsets.

M

mandatory /‘mændətəri/ adj. 强制的;命令的;托管的; n. 受托者

Ping uses the ICMP protocol's mandatory ECHO_REQUEST datagram to elicit an ICMP ECHO_RESPONSE from a host or gateway.

PING使用ICMP协议的强制性的“回声请求”数据报来引出主机或网关的“回声响应”。

mangle /mæŋgl/ vt. 乱砍、损坏

name mangling (函数)命名重整

The process of encoding the signature into the link name is referred to as name mangling. 对链接名称解码签名的过程被称为命名重整。

Since function overloading is accomplished through name mangling, function overloading has limitations for functions that are called from the configuration. 由于函数重载是通过命名重整完成的,因此函数重载对从配置中调用的函数有限制。

maximum outstanding connection request 最大未完成连接请求

meet the requirement 满足需求

This feature assists designers in meeting the Energy Star requirements.

memory policy 存储策略

memory management traits 内存管理特征

Different heap implementations optimize for different memory management traits.

memory region 内存区域

This function enables caching for a specific memory region.

metric n. 度量标准 adj. 公制的;米制的;公尺的

metrics n. 度量;作诗法;韵律学

bad font metrics 糟糕的字体度量

-s tells the program to wait for slow font initialization on startup. Otherwise it prints an error and continues with bad font metrics.

modulate vi. 调制;转调 vt. 调节;调制;调整

modulation n. 调制;调整

modulator n. 调制器

PCM (Pulse Code Modulation) 脉冲编码调至

PDM (Pulse Density Modulation) 脉冲密度调制

PDM modulator 脉冲密度调制器

module n. [计] 模块;组件;模数

monolithic /ˌmɒnəˈlɪθɪk/ adj. 整体的;巨石的,庞大的;完全统一的 n. 单块集成电路,单片电路

monolithic diode 单片二极管

millennium /mɪˈleniəm/ n. 千年;千禧年

minimum addressable units 最小可寻址单元

Memory allocation sizes are measured in "Minimum Addressable Units" (MAUs) of memory. An MAU is the smallest unit of data storage that can be read or written by the CPU.

miscellaneous /ˌmɪsəˈleɪniəs/ adj. 混杂的,各种各样的;多方面的,多才多艺的

miscellaneous devices 杂项设备

A be a multiple of B A应该是B的数倍

To prevent unintended behavior "blockPtr" should be aligned on the cache line size and "byteCnt" should be a multiple of the cache line size.

multiplex adj. 多元的,多样的;多路传输的;v. 多路传输、多工

simplex 单工的

full-duplex 全双工

half-duplex 半双工

transmission simplex 单工传输

full-duplex communication 全双工通信

full-duplex channel 全双工信道

time division multiplex communication 时分多路通信

time multiplexer communication channel 时分多路通信信道

time-derived channel 时分通道、时分信道

multiplex up to 复用至xx

The ePIE multiplexes up to sixteen peripheral interrupts into each CPU interrupt line.

mutual /'mju: tfuel/ exclusion 互斥

Manages gates for mutual exclusion of shared resources by multiple processors and threads. 管理多个处理器和线程共享资源的互斥门。

N

noise cancelling headset 降噪耳机

O

octet /ɔk'tet/ 八重、八位(计算机语境下,基本与byte同意)

on a + adj. + basis 在何种基础上

You can reduce the amount of code space used by an application by setting the memory Policy on a global or per-module basis.

register optimizations 寄存器优化

local optimizations 本地优化

global optimizations 全局优化

interprocedure optimization 进程优化

other than .... 除了……

Blue boxes identify modules for which your application will call C API functions other than those used to dynamically create objects.

P

two parameter banks 参数集(参数组, two sets of parameters)

There are two parameter banks available. Each bank can hold a full set of 160 parameters (32 filters × 5 coefficients).

parasite /ˈpærəsaɪt/ n. 寄生虫

parasitic /ˌpærəˈsɪtɪk/ adj. 寄生的

parasitical adj. 寄生的

channel parasitic input capacitance 通道寄生输入电容

parse /'pɑːz/ v.理解,从语法上分析,解析

Parsing CGI Form Data 解析CGI结构的数据

a particular heap implementation 特定堆生成

Using Memory APIs makes applications and middleware portable and not tied to a particular heap implementation.

patched /pætʃt/ adj. 打补丁的 v. 打补丁;遮盖(视力好的眼)促进弱视眼看;(用补丁对程序)改错(patch 的过去式和过去分词)

be patched with sth. 用某物修补

period n. 周期

periodic /periɒdik/ adj. 周期的

perspective n. 观点;远景;透视图 adj. 透视的

customize perspective 定制化的角度(来看)

phase n. 相位

phase shifted 180 DEG 相位偏移180度

phase relationship 相位关系

sb./sth. places certain restrictions on sth. / sw. 某物对某物产生影响

Running the scheduler thread at a low priority places certain restrictions on how a Task can operate at the socket layer.

以低优先级运行调度程序线程会对任务在套接字层上的操作方式产生某些限制。

polar 北极

polarity /pəˈlærəti/ n. [物] 极性;两极;对立

signal polarity 信号极性

unipolar signal 单极信号(仅有零值和正值)

bipolar signal 双极信号(有正负值和零值)

populate v. 焊接

unpopulated header pads 未焊接点(盘)

unpopulated PCB 无载印制电路板

solder n. 焊料;接合物 v. 焊接;使联接在一起

To use an external speaker, wires can be soldered to the unpopulated header pads, J13 and J16.

The R2 resistor is not populated from the factory. 在工厂时,R2电阻未安装。

port n. 接口,端口

portable adj. 便携的

portfolio /pɔːtˈfəʊliəʊ/ n. 公文包;文件夹;证券投资组合;部长职务;作品集;(公司或机构提供的)系列产品,系列服务;(职业类型)短期合同制的,兼职的

broad portfolio 广泛的产品组合

potentiostat /pəu'tenʃiəstæt/ n. 恒电势器;[电] 稳压器

potentiostatic adj. 电压稳定器的;恒电势的;电势恒定器的

potentiometer /pəˌtenʃiˈɒmɪtə(r)/ n. 电位计;分压计

potentiometric /pəu,tenʃiə'metrik/ adj. 电势测定的,电位计的

control interface: switches and potentiometers 控制接口:开关和电位器

precision 精度

single-precision 单精度

double-precision 双精度

Single-precision biquad filter 单精度双四轴滤波器

The double length memory enables the core to double precision arithmetic with double length data and single length coefficients.

precision sensing applications 精密传感应用

They allow analog and digital sensing for interpreting capabilities with built-in ADCs, DACs, and temp sensors for precision sensing applications. 这些MCUs利用为紧密传感应用准备的内置模-数、数-模、温度传感器向模拟和数字传感提供解释能力。

【这逻辑,我确实接受不来】

preempt 抢占

All Clock functions run at the same SWI priority, so one Clock function cannot preempt another. 所有的时钟函数都运行在相同的SWI优先级,所以一个时钟函数不能抢占另一个时钟函数。

prefix n. 前缀 vt. 加前缀;将某事物加在前面

presume / assume 假定

So this book presumes that you have already learned something about Python programming from the many excellent tutorials and books on the subject.

On the other hand, this book does not start by assuming that you know any networking!

previous versions 以前的版本

Note that the appropriate include file location has changed from previous versions of IPC. 注意,适当的头文件位置已经从以前的IPC版本中更改。

prologue /prəʊlɒg/ n. 开场白

prolong /prəˈlɒŋ/ vt. 延长,拖延

they can then prolong the LOW period of the SCL signal to slow down the transfer. 可以延长SCL信号的低电平周期,以降低传输速度。

prior /ˈpraɪər/ adj. (时间、顺序等)先前的;优先的

priority n. 优先级

prioritize /praɪˈɒrətaɪz/ v. 按优先顺序列出,确定 (任务) 优先顺序;优先处理,优先考虑

prior to 在……之前; 居先

It is important to enrich the soil prior to planting. 栽种之前给土壤施肥很重要。

probe n. 探针;调查 vi. 调查;探测 vt. 探查;用探针探测

simulation probe 模拟探针

the proper adjustment 适当调整

The scheduler thread can run at any priority with the proper adjustment.

调度器线程经适当调整可以运行在任何优先级。

R

rate n. 速度;比率;价格;等级

rating n. 等级;等级评定;额定功率 v. 对…评价(rate的ing形式)

ratio n. 比率,比例

rational adj. 合理的;理性的 n. 有理数

speed n. 速度,速率;进度;迅速;繁荣;感光度;排挡;v. 快速运动;加速;促进;

The rate of the internal master clock must be set properly using the CC_MDIV bit in the clock control register (Address 0x0000). 内部主时钟的速率必须要在时钟控制寄存器下的CC_MDIV位上设置正确。

rated input voltage 额定输入电压

rated input current 额定输入电流

flammability rating 可燃性等级

absolute maximum ratings 最大功率

ESD ratings 静电放电等级

power supply rejection ratio 电源抑制比

SNR(Signal-to-Noise Ratio) 信噪比

rectification n. 整流

recursive nature 递归性质

Due to its recursive nature, a Task tends to consume a significant amount of stack.

由于其递归性质,任务往往会消耗大量的堆栈。

re-entrance exclusion methodology 重连拒绝方法

The NDK requires a re-entrance exclusion methodology to call into internal tack functions.

reentrant versions 可重入版本

regular adj. 有规律的

regulate vt. 调节;规定;控制;校准;有系统地管理

regulated voltage 稳定电压

regulator n. 监管机构,监管者;调整者;校准器;稳压器

Typically, on such regulators the power good signal changes state when the regulated voltage drops below ~90% of its target value.

通常只有在稳定电压低于规定目标的90%以下时,这些稳压器的良好信号才会改变状态。

on-board regulator 板载调节器

The on-board regulator generates the 3.3 V dc or 1.8 V dc supply, determined by S1, for the on-board circuitry. 板载整流器为板载电流提供了由S1决定的1.8V或3.3V电压。

LDO regulator (某种)线性稳压器?

image-20210421160130520

the remote processor 远程处理器

The response from the remote processor triggers a hardware interrupt, which then posts a Semaphore to allow to Task to resume execution. 远程处理器的响应触发硬件中断,然后硬件中断发布一个信号量以允许任务继续执行。

power-on reset 开机复位

brownout reset 断电复位

resistor n. 电阻器

resistance n. 电阻值;电阻

constant resistance 恒定电阻

insulation resistance 绝缘电阻

damping resistor 阻尼电阻

equivalent series resistance 等效串联电阻

ruggedness /ˈrʌɡɪdnəs/ n. 强度,坚固性;险峻,崎岖;粗野

high ruggedness 高坚固性

runtime support library 运行时支持库

This module provides xdc.runtime.ITimestampClient APIs for the xdc Runtime Support Library.

S

sanity /ˈsænəti/ n. 明智;头脑清楚;精神健全;通情达理

saturate /ˈsætʃəreɪt/ vt. 使浸透;使饱和;使充满; adj. 浸透的;饱和的;

saturation n. 饱和度

Clear the X1CNT counter and then wait for it to saturate four times.

schematic n. 原理图

second 秒

microsecond 微秒

millisecond 毫秒

nanosecond 纳秒

semaphore /ˈseməfɔːr/ n. 信号标,信标,旗语;臂板信号装置 v. 打旗语,发信号

sequence n. 顺序

text sequences 文本序列

ship(v.) with 与某物一起(类似于打包在一起)

The fact that you will often be using Python libraries of prepared code—whether from the built-in standard library that ships with Python.

shunt /ʃʌnt/ v. n. 并励;并联;分流

signal path 信号通路,信号路径

a significant amount of 大量的

single-address mode 单地址模式

single-word mode 单字模式

burst mode 突发模式/爆发模式

All addresses can be accessed in either single-address mode or burst mode.

sophisticated services 复杂的服务

The idea of a protocol stack, in which very simple network services are used as a foundation on which to build more sophisticated services.

specification n. 规范 (a detailed description of design criteria for a piece of work)

specifications for benchmark tests 基准测试规范

target-specific functions 目标特定的功能

device-specific functions 设备特定的功能

split /splɪt/ vt. 分离;使分离;劈开;离开;分解 vi. 离开;被劈开;断绝关系 n. 劈开;裂缝 adj. 劈开的

stage changed (确认)暂存(数据)已变化

standalone operation 独立操作

For standalone operation, the clock can be generated using the on-board crystal oscillator.

static inline 静态内联

stimuli n. 刺激;刺激物;促进因素(stimulus的复数)

simulation stimuli 模拟刺激

at a strategic point in time 在战略性的时间点上 / 在关键时间点上 / 在关键时刻

support a myriad of sth. 支持各种各样的....

Our Processors and Microcontrollers support a myriad of general-purpose and application-specific needs. 我们的处理器和微控制器能够满足各种各样的通用或特定需求。

suppress vt. 抑制;镇压;废止

suppression n. 抑制;镇压;[植] 压抑

Pop-and-Click Suppression 音频杂音(嘀嗒和爆破)抑制

pop suppression 爆破(音)抑制

T

temperature n. 温度

junction temperature (Tj)结温;接点温度;接面温度

operating junction temperature 运行时结温

free-Air temperature 大气温度;

storage temperature 存储温度

ambient temperature (TA)环境温度

terminate /ˈtɜːmɪneɪt/ vi./vt. 使终止;使结束;解雇

timing n. 时序

the timing of a burst mode write sequence 突发模式写入顺序时间(时序)

toggle /ˈtɒɡl/ n. 拴扣;切换键,开关;套索钉 v. 切换;拴牢,系紧

toggle split editor 切换分屏编辑器

toggle full screen 切换全屏幕

toggle function 切换函数

tolerable /ˈtɒlərəbl/ adj. 可以的;可容忍的

tolerable settling error 可容忍的沉降误差

torque /tɔːk/ n. 转矩,[力] 扭矩;项圈,金属领圈 v. (向轴、螺栓、圆轮等)施以扭动力;(使)沿轴转动;使(绕轴等)扭转;施加转矩

trench n. 沟渠、沟道

trim v. 修剪;切除 n. 点缀物;汽车装饰;修剪 adj. 整齐的;身材苗条的

offset trim register 偏移修整寄存器

trip n. (短程)旅行;幻觉;绊倒;错误;令人兴奋的经历;自我放纵的态度(或行动);(机器、电路的)开关;(安全装置的)脱扣;轻捷的脚步;让人开心的奇人,奇妙有趣的经历 vi. 绊倒,跌倒;轻快地走(或跑、跳舞);(非正式)(服用毒品后)产生幻觉;(部分电路)自动断开;作短途旅行 vt. 绊倒;(使)跌倒;触发(开关);起(锚);竖起(帆桁)

tristate n. 三角洲的

tristate buffer 三态缓冲器

tristate control 三态控制

truncate vt. 截断

Fractional values are truncated. 小数值已省略。/ 忽略小数部分

U

use sth. from sb./sth.

In earlier versions of gnuplot, some terminal types used the values from 'set size' to control also the size of the output canvas.

在gnuplot的早期版本中,一些终端类型使用set size中的值来控制输出画布的大小。

be used in a variety of combinations 被用于多种组合

IPC modules can be used in variety of combinations.

V

versatility /ˌvɜːsəˈtɪləti/ n. 多功能性;多才多艺;用途广泛

volatile /ˈvɒlətaɪl/ adj. [化学] 挥发性的;不稳定的;爆炸性的;反复无常的 n. 挥发物;有翅的动物

volatile unsigned int

W

welding v. 焊接;(使)紧密结合,成整体;焊接(物件);(通过熔化或软化)连接(weld 的现在分词)n. 焊接,锻接

withstand

voltage withstand 耐电压

wrapper function 包装函数

Z

zero out 清零

Zero out structure object. 清空结构体对象

近意之词

level

level 有 层级等级电平水平 之意,较难区分。

等级:relative stack priority level 相对堆栈优先(等)级

The below options allow you to set the scheduler's relative stack priority level and run mode.

下列设置允许你调整调度器的相对堆栈优先级和运行模式。

电平:full-scale level 满量程电平

logic-level 逻辑电平

Therefore, the full-scale level of a signal in the processing core will be slightly different from a full-scale level external to the IC.

独立

以下的词汇都具有 “分别的,独立的“之意

individual

respective

separated

术语

nomenclature /nəˈmeŋklətʃə(r)/ n. 命名法;术语

glossary n. 术语

terminology n. 术语,术语学;用辞

term n. 术语;学期;期限;条款;(代数式等的)项 vt. 把…叫做

时钟

clock oscillator /ˈɒsɪleɪtə(r)/ 时钟振荡器

internal oscillator 内部振荡器

external oscillator 外部振荡器

crystal oscillator 晶体振荡器

quartz crystal 石英晶振

external resonator 外部谐振器

程序

以下单词都具有程序/代码的意思

program

procedure

routine

code

utilities /juː'tɪlɪtɪz/ n. 实用程序

器件

switching regulator 开关整流器

voltage regulator 稳压器

limiter 限幅器

interpolator power 插值器功率

decimator power 切割器功率

capture 捕获器

pulse width modulator 脉冲幅频调制器

quadrature encoder 正交编码器

quadrature encoder pulse 正交编码器脉冲

sigma-delta filter module 西格玛-德尔塔滤波器模块

oscilloscope n. 示波器

co-processor 协处理器

modulator ADC 调制器

coupling capacitor 耦合电容器

discrete devices 分立器件

optoelectronic /ˌɒptəʊɪlekˈtrɒnɪks/ devices 光电子器件

线路

以下词汇均有 "线路" 之意:

line

wire

trace

cable

connect the audio cables 连接音频电缆

wider trace 更宽的线路、更宽的导线

If the headphone amplifiers are enabled, the PCB trace to this pin should be wider than traces to other pins to increase the current carrying capacity. A wider trace should also be used for the headphone output lines.

半导体

thyristor /'θaɪrɪstə/ n. 半导体闸流管

diode n. 二极管

collector n. 集电极

emitter /ɪˈmɪtə(r)/ n. 发射器,发射体,发射极

gate n. 栅极

collector-emitter voltage 集电极-发射极电压

collector-emitter breakdown voltage 集电极和发射极的击穿电压

collector-emitter saturation voltage 集电极和发射极的饱和电压

gate-emitter voltage 栅极发射极电压

gate-emitter threshold voltage 栅极和发射极的阈值电压

gate-emitter leakage current

pulsed collector current 脉冲(瞬时)集电极电流

High voltage gate driver IC 高电压栅极驱动芯片

600 V half bridge gate drive IC 600V半桥栅极驱动芯片

[TOC]

SYS/BIOS

  • The Ethernet Media Access Controller (EMAC) module provides an efficient interface between the device core processor and the networked community.

  • The EMAC controls the flow of packet data from the processor to the PHY. The MDIO module controls PHY configuration and status monitoring.

  • Both the EMAC and the MDIO modules interface to the DSP through a custom interface that allows efficient data transmission and reception.

  • This custom interface is referred to as the EMAC control module, and is considered integral to the EMAC/MDIO peripheral.

  • The EMAC control, EMAC, and MDIO modules all have control registers. These registers are memory mapped into device memory space via the device configuration bus.【EMAC控制器、EMAC、MDIO模块都有控制寄存器,寄存器地址通过设备控制总线写入设备内存空间。】

  • 【Descriptor 不存储任何缓冲数据,仅仅作为数据描述包而存在。主要结构为pNext、pBuffer、Buffer Offset、Buffer Length、Flags和Packet Length。其中,pBuffer是指向数据包Packet的指针存储块。】

Preparation

IDE Installation

SETUP

CONFIGURATIONS

Project

开发及编译环境

  1. CSS安装
  2. TI编译工具安装
  3. SYS/BIOS安装
  4. BIOS-MCSDK软件包安装
  5. BIOS-MCSDK软件包补丁安装
  6. XDC-Tools安装
  7. pdk_C6657软件包
安装流程 备注
CCS安装 CCS工程操作本体软件
TI编译工具安装 TI某型号设备编译软件,一定要确保是否安装,没有的话无法生成工程文件
SYS/BIOS安装 SYS/BIOS RTOS系统(可能安装BIOS_MCSDK时自带)
BIOS-MCSDK软件包安装 安装时会生成 ndk_2_21_01_38,需要删除,不删除会导致后面无法安装其他软件包
BIOS-MCSDK软件包补丁安装 必须安装,否则会出错
XDC-Tools安装 装CSS的时候就已经能自带XDC-Tools了,也可以单独更新版本
pdk_C6657软件包 安装BIOS_MCSDK时自带

注意:

  • 部分SDK、组件包可能会线下兼容,但是版本包带不带特殊标识,如XDCTOOLS个别版本带 _core 的,可能会导致不兼容gr platform。
  • 组件包安装完毕之后需要在 CCS 的 Products and Repositories 中进行挂载和选择。

工程生成、导入与重编

工程的生成、导入与重编主要是针对他人写的代码,未针对我的硬件生成对应的工程文件,因而需要按照我的编译环境和硬件生成对应的工程文件,进而应用到我的硬件上。

工程生成

通过执行命令行工具 pdksetupenv.batpdkProjectCreate.bat 在对应的工程文件包生成工程文件夹 project

注意事项:

命令行工具中设置了一些关于路径的变量,如果安装了更新版本的软件包则因进入命令行文件对相应的文件路径进行修改。 如下,XDC-TOOLS 可能因为版本问题而导致 XDC_INSTALL_PATH 变量出错,各变量也应一一对照安装路径的文件夹名称进行审核。

pdksetupenv.bat 文件下的变量设置:

1
2
set MCSDK_INSTALL_PATH=D:\TexasInstruments\
set XDC_INSTALL_PATH=%MCSDK_INSTALL_PATH%\xdctools_3_25_06_96

pdkProjectCreate.bat 文件下的变量设置如下:

1
2
3
4
5
6
7
8
9
10
11
@REM 需修改成实际安装路径
set CCS_INSTALL_PATH="D:\ti\ccsv7"

@REM 以下各文件版本需要根据当前最新使用的软件包版本来调整
set CGT_VERSION=8.3.8
set XDC_VERSION=3.32.2.25_core
set BIOS_VERSION=6.33.06.50
set IPC_VERSION=1.24.03.32
set EDMA_VERSION=02.11.05.02
set NDK_VERSION=2.21.02.43
set PDK_VERSION=1.1.2.6

在以上文件都设置好以后,还需要进入CCS,点击 WINDOWS -> PREFERENCES -> CODE COMPOSER STUDIO -> PRODUCTS , 在 INSTALLED PRODUCTS 面板下找到已安装的软件包,如果未找到,点击 INSTALL , 选择 /ti 路径进行软件包安装。

如未挂载软件包,可能会出现错误提示如:!ERROR: Unknown product-type ID 'com.ti.sdo.edma3'!

找到示例文件,在示例文件的 /src/ 文件夹下,按住 shift键 并 点击鼠标右键,选择 在此处打开Powershell窗口 ,输入绝对路径和文件名称并按回车运行,如下:

1
2
D:\ti\pdk_C6657_1_1_2_6\packages\ti\drv\pdksetupenv.bat
D:\ti\pdk_C6657_1_1_2_6\packages\ti\drv\pdkProjectCreate.bat

成功时结果如下示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
PDK_SHORT_NAME: I:\03.TexasInstruments_Workspace\tl-led-flash\src
*****************************************************************************
Detecting UnitTest Projects in PDK and importing them in the workspace "I:\03.TexasInstruments_Workspace\tl-led-flash\src\project"
找不到文件
*****************************************************************************
Detecting Example Projects in PDK and importing them in the workspace "I:\03.TexasInstruments_Workspace\tl-led-flash\src\project"
找不到文件
*****************************************************************************
Detecting TL Projects and importing them in the workspace "I:\03.TexasInstruments_Workspace\tl-led-flash\src\project"
Detected Example Project: tl-led-flash

--------------------------------------------------------------------------------
Creating project 'tl-led-flash'...


Done!
Copying macros.ini
已复制 1 个文件。

遇到关于 的问题

D:\ti\ccsv7\tools\compiler\ti-cgt-c6000_8.2.2\lib

XDC/STD

DETAILS

In addition to the interfaces specified below, this package also supplies a C/C++ header, std.h that facilitates the creation of portable sources. This header defines a set of "base" types that enable the creation of C-code that is portable between any two targets. C source code that relies exclusively on these types is portable to all targets and platforms. Where appropriate, the types defined below are related to the types defined in the library headers prescribed by the C99 standard (ISO/IEC 9899:1999).

Why not simply use the C99 types? Having a unique set of names provides a layer of insulation between a portable code base and a particular compiler; e.g., even if a compiler does not support the C99 types or defines them inappropriately for a particular device, it is possible to use the compiler without changing the code base. Thus, the developer is not forced to choose the lesser of two evils: waiting for a change to the compiler or forking the code base for a particular compiler device combination.

There are several situations where a small separate set of portable types can help the maintainability of a code base.

  • not all of the types described in the C99 standard are required to be defined by conformant implementations nor is it possible for all devices to implement some of the types specified (e.g., int8_t is not implemented on C54 devices); so it is difficult to identify non-portable source code.
  • not all compilers provide C99 type support; if XDC supplies the type definition and the compiler is updated to include C99 types, a compilation error will occur if the source includes the C99 headers.
  • not all compiler and device combinations are conformant; even high quality compilers may not properly define the types for each device supported by compiler.

USAGE

1
#include <xdc/std.h>

To compile sources that include xdc/std.h, two symbols must be defined before including this header:

  • xdc_target_types__

    the package qualified path of the target's standard types header; e.g., ti/targets/std.h. This value is specified in the target's stdInclude config parameter; see xdc.bld.ITarget.stdInclude

  • xdc_target_name__

    the target's module name without the package prefix; e.g., C64 rather than ti.targets.C64.

For example, to compile sources for the ti.targets.C64 target using TI's cl6x compiler, the following command line is sufficient:

1
cl6x -Dxdc_target_types__=ti/targets/std.h -Dxdc_target_name__=C64

Each of the type names below has an equivalent "long name"; i.e., a name that has an "xdc_" prefix. For example, the type Bool can also be written as "xdc_Bool". Long names exist to avoid conflicts with names defined or used by existing code bases.

In the event that one of the short type names below conflicts with another type name (that can not be changed), it is possble to disable the short names by defining the symbol xdc__nolocalnames before including xdc/std.h.

1
2
#define xdc__nolocalnames
#include <xdc/std.h>

STANDARD TYPES

This header may be included multiple times and defines the following target-dependent types:

  • Bool

    this type is large enough to hold the values 0 or 1. The constants TRUE and FALSE are of this type; see below.

  • String

    this type is defined to be a char * and exists to allow code to distinguish between pointers to buffers of raw data and '\0' terminated strings.

  • CString

    this type is defined to be a const char * and exists to allow code to distinguish between pointers to a modifiable '\0' terminated sequence of characters (i.e., a String) and one that is not modifiable (e.g., a literal string such as "hello world\n").

  • Intn, where n = 8, 16, or 32

    signed integer type that is large enough to hold n bits; the actual target type may by be larger than n. This type is equivalent to one of the C99 types int_leastn_t or int_fastn_t; see Section 7.18.

  • UIntn, where n = 8, 16, or 32

    unsigned integer type that is large enough to hold n bits; the actual target type may by be larger than n. This type is equivalent to one of the C99 types uint_leastn_t or uint_fastn_t; see ISO/IEC 9899:1999 Section 7.18.

  • Bitsn, where n = 8, 16, or 32

    unsigned integer type that is precisely n bits. Not all targets support all values of n; if the target does not support an exact size the corresponding type is not defined. This type is equivalent to the corresponding C99 type uintn_t; see ISO/IEC 9899:1999 Section 7.18.

  • Fxn

    this type is a pointer to code; it can hold a pointer to any function.

  • Ptr

    this type is a pointer to data; it can hold a pointer to any data structure.

  • IArg

    this integer type is large enough to hold a Fxn, Ptr, or Int.

  • UArg

    this unsigned integer type is large enough to hold a Fxn, Ptr, or Int.

  • LLong

    this long integer type is large enough to hold a Long and is defined as a 'long long' type on targets that support this type; otherwise, it is simply a Long. Note that C99 requires the long long type to be at least 64-bits wide (See ISO/IEC 9899:1999 Section 5.2.4.2.1). But some compilers do not support 64-bit integral types and some don't support the long long even though they do support 64-bit integral types. Since these variations limit the portability of valid C sources, the LLong type is always defined, is always at least as wide as the Long type, and is at least 64-bits wide for targets that support 64-bit integral types.

  • ULLong

    this unsigned long integer type is large enough to hold a ULong and is defined as a 'unsigned long long' type on targets that support this type; otherwise, it is simply a ULong.

The xdc/std.h header also defines the following aliases for the base C types. These aliases exist so that C sources can consistently follow a naming convention in which all type names are written in camel-case.

  • Char and UChar

    aliases for char and unsigned char, respectively

  • Short and UShort

    aliases for short and unsigned short, respectively

  • Int and UInt

    aliases for int and unsigned int, respectively

  • Long and ULong

    aliases for long and unsigned long, respectively

  • Double and LDouble

    aliases for double and long double, respectively

  • SizeT

    alias for size_t

  • VaList

    alias for va_list

The types above are defined for all targets. Some targets can support the following additional types. Since these types are not always supported by a target, these types should only be used when no other type sufficies.

  • Bitsn, where n = 8, 16, or 32

    this unsigned integer type is precisely n-bits wide. This type is equivalent to the optional C99 type uintn_t; see ISO/IEC 9899:1999 Section 7.18.1.1. This type is defined if and only if the preprocessor macro xdc__BITSn__ is defined.

64 BIT TYPES

Although the C99 standard requires support for 64-bit types, not all compiler/device combinations can usefully support them. As a result, the 64-bit types described here may not be defined for all targets. For each type there is a corresponding pre-processor macro which is defined if and only if the type is supported.

  • Int64

    signed integer type that is large enough to hold 64 bits; the actual target type may by be wider than 64 bits. This type is equivalent to one of the C99 types int_least64_t or int_fast64_t; see Section 7.18. This type is defined if and only if the preprocessor macro xdc__INT64__ is defined.

  • UInt64

    unsigned integer type that is large enough to hold n bits; the actual target type may by be wider than 64 bits. This type is equivalent to one of the C99 types uint_least64_t or uint_fast64_t; see ISO/IEC 9899:1999 Section 7.18. This type is defined if and only if the preprocessor macro xdc__INT64__ is defined.

  • Bits64

    unsigned integer type that is precisely 64 bits wide. If the target does not support an exact 64-bit size, this type is not defined. This type is equivalent to the corresponding C99 type uint64_t; see ISO/IEC 9899:1999 Section 7.18. This type is defined if and only if the preprocessor macro xdc__BITS64__ is defined.

The table below is from Log_print6() in the XDC/RUNTIME/LOG.H.

However, because the declared type of the arguments is IArg, all pointer arguments must be cast to an IArg type.IArg is an integral type large enough to hold any pointer or an int. So, casting a pointer to an IArg does not cause any loss of information and C's normal integer conversions make the cast unnecessary for integral arguments.

The format string can use the following conversion characters. However, it is important to recall that all arguments referenced by these conversion characters have been converted to an IArg prior to conversion; so, the use of "length modifiers" should be avoided.

Conversion Character Description
%c Character
%d Signed integer
%u Unsigned integer
%x Unsigned hexadecimal integer
%o Unsigned octal integer
%s Character string
%p Pointer
%f Single precision floating point (float)

usertype.h 中的定义:

1
2
3
4
5
6
typedef char           INT8;
typedef short INT16;
typedef int INT32;
typedef unsigned char UINT8;
typedef unsigned short UINT16;
typedef unsigned int UINT32;

SYS/BIOS RTOS

我们依赖操作系统来提供底层和中间件的服务,如让设备启动,处理基本IO口,允许多个程序并行运行,为多个正在运行的程序分配内存和磁盘空间,以及通过USB和以太网口等通讯堆栈来实现更多复杂的IO口通讯。

RTOS的优点

  • 模块化设计,线程的使用使各任务得到最大化独立;
  • 提供模块及接口以方便地驱动外设;
  • 代码可移植性/脱离于内核处理器;

线程

  • 线程是一组存储在存储器的代码,一旦寄存器被正确初始化,CPU就会执行这些代码。
  • 定义和管理任何需要被操作的内容
    • 包括程序指针、堆栈和寄存器等值
    • 这些被统称“上下文”【每个线程都会被定义上下文,包括程序计数器堆栈关键寄存器的信息】
    • 会有一系列的线程需要在指定时间被执行,RTOS会按一定标准在指定时间选择线程执行。
  • 线程可以使任何类型的,SYS/BIOS定义了四种线程类型(优先级降序排列):
    • 硬件中断
    • 软件中断
    • 任务
    • 空闲
  • 各线程有 隐式的(implicity) 和 显示的(explicity)(可能有)优先级
    • 隐式的优先级由线程类型决定
    • 显式的优先级由软件编程者决定
  • 允许抢占(或者上下文切换)
    • 基于优先级的调度管理机制保证了最高优先级的线程能够在第一时间被执行
  • 线程之间的交互
    • 阻断
    • 通信
    • 同步

TIMER and CLOCK

  • 定时器模块 TIMER

  • 管理定时器外设

  • 提供虚拟的目标/设备概念

    • 【通过操作定时器模块而不是硬件外设,开发人员能够更轻松更直观地管理定时器,且在多个不同TI芯片中移植式,代码更具可移植性】
    • 【对于SYS/BIOS而言,可以产生无限数量的定时器】
  • 时钟模块 CLOCK

    • 管理BIOS的“心脏节拍“
    • 在指定时间触发功能(单次或周期性)
    • 使用定时器模块或者应用层模块的“节拍”来处理输入事件
    • 【时钟模块所在的层位于定时器之上】
    • 【时钟模块可以通过定时器模块将系统中的外部事件引入作为输入事件,或者使用定时器模块产生的周期性节拍,基于这些输入事件,时钟模块可以产生软件中断,或者时钟模块还能提供一种服务,以便一次性或者周期性地触发任意数量的不同函数】
    • 【时钟实例中包含了对两个时间段的定义,第一个时间段的定义称为超时时间量,它定义了时钟实例的启动和首次触发相关函数的时间量,通常会在应用程序中,通过显示的调用时钟来启动一个时钟实例,如果创建时钟实例时,标志为TRUE,则实例会在创建后立即启动;第二个时间段的定义标志了相关函数首次调用和后续调用之间持续时间量;对于一次性的时钟实例,只需定义超时时间量,持续时间量将为0;相关函数都是由时钟实例的中断来调用的,这意味着必须在同一线程中启动或停止时钟,而不能在其他线程中任意启动或停止时钟】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 启动/停止时钟实例,仅能通过时钟SWI调用
Clock_start()
Clock_stop()

// 启动/停止定时器底层产生时间节拍
// 【`时钟停止启动` 和 `时钟节拍停止`,用来为驱动时钟模块提供底层定时器】
Clock_tickStart()
Clock_tickStop()

// 修改停止的时钟实例
// 【设置 `时钟周期`、`超时`、`功能` 函数,用于修改时钟实例的参数】
Clock_setPeriod()
Clock_setTimeout()
Clock_setfunc()

// 允许修改时钟实例的参数,基于新的定时器频率
// 当CPU的频率发生变化时,可以通过此函数对时钟进行重新配置
Clock_tickReconfig()
  • 时间戳模块
    • 为代码的基准测试提供便捷的时间戳服务
    • 允许时间戳记录RTA日志
1
2
3
4
5
6
7
8
9
10
11
12
/*前两个变量的类型由时钟模块定义*/
Clock_Params clockParams; //用于容纳所有的时钟实例参数
Task_Handle myClock; //用于存储将要创建的时钟实例的句柄
Error_block eb; //错误块变量,若创建失败可以获取失败原因的信息

Clock_Params_init(&clockParams); //时钟实例初始化参数,已默认值填充参数结构
/*下两句分别更新与默认值不同的参数*/
clockParams.period = 4; //Every 4 Clock ticks
ClockParams.startFlag = TRUE; //Start immediately
Error_init(&eb); //错误块变量,若创建失败可以获取失败原因的信息

myClock = Clock_create((Clock_FuncPtr)clockHandler,4,&clockParams,&eb); //三参数,时钟实例创建,并返回句柄给myClock

在XGCONF中配置时钟参数:

NAME VALUE
tickSource tickSource_TIMER :选择定时器(周期性调用Clock_tick); tickSource_User:选择外部中断触发调用Clock_tick;tickSource_NULL:没有时钟API,没有超时【由信号量写入的调用不能具有超时值】
timerId 【用于指定芯片实际使用的定时器外设】-1:默认定时器
swiPiority 【时钟模块是由底层定时器模块触发软件中断来调用的,因此其SWI的优先级可以设置】默认值 15
tickPeriod 【系统节拍的周期】默认值 1000 usec

时钟实例化参数:

NAME VALUE
clockFxn [Creat Args]【需要被调用的实例函数在clockfxn字段中】
timeout [Creat Args]【从时钟开始运行到相关函数被首次调用的初始时间值】
startFlag [Params]【将指定时钟是在BIOS的调度程序开始运行时立即启动,还是由应用程序调用时钟的启动API】true:立即启动;false:调用;Clock_start() :后启动
period [Params]【在首次调用函数后,需要确定后续函数调用的间隔】0:单次调用;
arg [Params] argument to clockFxn【用户可以将静态变量传递给相关函数,这样做可以将多个时钟实例共同使用单一函数,由于每个实例都可以向被调用的函数传递一个不同的值,因此在实现函数时可以根据调用到的时钟采取不同的操作】

HWI and Idle

嵌入式硬件中断的原理:前台/后台调度(主要由低优先级任务、无线循环任务和ISR构成,复杂性较低,存在不足)

  • 应用程序循环处理由硬件中断服务程序职位的标志位
  • ISR抢断主循环,执行中断服务【ISR 被称为前台进程】

SYS/BIOS在BIOS之上实行 Idle loop + Hwi + main() 的方式:

  • 空闲循环是优先级最低的无限循环(并不代表优先级不重要),所执行的是一系列静态配置的后台程序
  • 典型应用:用户界面,内置的系统测试,测量,以及低功耗模式
  • 被最高优先级线程抢断/从被抢断的地方恢复运行
  • ISR以HWI线程的方式运行,任意HWI都能抢断空闲循环

后台空闲循环(线程)

The background Idle Loop is the thread with the lowest priority of all. It runs in a loop when the CPU is not busy running another thread.

  • When tasks are enabled, the Idle Loop is implemented as the only task running at priority 0.

  • When tasks are disabled, the Idle Loop is fallen into after the application's "main()" function is called.(空闲循环会在应用程序main()函数被调用后陷入?)

HWI的中断及恢复流程(中断调度流程):

  1. 屏蔽任务调度【HWI是被视为隐式的较高优先级线程,因此不希望所有目前最高优先级的线程抢断HWI线程,如果应用程序没有启用任务模块,该段启动任务调度的程序将被优化出中断调度程序,以便确保中断调度程序能够高效执行】
  2. 转向ISR堆栈(如果没有指向该堆栈)【如果当前指针指向任务堆栈,则此时会切换到中断堆栈】
  3. 保存中断返回地址【中断调度程序将存储该指针,以防用户使用IRP的API来检索该返回地址,如果不需要使用该API则被优化】
  4. 屏蔽SWI调度【如任务模块一样未被开启,则自动优化出中断调度程序】
  5. 调用HWI挂钩启动函数【附加挂钩函数】
  6. 如果允许自动嵌套:允许全局中断【有更高优先级的硬件中断来临时,打开中断屏蔽,使能全局中断】
  7. 调用ISR服务程序【真正的硬件中断程序开始执行】
  8. 屏蔽全局中断
  9. 调用HWI挂钩结束函数
  10. 运行SWI调度
  11. 切换回任务堆栈
  12. 运行任务调度

SYS/BIOS中断管理的优势:

  1. 降低代码量
  2. 提供中断堆栈,降低任务堆栈大小
  3. 管理中断嵌套
  4. 在ISR任务中禁止调度中断
  5. 运行由ISR程序递交的SWI程序
  6. 管理任务抢断
  7. 提供监测
  8. 灵活性:仍然允许不执行中断调度

注意: HWI不需要使用编译器认可的中断关键字!SYS/BIOS的中断调度会自动保存堆栈相关数据,如果使用会导致灾难性的运行故障发生!

1
2
3
4
5
6
7
Hwi_Params hwiParams;              //硬件中断参数结构体实例
Hwi_Handle hwi0; //硬件中断句柄
Error_block eb;

Hwi_Params_init(&hwiParams); //参数初始化
hwiParams.arg = 5; //更新参数
hwi0 = Hwi_create(id,hwiFunc,&hwiParams,&eb); //四参数,前两个未知

SWI

  • 一般伴随着硬件中断的发生而发生,以便最灵活地处理中断事务

  • 优先级共16级:0-15

  • 寄存器的保护/恢复由SYS/BIOS系统自动处理

  • 单堆栈模式:增加优先级将增加堆栈的开销

  • 【与任务的处理方式不同,SWI在单个堆栈上运行,同时兼具优点与局限性,能使SWI以非常低的内存消耗来运行,但也不允许他们被挂起(即SWI必须运行到结束)】

  • 【SWI通常由HWI调用,系统产生了一个外设的中断,从而触发了HWI线程,而HWI处理的都是需要紧急实时响应的事务,HWI线程需要尽可能快速处理完毕,并且处理HWI时会屏蔽其他中断,因此为了让HWI处理尽可能少的操作,一些不太需要紧急实时处理的任务会放到SWI中处理。】

  • 【因此当HWI将中断发布到SWI时,SWI会立即处理】

  • 【HWI通常是突发而紧急的,SWI通常较为灵活、常态而平稳】

  • 【HWI通常以微秒计时,SWI通常以毫秒计时】

  • 【HWI和SWI都只会运行一次,不管该线程在运行前被发布了多少次】

  • 【具有相同优先级的两个SWI线程不会抢占对方,会以FIFO的方式先后运行两个线程,即使第二个线程已经被发布,但直到第一个线程运行完毕,第二个线程都在持续等待】

  • 【如果使用ISR来发布更高优先级的SWI,或者说在使用ISR时发布SWI,则可能使得SWI立即抢占ISR的线程,造成数据丢失,BIOS更推荐使用HWI来发布SWI】

  • 【同一个SWI线程不论在运行前被发布了多少次,都只会运行一次】

API Allows you to :
Swi_inc() 知道SWI在运行前被发布了多少次——N:自加计数
Swi_dec() 需要发布N次SWI,才能运行SWI——N:自减计数
Swi_or() 在发布发出一个有用的信号——签名
Swi_andn() 只有在所需要的发布都已经发布后才会发布
Bitmask Counter Not Used
无条件发布 Swi_or() Swi_inc() Swi_post()
仅在触发值为0时发布 Swi_andn() Swi_dec()
  • If trigger value is needed by the Swi, use Swi_getTrigger() which returns the value of the trigger when the Swi function starts running.
  • After each posting, the trigger is reset to the initial condition specified in the Swi object.
1
2
3
4
5
6
7
8
9
10
Swi_Params swiParams;
Swi_Handle mySwi;
Error_Block eb; //创建错误块结构体实例

Swi_Params_init(&swiParams);
swiParams.priority = 15;

Error_init(&eb); //初始化错误块结构体

mySwi = Swi_create(swiFunc, &swiParams, &eb); //三参数

Task

SYS/BIOS-TASK

任务创建函数原型Task_create(Task_FuncPtr, Const*, Error_Block*)

注意:要与 TaskCreate(void*(), char*, int, uint, UINT32, UINT32, UINT32); 做区分。

1
2
3
Task_create(Task_FuncPtr fxn,
const Task_Params *params,
Error_Block *eb);

示例

1
2
3
4
5
6
7
Task_Params taskParams;

// Create task with priority 15
Task_Params_init(&taskParams);
taskParams.stackSize = 512;
taskParams.priority = 15;
Task_create((Task_FuncPtr)myFxn, &taskParams, &eb);

任务特性

  • 任务调度使用更先进的调度技术
    • 每个任务在创建时都会设立独立堆栈,任务访问共享资源时可能会因为等待而被挂起
    • 任务会被其他更高优先级的线程打断(SWI、HWI),HWI 及 SWI不可挂起(SWI是需要退出和返回);
  • 任务的数量、状态及优先级都可以在程序执行时动态改变
  • 【两个任务可以调用同一函数(主要该函数是可以重入?的函数),即该函数在执行完毕之前可被安全地二次调用,任务在调用函数时可携带参数,使函数知晓是被哪个实例调用】

任务间时间切片。

任务在正常情况下是个看似 “无限循环” 的进程,只有在整个系统停止后才会结束;但在未被挂起的情况下,任务在被CPU分时间调度的过程中,任务会重新从头开始运行,即不会停留在上一次的位置。任务看似一次被执行就一直被无限调度,实际上是在时间分片中快速切换。

任务与Semaphore。

在使用Semaphore作为同步方式的任务调度中,如果一个任务等级较高,且 Semaphore_pend() 时,设置了第二个参数为 BIOS_NO_WAIT ,即该任务会被立即循环执行。如果参数设置为 BIOS_WAIT_FOREVER ,则该程序将会一直等待,直到它的信号量被post出来。

原文:A timeout value of BIOS_WAIT_FOREVER causes the task to wait indefinitely for its semaphore to be posted. A timeout value of BIOS_NO_WAIT causes Semaphore_pend to return immediately.

注意:互相形成依赖的任务(如嵌套)不要用同一个信号量,会发生冲突、堆栈溢出或死锁等现象。尽量一个任务关联一个信号量。

注意:如果有堆栈溢出,应优先检查task和semaphore的初始化情况。

Functions explaination
Task_construct (Task_Struct *structP, Task_FuncPtr fxn, const Task_Params *params, Error_Block *eb); // Initialize a new instance object inside the provided structure
在提供的结构中创建一个新的实体对象
Task_create(Task_FuncPtr fxn, const Task_Params *params, Error_Block *eb); // Allocate and initialize a new instance object and return its handle
开辟内存并初始化一个新的实体对象并返回其句柄
Task_delete(Task_Handle *handleP); // Finalize and free this previously allocated instance object, setting the referenced handle to NULL
终结一个已存在的实体对象,并释放内存,设置其句柄为空
Task_destruct(Task_Struct *structP); // Finalize the instance object inside the provided structure
在提供的结构中创建一个新的实体对象
Task_disable(); // Disable the task scheduler
使任务(列表)功能关闭
Task_exit(); // 5Terminate execution of the current task
终结现在正在运行的任务
Task_getEnv(Task_Handle handle); // Get task environment pointer
获取任务环境指针
Task_getIdleTask(); // returns a handle to idle task object
返回一个句柄给空闲任务对象
Task_getMode(Task_Handle handle); // Retrieve the Mode of a task
获取任务的句柄
Task_getPri(Task_Handle handle); // Get task priority
获取任务的优先级
Task_Params_init(Task_Params *params); // Initialize this config-params structure with supplier-specified defaults before instance creation
在实例创建前使用指定默认值初始化配置参数结构
Task_restore(UInt key); // Restore Task scheduling state储存任务调度状态
Task_self(); // Returns a handle to the currently executing Task object
返回一个句柄给当前执行中的任务对象
Task_selfMacro(); // Returns a handle to the currently executing Task object
返回一个句柄给当前执行中的任务对象
Task_setEnv(Task_Handle handle, Ptr env); // Set task environment
设置任务环境
Task_setHookContext(Task_Handle handle, Int id, Ptr hookContext); // Set hook instance's context for a task
为任务设置hook实例的
Task_setPri(Task_Handle handle, Int newpri); // Set a task's priority
设置任务优先级
Task_sleep(UInt nticks); // Delay execution of the current task
延迟当前任务的执行时间
Task_stat(Task_Handle handle, Task_Stat *statbuf); // Retrieve the status of a task
获取任务状态
Task_yield(); // Yield processor to equal priority task
在两个相同等级的任务间切换处理器使用权
同等级任务切换函数
任务测试
priority task_yield() ISR Post Sem 任务内任务 是否执行
更高 存在 存在
相同 存在 存在

Table 3-1. Comparison of Thread Characteristics

Characteristic Hwi Swi Task Idle
Priority Highest 2nd Highest 2nd lowest Lowest
Number of priority levels family/device-specific Up to 32; Periodic functions run at the priority of the Clock Swi. Up to 32; This includes 1 for the Idle Loop. 1
Can yield and pend No, runs to completion except for preemption No, runs to completion except for preemption Yes Should not pend. Pending would disable all registered Idle threads.
Execution states Inactive, ready, running Inactive, ready, running Ready, running, blocked, terminated Ready, running
Thread scheduler disabled by Hwi_disable() Swi_disable() Task_disable() Program exit
Posted or made ready to run by Interrupt occurs Swi_post() , Swi_andn() , Swi_dec() , Swi_inc() , Swi_or() Task_create() and various task synchronization mechanisms (Event, Semaphore, Mailbox) main() exits and no other thread is currently running
Stack used System stack (1 per program) System stack (1 per program) Task stack (1 per program) Task stack used by default
Context saved when preempts other thread
Context saved when blocked
share data with thread via
Synchronize with thread via
Function hooks
Static creation
Dynamic creation
Dynamically change priority
Implicit logging
Implicit statistics

OSIF-TASK

<osif.h> 文件提供系统级接口函数,与SYS/BIOS提供的相似任务函数具有不一样的函数定义。所有任务相关函数如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
// 以下功能可能需要被链接或移植
_extern void TaskBlock(HANDLE h);
_extern HANDLE TaskCreate( void(*pFun)(), char *Name, int Priority, uint StackSize,
UINT32 Arg1, UINT32 Arg2, UINT32 Arg3 );
_extern void TaskDestroy( HANDLE h );
_extern void TaskExit();
_extern HANDLE TaskGetEnv( HANDLE h, int Slot );
_extern int TaskGetPri(HANDLE h);
_extern HANDLE TaskSelf();
_extern void TaskSetEnv( HANDLE h, int Slot, HANDLE hEnv );
_extern int TaskSetPri(HANDLE h, int priority);
_extern void TaskSleep(UINT32 delay);
_extern void TaskYield();

任务创建函数 TaskCreate(void*(), char*, int, uint, UINT32, UINT32, UINT32);

1
2
_extern HANDLE TaskCreate( void(*pFun)(), char *Name, int Priority, uint StackSize,
UINT32 Arg1, UINT32 Arg2, UINT32 Arg3 );

TaskCreate(); 的使用方式如下:

1
( void ) TaskCreate ( TCP_Perform_Server , "TCPBenchmarkRX" , OS_TASKPRIHIGH , 0x1400 , 0 , 0 , 0 );

关于任务优先级Priority的定义存在同一头文件中,具体如下:

1
2
3
4
5
6
7
8
9
10
// Equates used in code
#define DBG_PRINT_LEVEL (_oscfg.DbgPrintLevel)
#define DBG_ABORT_LEVEL (_oscfg.DbgAbortLevel)
#define OS_TASKPRILOW (_oscfg.TaskPriLow)
#define OS_TASKPRINORM (_oscfg.TaskPriNorm)
#define OS_TASKPRIHIGH (_oscfg.TaskPriHigh)
#define OS_TASKPRIKERN (_oscfg.TaskPriKern)
#define OS_TASKSTKLOW (_oscfg.TaskStkLow)
#define OS_TASKSTKNORM (_oscfg.TaskStkNorm)
#define OS_TASKSTKHIGH (_oscfg.TaskStkHigh)

以下出自 <spru523h.pdf> Chapter 3.3 Creating a Task

The process of creating a sockets application begins with the creation of a SYS/BIOS Task thread. You can use XGCONF to statically configure Tasks or use the standard SYS/BIOS API or the provided Task abstraction to dynamically create Tasks. For example, the following C code creates a basic Task:

1
2
3
4
5
6
7
8
9
10
11
12
Task_Params taskParams;
Task_Handle hMyTask;
Error_Block eb;
Error_init(&eb);

Task_Params_init(&taskParams);
taskParams.stackSize = 4096;
taskParams.priority = 5; /* Create a Task with priority 5 */
hMyTask = Task_create((Task_FuncPtr)entrypoint, &taskParams, &eb);
if (hMyTask == NULL) {
System_abort("Task create failed");
}

The same Task can be created via the TaskCreate() function in the Task abstraction API. The abstracted function is a little more restrictive. It creates a Task thread with exactly 3 parameters (they do not all have to be used). For example, the following call would create a Task similar to that shown above:

hMyTask = TaskCreate( entrypoint, "TaskName", OS_TASKPRINORM, stacksize, arg1, arg2, arg3 );

In both cases, hMyTask is a handle to a SYS/BIOS Task thread.

Synchronization

SYS/BIOS内的同步类型分为 进程同步核同步 ;同步方式共5种:Semaphore(信号量) / Event(事件) / Gate(门) / Mailbox(邮箱) / Queue(队列)

Semaphore

信号量可分为 互斥型计数型 两种。

互斥型信号量

也称为为互斥量、二进制型信号量。可以理解为只能维护资源数量为1的二值计数信号量(值为0或1),但是互斥信号量又不同于计数信号量,因为它还具有 优先级继承 的机制。

优先级继承机制是RTOS中为了避免出现 优先级翻转 问题而做的处理方式。简单来说就是如果低优先级持有互斥信号量那么高优先级任务想访问互斥量就会失败而挂起等待互斥量被释放,此时反而是低优先级任务在运行,这就出现了优先级翻转。为了避免该情况RTOS处理方式是把正在持有互斥量运行的低优先级任务的优先级提高到与等待访问互斥资源的高优先级任务同等优先级,这就是优先级继承。等互斥量被释放后RTOS会将该任务恢复到之前的低优先级。

特性:

  • 信号量是指系统当前可用资源的数值,当资源超过1时,为 计数型信号量 ;当资源仅为1和0时,为 二进制型信号量;因为资源总为1及以上,因此不论是计数型还是二进制型,可用的信号量始终≥0。

  • 信号量用于标识和实现任务的 挂起发布

    • 发布 指任务正在处于结束状态,Semaphore_post() 将使信号量递增
    • 挂起 指任务正在处于运行状态,Semaphore_pend() 将使信号量递减
    • 使用 Semaphore_pend() 以使用资源,使用 Semaphore_post() 以离开资源
  • 计数型信号量用来进行多任务管理

    • 多任务信号量的初始值将为可同时进行任务的最大值
    • 当达到最大可运行任务量时,信号量值为0,即信号阻塞
  • 当信号量为0时,即系统资源被占满,如果此时出现最高优先级任务,系统将抢断低优先级任务从而使高优先级任务进行工作

任务与调用任务

在调用任务时,不需要特意调高被调用任务的等级。

在被调用任务的等级等于本任务时,使用Semaphore_post(); 并使用 task_yeild(); ,即可顺利将任务切换到被调用任务。(如下 SEM-1 示)

在被调用任务的等级低于本任务时,使用 Semaphore_post(); 并使用 task_sleep(); ,即可让低等级任务在本任务休眠期间执行。(如下 SEM-2 示)

SEM-1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
void task_core0TCPService(UArg a0, UArg a1) {                                      //Core0执行TCP信息接收任务
short rx_length = 1;

while(1){
Semaphore_pend( sem0_TcpReceive, BIOS_WAIT_FOREVER );
TcpReceive(ReceiveBuffer, RECEIVEBUFFER_SIZE);

//...
if(rx_length > 0){
if(ReceiveBufferTemp[0]==0xf5){
switch(ReceiveBufferTemp[2]){
case 0x01:
if(ReceiveBufferTemp[3] == 0x01){
Semaphore_post(sem0_ad); //post同等级任务的信号量
Task_yield(); //调用任务切换函数
}
//...
default:
//...
break;
}
}
}
//...
}
}

void task_core0AdcRead(UArg a0, UArg a1)
{
int i = 0;
while(1){
Semaphore_pend(sem0_ad,BIOS_WAIT_FOREVER);
while(ADC_Cnt <= ADC_MICROSECOND){
//...
}
}
}

Int main()
{
Task_Handle task; //创建空任务句柄
Task_Params param; //创建空任务参数
Error_Block eb; //创建空错误块
Error_init(&eb); //初始化错误块参数
Task_Params_init(&param); //初始化任务参数
uart_init(); //串口初始化
uart_set_baudrate(115200); //设置波特率

if(CSL_chipReadDNUM() == 0)
{
SemInit_Core0(); //配置semaphore,sem0_ad,sem0_da
FanLed_Init(); //点亮LED3,开启FAN
Sgmii_Init(); //外设初始化
ADS8568_Init(); //INT6
DAC8565_Init(); //INT7
Timer3_Init(); //INT4

task = Task_create(task_core0Init, &param, &eb);
TaskSuccess(&task,"任务创建失败:task_core0Init\n");

param.priority=10;
task = Task_create(task_core0TCPService, &param, &eb);
TaskSuccess(&task,"任务创建失败:task_core0TCPListenAndReceive!\n");

param.priority = 10;
task = Task_create(task_core0AdcRead, &param, &eb); //读取AD任务
TaskSuccess(&task,"任务创建失败:task_core0AdcRead\n");
}
BIOS_start();
return(0);
}


SEM-2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Void lowPriTask(UArg arg0, UArg arg1)
{
for(;;){
Semaphore_pend(mySem, BIOS_WAIT_FOREVER); //挂起任务
resource += 1; //do work on locked resource
Semaphore_post(mySem);
}
}

Void hiPriTask(UArg arg0, UArg arg1)
{
for(;;){
Semaphore_pend(mySem, BIOS_WAIT_FOREVER);
resource += 1; //do work on locked resource
Semaphore_post(mySem);
Task_sleep(5); //allow low pri taks to work
}
}

任务与信号量之间的关系?

  • 任务的顺利执行,需要经过 任务新建信号量新建信号量阻塞信号量发布 四个流程。任务不是在被发布后就立即执行的,他需要等待信号量的到来。

  • 先pend后post,即任务执行必须由对应的信号量进行排队(阻塞)和准备(发布),如果其中任何一个步骤缺省都无法执行任务。

  • pend要在该任务被执行时使用,放置在任务最开始的一句话中;post可以放置在别的任务或 IRS 中断里,由别的任务或函数来启动本任务。

  • 信号量使用须统一为计数型或二进制型?

Event

NDK

EMAC

EMAC驱动程序提供了一个定义良好的API层,允许应用程序使用EMAC外设来控制从处理器到PHY的数据包数据流,并使用MDIO模块来控制PHY配置和状态监控。

EMAC驱动程序的设计要求如下:

  • 每个核支持多个EMAC端口(如果设备上可用)。
  • 每个核支持多个通道/MAC地址。
  • 支持多个内核在同一个EMAC端口上使用不同的通道。
  • 驱动程序是独立于操作系统的,通过OSAL操作系统层暴露所有的操作系统callout。
  • EMAC示例测试应用程序提供了标准配置,并演示了可度量的基准测试。

EMAC驱动程序的架构图如下:

img

1.EMAC设备驱动程序

设备驱动程序公开了一组定义良好的API,应用层使用它通过EMAC外围设备发送和接收数据包,并通过MDIO外围设备配置和监视PHY。驱动程序还公开了一组定义良好的操作系统抽象API,用于确保驱动程序是操作系统独立的和可移植的。EMAC驱动程序对所有EMAC MMR访问使用CSL EMAC功能层。

2.应用程序代码

这是EMAC驱动程序的用户,它与驱动程序的接口是通过定义良好的API集实现的。应用程序用户使用EMAC驱动程序API通过EMAC外围设备发送和接收数据包。

3.操作系统抽象层

EMAC LLD是独立于操作系统的,并通过这个层公开所有的操作系统调出。

4.CSL功能层

EMAC驱动程序使用CSL EMAC功能层通过访问MMR来对设备IP进行编程。

5.注册层

寄存器层是由IP所有者生成的IP块内存映射寄存器。EMAC驱动程序不直接访问MMR寄存器,而是使用EMAC CSL功能层实现这个目的。

SOCKET

在C++/MFC中有Window Socket,作为TCP/UDP数据传输的接口工具。

在C#/WPF中也有Socket,作用同上。

在C++/TI.SYSBIOS的NDK套件中也有Socket作为沟通套接的工具。

TI.SYSBIOS的NDK套件中,常用的函数如下:

NDK_accept()

Accept a connection on a socket

SOCKET NDK_accept(SOCKET s, struct sockaddr *pName, int *plen);

NDK_bind()

Bind a name to a socket

int NDK_bind(SOCKET s, struct sockaddr *pName, int len);

NDK_connect()

Initiate a connection on a socket

int NDK_connect(SOCKET s, struct sockaddr *pName, int len);

NDK_getpeername()

Return name (address) of connected peer

int NDK_getpeername(SOCKET s, struct sockaddr *pName, int *plen);

NDK_getsockname()

Return the local name (address) of the socket

int NDK_getsockname(SOCKET s, struct sockaddr *pName, int *plen);

NDK_getsockopt()

Get the value of a socket option

int NDK_getsockopt(SOCKET s, int level, int op, void *pbuf, int *pbufsize);

NDK_listen()

Listen for connection requests on a socket

int NDK_listen(SOCKET s, int maxcon);

NDK_recv()

Receive data from a socket

int NDK_recv(SOCKET s, void *pbuf, int size, int flags);

NDK_recvfrom()

Receive data from a socket with the senders name (address)

int NDK_recvfrom(SOCKET s, void *pbuf, int size, int flags, struct sockaddr *pName, int *plen);

NDK_send()

Send data to a connected socket

int NDK_send(SOCKET s, void *pbuf, int size, int flags);

NDK_sendto()

Send data to a specified destination on an unconnected socket

int NDK_sendto(SOCKET s, void *pbuf, int size, int flags, struct sockaddr *pName, int len);

NDK_setsockopt()

Set the value of a socket option

int NDK_setsockopt(SOCKET s, int level, int op, void *pbuf, int bufsize);

NDK_shutdown()

Close one half of a socket connection

int NDK_shutdown(SOCKET s, int how)

NDK_socket()

Create a socket

SOCKET NDK_socket(int domain, int type, int protocol);

NDK_socketpair()

Create socket pair. Redundant; see Section 3.5, Full Duplex Pipes Programming Interface.

The domain parameter specifies a communications domain within which communication will take place; 域参数指定通信将在其中发生的通信域;

Terminology

EMAC

Ethernet Media Access Controller

MDIO

Management Data Input/Output

PHY

Physical Layer

Purpose of the Peripheral

The EMAC module is used on the device to move data between the device and another host connected to the same network, in compliance with the Ethernet protocol.

PLL

Phase-Locked Loop 锁相环

锁相环路 是一种反馈控制电路,简称锁相环。

锁相环 的特点是:利用外部输入的参考信号控制环路内部振荡信号的频率和相位。因锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路。

锁相环在工作的过程中,当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相位差值,即输出电压与输入电压的相位被锁住,这就是锁相环名称的由来。

锁相环通常由鉴相器(PD,Phase Detector)、环路滤波器(LF,Loop Filter)和 压控振荡器(VCO,Voltage Controlled Oscillator)三部分组成。

MII

以太网媒体接口有:MII、RMII、SMII、GMII

Media Independent Interface

称为 介质无关接口媒体独立接口,它是 IEEE-802.3 定义的以太网行业标准。

  • 它包括一个 数据接口 和一个 MACPHY 之间的管理接口。数据接口 包括分别用于 发送器接收器 的两条独立信道,每条信道都有自己的 数据、时钟 和 控制信号 。MII数据接口总共需要16个信号。
  • 管理接口是个双信号接口:一个是时钟信号,另一个是数据信号。通过管理接口,上层能监视和控制PHY。
  • MII标准接口用于连接 Fast Ethernet MAC-blockPHY。表明在不对MAC硬件重新设计或替换的情况下,任何类型的PHY设备都可以正常工作。
  • 在其他速率下工作的与MII等效的接口有:AUI(10M 以太网)、GMII(Gigabyte 以太网)和XAUI(10-Gigabit 以太网)。
  • MII支持10兆和100兆的操作,一个接口由14根线组成,它的支持还是比较灵活的,但是有一个缺点是因为它一个端口用的信号线太多,如果一个8端口的交换机要用到112根线,16端口就要用到224根线,到32端口的话就要用到448根线,一般按照这个接口做交换机,是不太现实的,所以现代的交换机的制作都会用到由MII简化而来的标准,如 RMIISMIIGMII 等。
    • RMII(Reduced MII)是简化的MII接口,在数据的收发上它比MII接口少了一倍的信号线,所以它一般要求是50兆的总线时钟。RMII一般用在多端口的交换机,它不是每个端口安排收、发两个时钟,而是所有的数据端口公用一个时钟用于所有端口的收发,这里就节省了不少的端口数目。RMII的一个端口要求7个数据线,比MII少了一倍,所以交换机能够接入多一倍数据的端口。和MII一样,RMII支持10兆和100兆的总线接口速度。
    • SMII(Serial MII)是由思科提出的一种媒体接口,它有比RMII更少的信号线数目,S表示串行的意思。因为它只用一根信号线传送发送数据,一根信号线传输接受数据,所以在时钟上为了满足100的需求,它的时钟频率很高,达到了125兆,为什么用125兆,是因为数据线里面会传送一些控制信息。SMII一个端口仅用4根信号线完成100信号的传输,比起RMII差不多又少了一倍的信号线。SMII在工业界的支持力度是很高的。同理,所有端口的数据收发都公用同一个外部的125M时钟。
    • GMII(Gigabyte MII)是千兆网的MII接口,这个也有相应的RGMII接口,表示简化了的GMII接口。

MII (Management interface)只有两条信号线。

SGMII

Serial Gigabit Media Independent Interface

SerDes

ESD

Electrostatic discharge

STATS

SOP

Start of Packet, the first fragment of packet

EOP

End of Packet, the last fragment of packet

EOQ

end-of-queue

LSB

least-significant bit

HDP

head descriptor pointer

DMA

TXnHDP

Transmit Channel n DMA Head Descriptor Pointer Register

RXnHDP

Receive Channel n DMA Head Descriptor Pointer Register

Swi

Software Interrupt

Hwi

Hardware Interrupt

ISR

中断服务程序

C99

C99 (以前称为C9X )是ISO / IEC 9899:1999的非正式名称,在1999年推出,被ANSI于2000年3月采用。它是C编程语言标准的过去版本。 它扩展了以前的版本( C90 ),增加了语言和标准库的新功能,并帮助实现更好地利用可用的计算机硬件,如IEEE 754-1985浮点运算和编译器技术,最主要的增强在数值处理上。 2011年发布的C编程语言标准的C11版本取代了C99。

C99是在C89/90的基础上发展起来的,增加了基本数据类型、关键字和一些系统函数等。

C99有一部分是对于增加了宽字符集,还加入了一些库函数,是继C89标准之后的第二个C语言官方标准。第一个C++语言官方标准C++98标准,就是基于C89编写的,因此C99标准新增的语法特性在C++的编译器中就或多或少地支持了,而完全或几乎完全支持C99标准的主流编译器有:GCC 、Clang 、Intel C++ Compiler 等。另外,Visual Studio 2013也部分支持了C99语法特征 。

C99标准的草案是免费的 [6]

初始化列表

初始化列表是用于初始化一组(结构体)内存位置的值列表。

例如,假设已经声明了以下 Date 结构体:

1
struct Date{int day, month, year;};

定义和初始化 Date 变量的方式是:先指定变量名,后接赋值运算符和初始化列表,如下所示:

1
Date birthday = {23, 8, 1983};

该声明定义 birthday 是一个 Date 结构体的变量,大括号内的值按顺序分配给其成员。

也可以仅初始化结构体变量的部分成员。例如,如果仅知道要存储的生日是8月23日, 但不知道年份,则可以按以下方式定义和初始化变量:

1
Date birthday = {23,8};

这里只有 day 和 month 成员被初始化,year 成员未初始化。但是,如果某个结构成员未被初始化,则所有跟在它后面的成员都需要保留为未初始化。使用初始化列表时,C++ 不提供跳过成员的方法。以下语句试图跳过 month 成员的初始化。这是不合法的。

1
Date birthday = {23,1983}; //非法

还有一点很重要,不能在结构体声明中初始化结构体成员,因为结构体声明只是创建一个新的数据类型,还不存在这种类型的变量。因为结构体声明只声明一个结构体“看起来是什么样子的”,所以不会在内存中创建成员变量。只有通过定义该结构体类型的变量来实例化结构体,才有地方存储初始值。

构造函数

虽然初始化列表易于使用,但它有两个缺点:

  1. 如果有某个成员未被初始化,那么在这种情况下,跟随在该成员后面的成员都不能初始化。
  2. 如果结构体包括任何诸如字符串之类的对象,那么在许多编译器上它都将无法运行。

在这些情况下,可以使用构造函数来初始化结构体成员变量,这和初始化类成员变量是相同的。与类构造函数一样,结构体的构造函数必须是与结构体名称相同的公共成员函数,并且没有返回类型。因为默认情况下,所有结构体成员都是公开的,所以不需要使用关键字 public。

以下是一个名为 Employee 的结构体的声明语句,它包含一个具有两参数的构造函数,以便在创建一个 Employee 变量而不向其传递任何参数时,提供默认值:

1
2
3
4
5
6
7
8
9
10
11
12
struct Employee
{
string name; // 员工姓名
int vacationDays, // 允许的年假
daysUsed; //已使用的年假天数
Employee (string n ="",int d = 0) // 构造函数
{
name = n;
vacationDays = 10;
daysUsed = d;
}
};

Const in C++

  1. const与#define

    两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。

    #define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内联函数(Inline)。

    const和define定义的常量可以放在头文件里面。(小注:可以多次声明,但只能定义一次)

  2. const与指针和引用

    • const与指针

      1
      2
      3
      4
      int me;
      const int* p1 = &me;//p1可变,*p1不可变,此时不能用*p1来修改,但是p1可以转向
      int* const p2 = &me;//p2不可变,*p2可变,此时允许*p2来修改其值,但是p2不能转向。
      const int* const p3 = &me;//p3不可变,*p3也不可变,此时既不能用*p3来修改其值,也不能转向
    • 指针和引用的区别很简单,就是引用更简洁,更安全。因为引用声明时必须初始化。 引用更接近const指针,一旦与某个变量关联,就将一直效忠于他。

    • const指针可以接受const和非const地址,但是非const指针只能接受非const地址。所以const指针的能力更强一些,所以尽量多用const指针,这是一种习惯。

  3. const与函数

  • 由于2.3,所以经常把函数的形参类型设为const,而且多为const 引用。但是这里有一个限制,不能把不是左值的地址传递给引用。(左值包括变量,数组元素,结构成员,引用,被解除引用的指针等)。 形参是const类型的,说明该函数将不会修改其值,该函数便为const函数。

  • const与类成员函数。先看看下面这段代码:

    1
    2
    const Stock land = Stock("hyd");
    land.show();

    land 是常量,但是类成员函数show()无法保证不修改land,所以编译器将拒绝执行该段代码。除非你能保证show像const函数一样,但这需要另外一种语法,即:

    1
    2
    void show() const; //声明
    void Stock::show() const{} //定义

内联函数

Inline Functions

超级循环

ANC

IPC

Inter-Processor Communication

内部处理器通信

NDK

Network Development Kit

网络开发套件

GPIO

General Purpose Input/Output

通用型之输入输出的简称,功能类似8051的P0—P3,其接脚可以供使用者由程控自由使用,PIN脚依现实考量可作为通用输入(GPI)或通用输出(GPO)或通用输入与输出(GPIO),如当clk generator, chip select等。

既然一个引脚可以用于输入、输出或其他特殊功能,那么一定有寄存器用来选择这些功能。对于输入,一定可以通过读取某个寄存器来确定引脚电位的高低;对于输出,一定可以通过写入某个寄存器来让这个引脚输出高电位或者低电位;对于其他特殊功能,则有另外的寄存器来控制它们。

EMIFA

SRIO

高速串行IO口

Hyperlink

超链接

JTAG

Warm reset

软复位

LLD

Low Level Driver

HAL

Hardware Adaption Layer硬件适应层

IGMP

Internet Group Management Protocol

Internet Group Management Protocol (IGMP) is designed to help routers in routing IP multicast traffic. Each router can have multiple ports, and it is inefficient for the router to replicate every IP multicast packet out of each active port. Using the IGMP protocol, the multicast router is able to keep track of which IP multicast addresses need to be routed to each individual port. This allows the router to limit IP multicast transmission to only those ports that require the multicast traffic. IGMP 是用来帮助路由器路由IP组播流量的。每个路由器可以有多个端口,并且路由器从每个活动端口复制每个IP组播包是低效的。使用IGMP协议,组播路由器能够跟踪哪些IP组播地址需要被路由到每个单独的端口。这允许路由器将IP组播传输限制为仅需要组播流量的端口。

The IGMP protocol assumes a client/server relationship between endpoints. The IGMP server is run by the multicast router to get IP multicast information about all the client on each of its individual ports. The IGMP client is only concerned with communicating its own multicast requirements to the local IGMP server, so that it will get the IP multicast packets that it requires. IGMP协议假定端点之间存在客户端/服务器关系。IGMP服务器由组播路由器运行,以获得关于每个单独端口上的所有客户端的IP组播信息。IGMP客户端只关心把它自己的组播要求传达给本地IGMP服务器,这样它就会得到它所需要的IP组播包。

Vocabulary

  1. granularity n. 间隔尺寸,[岩] 粒度

    the quality of being composed of relatively large particles

  2. be patched with 用**修补

    patched /pætʃt/

    adj. 打补丁的 v. 打补丁;遮盖(视力好的眼)促进弱视眼看;(用补丁对程序)改错(patch 的过去式和过去分词)

  3. an entire contiguous Ethernet packet 一个完整连续的以太网包

  4. byte-aligned memory address 字节内存地址

    aligned [əˈlaɪnd]

    1. 结盟;支持;使成一直线;校准;安放,排列;使一致(align 的过去式和过去分词)
  5. prior [ˈpraɪər] adj. (时间、顺序等)先前的;优先的

  6. indicate vt. 表明;指出;预示;象征

  7. prologue /prəʊlɒg/ n. 开场白

  8. auxiliary definitions 辅助定义

    auxiliary [ɔːɡˈzɪliəri]

    adj. 辅助的;副的;附加的;(发动机、设备等)备用的

  9. static inline 静态内联

  10. volatile unsigned int

    volatile [ˈvɒlətaɪl]

    adj. [化学] 挥发性的;不稳定的;爆炸性的;反复无常的

    1. 挥发物;有翅的动物
  11. heap n. 信号量

  12. explicity and implicity 显性和隐性

    explicitly [ɪkˈsplɪsɪtli]

    adv. 明确地;明白地

    implicitly [ɪmˈplɪsɪtli]

    adv. 含蓄地;暗中地

  13. assertion check 断言检查

    assertion [əˈsɜːʃn]

    1. 断言,声明;主张,要求;坚持;认定

    assert

    internal asserts

  14. wrapper function 包装函数

  15. name mangling (函数)命名重整

    mangle /mæŋgl/

    vt. 乱砍、损坏

    The process of encoding the signature into the link name is referred to as name mangling. 对链接名称解码签名的过程被称为命名重整。

    Since function overloading is accomplished through name mangling, function overloading has limitations for functions that are called from the configuration. 由于函数重载是通过命名重整完成的,因此函数重载对从配置中调用的函数有限制。

  16. periodic /periɒdik/ adj. 周期的

    period n. 周期

  17. instantiation of clock 时钟实例化

  18. advancing the connected timer by one second 将连接的时钟向前推进1秒

    advance at different rates 以不同的速率前进

  19. the attached clock 附带的时钟

  20. results in an accurate clock 产生了(导致、致使)一个精确的时钟

  21. constructor n. 构造函数;构造器;建造者

  22. destructor n. 析构函数

  23. millenium n. 千年;千禧年

  24. leap year 闰年

  25. millisecond [ˈmɪlisekənd] n. 毫秒;千分之一秒

    microsecond 微秒

  26. semaphore [ˈseməfɔːr] n. 信号标,旗语;臂板信号装置 v. 打旗语,发信号

  27. diagnostics n. 诊断学(用作单数)

  28. declaration /,deklə'reiʃən/ n. (纳税品等的)申报;宣布;公告;申诉书;声明;

  29. prefix n. 前缀 vt. 加前缀;将某事物加在前面

  30. assembly source 汇编源代码

    assembly code 汇编码

  31. toggle split editor 切换分屏编辑器

    toggle [ˈtɒɡl]

    1. 拴扣;切换键,开关;套索钉

    2. 切换;拴牢,系紧

    split [splɪt]

    vt. 分离;使分离;劈开;离开;分解
    1. 离开;被劈开;断绝关系
    1. 劈开;裂缝 adj. 劈开的

    toggle full screen 切换全屏幕

    toggle funciton

  32. perspective n. 观点;远景;透视图 adj. 透视的

    customize perspective

  33. energia [e'nə:dʒiə] n. (Energia) 能源(火箭名)

    energia sketch 能源草图?

  34. specifications for benchmark tests 基准测试规范

    specification

    ​ a detailed description of design criteria for a piece of work

    ​ n. 规范

    benchmark

    ​ a standard by which something can be measured or judged

    ​ n. 参考标准,基准

  35. target-specific functions 目标特定的功能

    device-specific functions 设备特定的功能

  36. implementation of the IGateProvider interface IGateProvider 接口的实现

    implement

    ​ apply in a manner consistent with its purpose or design

    ​ v. 实现

  37. fixed-size buffers 固定大小缓冲

    fixed

    ​ adj. 固定的

    variable-sized buffers 可变大小缓冲

  38. dynamic memory allocation and deallocation 动态内存分配和回收

  39. reentrant versions 可重入版本

    SYS/BIOS provides reentrant versions of malloc() and free() that internally use the xdc.runtime.

    SYS/BIOS为内部使用XDC.RUNTIME的 malloc() 和 free() 提供了可重入版本。

  40. formal parameter 形式参数

    C++ allows you to specify default values for formal parameters within the function declaration.

    C++允许你在函数声明中指定形参的默认值。

  41. invoke the class member function 调用类成员函数

    By writing a wrapper function which accepts a class instance as a parameter, you can invoke the class member function from within the wrapper. 通过编写以类实例作为参数的包装函数,你可以在包装函数中调用其类成员函数。

  42. context of a software interrupt 软件中断的上下文

    Memory allocation APIs such as Memory_alloc() and Memory_calloc() cannot be called from within the context of a software interrupt.内存分配接口如A和B不能够在软件中断的上下文中被调用。

  43. initial commit message 初始提交消息

    commit [kəˈmɪt]

    ​ vt. 犯罪;把...交托给;指派…作战;使…承担义务;(公开地)表示意见

    ​ vi. 忠于(某个人、机构等);承诺

    amend last commit 修改上一次提交(的数据)

  44. stage changed (确认)暂存(数据)已变化

  45. device endianness 设备字节顺序

  46. preempt 抢占

    All Clock functions run at the same Swi priority, so one Clock function cannot preempt another. 所有的时钟函数都运行在相同的SWI优先级,所以一个时钟函数不能抢占另一个时钟函数。

  47. terminate /ˈtɜːmɪneɪt/ vi./vt. 使终止;使结束;解雇

  48. Event Combiner 事件组合器

  49. optimal isolation 最佳隔离???

    As previously stated, the stack has been designed for optimal isolation, and so that it may seamlessly plug in to varying run-time environments.

  50. octet /ɔk'tet/ 八重、八位(计算机语境下,基本与byte同意)

  51. configuration entry 配置条目

  52. is independent of 独立于……;相对于……独立

  53. Parsing CGI Form Data 解析CGI结构的数据

    parse /'pɑːz/ v.理解,从语法上分析

Reference

www.digoboy.com

PART 1: HTML

——佳佳

Hyper Text Markup Language超文本标记语言

HTML框架

1
2
3
4
5
6
7
8
9
<!DOCTYPE html>	
<html long="en">
<head>
<title>TAG</title>
<meta charset="UTF-8">
</head>
<body>
</body>
</html>

常用标签

基础标签

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>	
<html long="zh">
<head>
<title>网页标题</title>
<meta charset="UTF-8">
</head>
<body>
<h1>内容标题</h1><hr><!--此处添加水平线-->
<p>
此处为<br>段落内容
</p>
</body>
</html>
标签 功能 应用
<DOCTYPE> 定义文档类型 <!DOCTYPE html>
<html> 定义一个HTML文档 <html long="zh">内容</html>
<title> 为文档定义一个标题 <title>标题</title>
<body> 文档的主体 <body>主体</body>
<h1>to<h6> HTML标题 <h1>标题</h1>
<p> 一个段落 <p>内容</p>
<br> 换行 <br/>
<hr> 水平线 <hr>
<!----> 注释 <!--需要注释的内容-->

格式标签

标签 功能 应用
<abbr> 定义一个缩写 <abbr title="蹲坑">dk</abbr>
<address> 定义文档作者/所有者的联系信息 <address>地址联系信息</address>
<b> 加粗(无语义) <b>文本</b>
<bdi> 设置一段文本,使其脱离其父元素的文本方向设置 <bdi>文本</bdi>
<bdo> 定义文本方向(rtl&ltr) <bdo dir="rtl">文本</bdo>
<blockquote> 块引用(cite) <blockquote cite="url">引用内容</blockquote>
<cite> 定义作品的标题(书籍、歌曲、电影等) <cite>作品标题</cite>
<code> 定义计算机代码文本 <code>代码</code>
<del> 删除线 <del>要删除的文本</del>
<dfn> 定义项目 <dfn>项目名</dfn>
<em> 倾斜字体(语义较强) <em>字体</em>
<i> 倾斜字体(无语义) <i>需倾斜文本</i>
<ins> 定义删除后新插入的文本 <del>red</del><ins>blue</ins>
<mark> 高亮文本 <mark>文本</mark>
<meter> 已知最大最小值的度量
value(必须):规定当前值
max:规定最大值;min:规定最小值
high:规定最高值;low:规定最低值
optimum:规定最优值
<meter value="2" min="0" max="10">2 out of 10</meter>
<meter value="0.6">60%</meter>
<progress> 定义运行任务进度 <progress value="22" max="100"></progress>
<q> 定义短的引用 <q>引用内容</q>
<rp> 定义不支持 ruby 元素的浏览器所显示的内容 <ruby><br/>汉 <rt><rp>(</rp>ㄏㄢˋ<rp>)</rp></rt><br/></ruby>
<rt> 定义字符(中文注音或字符)的解释或发音 <ruby><br/>汉 <rt> ㄏㄢˋ </rt><br/></ruby>
<ruby> 定义ruby注释(中文注音或字符) <ruby><br/>汉 <rt> ㄏㄢˋ </rt><br/></ruby>
<s> 删除线 <s>文本</s>
<strong> 加粗(语义较强) <strong>文本</strong>
<sub> 下标文本 <sub>文本</sub>
<sup> 上标文本 <sup>文本</sup>
<time> 定义公历时间(24)或日期 The concert starts at <time>20:00</time>
The concert took place on
<u> 下划线 <u>文本</u>

表单标签

标签 功能
<form> 定义一个表单域
<input> 定义一个输入控件
type:
button:定义一个按钮。
file:选择文件
submit:提交按钮(点击后会向后台提交所选表单域中的信息)
search:搜索框
password:密码框
date:选择时间框(年-月-日)
text:单行文本
datetime-local:选择年月日时分
tel:电话号码
radio:单选按钮(需要给相同的name)
checkbox:复选按钮
color:选择颜色
email:邮箱
number:输入数字
reset:重新输入
week:多少年的第几周
<textarea> 多行文本输入框<textarea>自定义内容</textarea>
<select> 下拉选择列表<select>option*N</select>
size:规定下拉菜单中可见的选项数目
required="required":必须要选一个
multiple="true":可选多个选项
<optgroup> 选择列表中相关选项的组合{option*N}N
<option> 选择列表中的选项
<label> input元素的标注(不点击控件,点链接到的文字也可以定位到控件)
<label for="male">Male</label>
<input type="radio" name="sex" id="male" value="male">
<fieldset> 围绕表单中元素的边框
<legend> 定义fieldset元素的标题
<datalist> 规定input元素可能的选项列表
<keygen> 用于表单的秘钥对生成器字段
<output> 定义计算的结果

多媒体标签

图像标签

<img>

作用:向网页中嵌入一张图片

应用:<img src="url" alt="图片加载不出来时的代替文本" title="鼠标放到图片上的介绍文本">

Note:绝对路径用“”;相对路径用“/”

视频标签

音频标签

超链接标签

<a>

作用:超链接

应用:<a href="链接地址" target="_blank">连接描述</a>(内部、外部链接)

​ <a href="#">链接描述</a>(空链接)

​ <a href="文件地址、压缩包地址">下载文件</a>(文本、图片、视频、音频等均可以为超链接)

​ <a href="#age">年龄</a>

​ <h3 id="age">年龄详情</h3>(锚点链接)

Note:

  • 默认为_self(当前窗口打开)
  • _blank(新窗口中打开)
  • ​ _top(整个窗口中打开)

列表标签

标签 功能 应用
<ul> 定义一个无序列表 <ul><li><li></li></li><</ul>
<ol> 定义一个有序列表 <ol><li><li></li></li></ol>
<li> 定义列表项 <ol><li><li></li></li></ol>
<dl> 定义一个定义列表 <dl><dt>电脑</dt><dd>电脑的解释</dd></dl>
<dt> 定义列表中的项目 <dl><dt>电脑</dt><dd>电脑的解释</dd></dl>
<dd> 定义列表中的项目描述 <dl><dt>电脑</dt><dd>电脑的解释</dd></dl>

Note:

  • <ul><ol>里面只能放<li>标签,<li>标签里面可以放弃他标签

  • <dd>中的内容是<dt>中内容的说明或是包含于<dd>内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <!DOCTYPE html>
    <html long="en">
    <head>
    <meta charset="UTF-8">
    <title>列表</title>
    </head>
    <body>
    <div>
    <ul>
    <li>洗衣机</li>
    <li>冰箱</li>
    <li>空调</li>
    </ul>
    <ol>
    <li>太阳</li>
    <li>地球</li>
    <li>西安</li>
    </ol>
    <dl>
    <dt>跨栏</dt>
    <dd>是一项运动</dd>
    <dd>奥运会项目</dd>
    <dd>刘翔是冠军</dd>
    </dl>
    </div>
    </body>
    </html>

表格标签

标签 功能
<table> 定义一个表格
border="num"定义边框宽度
<tr> 定义行
<td> 定义单元格
colspan:规定单元格可横跨的列数
rowspan:规定单元格可横跨的行数
<th> 定义表头单元格(使内容居中加粗)
<thead> 定义表头整行
<tbody> 定义表格主题内容
<tfoor> 定义表注(脚注)

Note:

  • 合并单元格时,选定操作目标单元格后,需要删掉被合并单元格的代码。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>表格</title>
    </head>
    <body>
    <table border="1">
    <thead>
    <tr>
    <th>序号</th>
    <th>姓名</th>
    <td>年龄</td>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>1</td>
    <td>张佳佳</td>
    <td>24</td>
    </tr>
    <tr>
    <td>2</td>
    <td>张亮亮</td>
    <td>33</td>
    </tr>
    <tr>
    <td rowspan="2">3</td>
    <td>张盼盼</td>
    <td>22</td>
    </tr>
    <tr>
    <td>张志荣</td>
    <td>63</td>
    </tr>
    <tr>
    <td>4</td>
    <td colspan="2"></td>
    </tr>
    </tbody>
    </table>
    </body>
    </html>

高级HTML知识

网站图标设置

favicon

<link rel="shortcut icon" href="favicon.ico">

头部标签设置

TDK三大标签及SEO优化

TDK三大标签即title、description、keyword;SEO即Search Engine Optimization,即搜索引擎优化。

Title

<title>blablabla...</title>

Description

<meta name="description" content="blablablabla..." />

Keyword

<meta name="keyword" content="blablabla...">

PART 2: CSS

——佳佳、铭锐、吉财

WebKit浏览器:

基于WebKit Core的浏览器。

WebKit是一种用来让网页浏览器绘制网页的排版引擎。它被用于Apple Safari。其分支Blink被用于基于Chromium的网页浏览器,如Opera与Google Chrome。

Webkit亦使用于Apple iOS、BlackBerry Tablet OS、Tizen及Amazon Kindle的默认浏览器。WebKit的C++应用程序接口提供了一系列的Class以在视窗上显示网页内容,并且实现了一些浏览器的特色,如用户链接点击、管理前后页面列表及近期历史页面等等。

WebKit的HTML及JavaScript代码源自KDE的KHTML及KJS库的一个分支[3],现已由KDE、Apple、Google、Nokia、Bitstream、BlackBerry及Igalia等独立开发[4]。OS X、Windows、GNU/Linux以及其他类Unix系统操作系统,皆支持这个项目[5]。2013年4月3日,Google宣布它创建了WebKit中WebCore组件的分支——Blink,Blink用于新版Google Chrome与Opera[6][7]。

WebKit的WebCore及JavaScriptCore组件使用GNU宽通用公共许可证,其他组件则采用BSD许可证[8]。

截至2013年3月7日,Webkit商标已被苹果公司在美国专利及商标局注册为其商标。[9]

——Wikipedia

CSS是层叠样式表(Cascading Style Sheets)标记语言,主要用来设置文本的内容(大小、字体、对齐方式等)、图片的外形等等。

CSS语法规范:选择器 以及 一条或多条声明 两个主要的部分构成。

书写方式: 选择器: { 属性值; }

CSS基础知识

1. CSS 类命名规则

公共命名规则

CSS样式命名 说明
wrapper 页面外围控制整体布局宽度
container或content 容器,用于最外层
layout 布局
head, header 页头部分
foot, footer 页脚部分
nav 主导航
subnav 二级导航
menu 菜单
submenu 子菜单
sideBar 侧栏
sidebar_a, sidebar_b 左边栏或右边栏
main 页面主体
tag 标签
msg message 提示信息
tips 小技巧
vote 投票
friendlink 友情连接
title 标题
summary 摘要
loginbar 登录条
searchInput 搜索输入框
hot 热门热点
search 搜索
search_output 搜索输出和搜索结果相似
searchBar 搜索条
search_results 搜索结果
copyright 版权信息
branding 商标
logo 网站LOGO标志
siteinfo 网站信息
siteinfoLegal 法律声明
siteinfoCredits 信誉
joinus 加入我们
partner 合作伙伴
service 服务
regsiter 注册
arr/arrow 箭头
guild 指南
sitemap 网站地图
list 列表
homepage 首页
subpage 二级页面子页面
tool, toolbar 工具条
drop 下拉
dorpmenu 下拉菜单
status 状态
scroll 滚动
.tab 标签页
.left .right .center 居左、中、右
.news 新闻
.download 下载
.banner 广告条(顶部广告条)

其他DIV命名规则

  登录条:loginBar

  标志:logo

  侧栏:sideBar

  广告:banner

  导航:nav

  子导航:subNav

  菜单:menu

  子菜单:subMenu

  搜索:search

  滚动:scroll

  页面主体:main

  内容:content

  标签页:tab

  文章列表:list

  提示信息:msg

  小技巧:tips

  栏目标题:title

  友情链接:friendLink

  页脚:footer

  加入:joinus

  指南:guild

  服务:service

  热点:hot

  新闻:news

  下载:download

  注册:regsiter

  状态:status

  按钮:btn

  投票:vote

  合作伙伴:partner

  版权:copyRight

2. 选择器

基础选择器

选择器按作用大小(从小到大)分为 ID选择器(使用井字符做特殊标注:#)类选择器(使用英文点号做特殊标注:.)标签选择器通配符选择器(使用英文星号做特殊标注:*)

CCS 选择器的作用:选择器是为了选定标签,声明对象设置具体样式

选择器类型 选择器特性 style书写方式 style应用方式
ID选择器 1. 与其他选择器类型一致,特殊之处是大部分情况作JavaScript调用
2. 需要编写唯一id不可重复使用
#DivStyle { color: red; } id="DivStyle"
类选择器 1. 作用于使用class属性的一类标签,同面向对象的其他语言特性一致
2. 单个标签可以使用多个类,中间以空格隔开
.ClassStyle { color: black;} Class="ClassStyle ....."
标签选择器 作用于所有使用本标签的标签 div { color: blue; } /
通配符选择器 作用于所有标签 * { clolor: pink; } /

复合选择器

复合选择器类型 选择器特性 style书写方式
后代选择器 1. 可以选择某个父标签下的某个全部子标签,不管其是否在同一个层级
2. 当标签发生嵌套时,内层标签就称为外层标签的后代
3. 浏览器按照标签层级的关系进行查找,并对最内层标签进行修改,因此可以定义多重标签选择,如可以使用基础选择器(类选择器及ID选择器)进行组合使用
4. 内外层选择器之间 以空格隔开
外层标签 内层标签 {属性}
ol li { color: #000; }
ol li a { color: #777; }
.nav li a { color: pruple;}
子代选择器 1. 即与后代选择器不同,仅对父级标签下的某一类选择器进行操作,不会作用于其他子代的同类标签
2. 使用符号 > 进行操作
.nav>a {color: pink;}
集选择器(相邻选择器) 1. 在两个没有从属关系(子代或后代)和相同特点(如同类标签)的同级不同类标签中,定义一个相同的样式
2. 多个标签进行选择时使用英文逗号 , 进行并列选择
3. 并集选择器内可使用 简单选择器复合选择器(如 后代选择器 和 子代选择器),竖向书写选择器
div, p {color: pink; }
伪类选择器 1. 用于给某些选择器添加特殊效果(如给链接添加特殊效果),或者选择某个元素
2. 结构伪类、链接伪类、表单伪类
3. 伪类选择器其实更像是一个行为选择器(或状态选择器),它定义了一个/类标签在不同状态下的样式,书写形式如:标签: 状态/行为 {属性}
.OnlineTitle:link {
color: #222222;
text-decoration: none;
}
属性选择器(高级) 元素名[属性(及关键搜索项)]
E[att] 选择具有att属性的E元素
E[att="val"] 选择ett=val的E元素
E[att^="val"] 选择att属性开头为val的E元素
E[att$="val"] 选择att属性结尾为val的E元素
E[att*="val"] 选择att属性中包含"val"字符的E元素
结构伪类选择器(高级) 根据文档结构来选择元素,常用于父级元素里的子元素
E:first-child 匹配父元素中的第一个子元素E
E:last-child 匹父元素中的最后一个元素E
E:nth-child(n) 匹配父级元素中的第n个子元素E
E:first-of-type 指定类型E的第一个
E:last-of-type 指定类型E的最后一个
E:nth-of-type(n)指定类型E的第n个
n可以是正数关键字(even偶数、odd奇数)和公式
可以配合其他复合选择器进行选择,如子代选择器、后代选择器等。
在使用nth-child(n)后,未指定特殊数字时,将从0开始计数,直到所有子代结束,即等同于全选所有该类子代。
伪元素选择器(高级) ::before 在元素内部的前面插入东西
::after 在元素内部的后面插入东西
所创建的元素为行内元素;
必须有content属性;

并集选择器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!DOCTYPE HTML>
<!--
如要求将下方熊大、熊二及佩奇一家都改为粉色,则按照<style>中的方式进行书写
-->
<html>
<head>
<style>
//在两个没有从属关系(子代或后代)和相同特点(如同类标签)的同级不同类标签中,定义一个相同的样式
div,
p,
.pig li { //类选择器
color: pink;
}
</style>
</head>
<body>
<div>熊大</div>
<p>熊二</p>
<span>关头强</span>
<ul class="pig">
<li>PIG 1</li>
<li>PIG 2</li>
<li>PIG 3</li>
</ul>
</body>
</html>

链接伪类选择器

四个使用方式: link / visited / hover / active

  1. 为了确保生效,应按照LVHA的顺序进行声明。
  2. <a> 链接在浏览器中具有默认样式,不会因为在<body>中而随之改变,实际工作中需要给链接单独指定样式。
  3. 使用时,加上冒号 : 与 四种状态之一 即可

举例:

1
2
3
4
a:hover
{
background-color:yellow;
}

当鼠标经过父级元素时,显示子元素的遮罩层:

1
2
3
.tudou:hover .mask {
display: block; /* 显示遮罩层 */
}

最小盒子:即只能存放文字了,不能再存放其他标签/元素,如 <p><h1>等文字块级标签;

结构伪类选择器

nth-child()在执行时会先把所有子元素都进行排序,先看nth-child()括号中的数字,再匹配前方的标签是否与实际标签一致,如果不一致则不执行。

nth-of-type()在执行时会先把指定类型的子元素都进行排序,先看nth-of-type()括号中的数字,再匹配查找到具体的标签。

CSS中使用伪类选择器,根据结构顺序精确选择标签:

1
2
3
4
5
6
7
8
9
ul li:first-child {
color: white;
}
ul li:last-child {
color: green;
}
ul li:nth-chile(3) {
color: yellow;
}

HTML结构如下:

1
2
3
4
5
6
7
8
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>

自增长序列,n是从0开始的,按照公式从0开始计算,所得结果为选择器选择的行数。

公式 取值
2n 偶数
2n+1 奇数
5n 5、10、15...
n+5 从第5个开始(包含第5个)直到最后
-n+5 前5个(包含第5个)

元素显示模式

是指在页面上的元素以 块状模式行内模式行内块模式 进行显示。元素按显示模式可以分为 块状(级)元素行内元素(内联元素)行内块元素 三种类型。

元素类型 典型标签 特点 注意点
块状元素 <h1>~<h6><p><div><ul><ol><li>...... 1. 即使设置标签宽度,也是独占一行
2. 高、宽、外边距及内边距可调节
3. 默认宽度是父级宽度的100%
4. 是一个容器及盒子,可以放任何标签
文字类的标签内不可以存放块元素
行内元素(内联元素) <a><strong><b><em><i> ...... 1. 相邻行内元素在一行上,一行可以显示多个
2. 直接设置宽高无效,可以间接设置
3. 默认宽度就是其内容宽度
4. 行内元素只能容纳文本及其他行内元素
1. 链接中不允许再放其他链接
2. <a>中可以放置块元素,但是转换成块级元素最安全
行内块元素 <input><image><td>...... 1. 同时具有块元素及行内元素的特定
2. 和相邻行内元素(行内块)在一行上,但是有空白缝隙,可以一行显示多个
3. 默认宽度即内容宽度
4. 高度、行高、外边距及内边距可控制

元素显示模式的转换

即一个模式的元素需要另一个模式的特性,可以通过在CSS的标签样式属性中添加display语句进行转换。

转换为块级元素: display: block;

转换为行内元素: display: inline;

转换为行内块元素: display: inline-block;

选择器特性

层叠性、继承性、优先性

层叠性

样式冲突,就近原则

继承性

子标签会继承父标签的某些样式

子元素可以继承父元素的样式(text-,font-,line-这些元素开头的可以继承,以及color属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<style>
body{
color:pink;
font:25px/1.5 'Microsoft YaHei';
}
div{
font:14px;
}
/*此时div会继承body中1.5倍的行高,此时div中的行高就是14*1.5=21px*/
行高可以跟单位也可以不跟单位
如果子元素没有设置行高,则会继承父元素行高为1.5
此时子元素的行高是:当前子元素的文字大小*1.5
body行高1.5这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高
</style>

优先性(权重)

选择器类型 权重
继承
通配符选择器、子代选择器、相邻选择器(并集选择器) 0,0,0,0
元素选择器(标签选择器)、伪元素选择器 0,0,0,1
类选择器、伪类选择器、属性选择器 0,0,1,0
ID选择器 0,1,0,0
内联选择器 1,0,0,0
!IMPORTANT 无限

选择器的加权结果并非二进制,而是在各个数位上进行单独相加,例如元素选择器与类选择器的加权结果为 0,0,1,1,左侧数位的数值越大,权重越高。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
	<style>
div {
color: red;
}
.colour {
color: green;
}
#demo {
color: burlywood;
}
p {
color: #008000;
}
</style>
<body>
<div class="colour" id="demo" style="color: #4682B4;">
不爱绿色爱蓝色
<p>
继承的权重为0
</p>
/*此时p是继承不到父级的设定* 所以看标签到底执行哪个样式,就先看这个标签有没有直接被选出来/
</div>
继承的权重是0,如果该元素没有直接选中,不管父元素权重多高,子元素得到的权重都是0。

3. List

list-style CSS 属性是一个简写对属性集合,包括list-style-type, list-style-image,list-style-position

list-style: none | circle | square inside ;表示<ul><li> 前的小点样式,如“无、圆圈、实心方形”。

例如:

1
2
3
4
5
6
7
8
9
10
11
<ul class="one">
<li>List Item1</li>
<li>List Item2</li>
<li>List Item3</li>
</ul>
List 2
<ul class="two">
<li>List Item A</li>
<li>List Item B</li>
<li>List Item C</li>
</ul>

1
2
3
4
5
6
7
.one {
list-style: circle;
}

.two {
list-style: square inside;
}

4. Background

background-color 可以设置为 transparent,即透明的,不可视的。

background-image 可以设置为 none,也可以跟上一个 url() 链接。如:background-image: url(http://xxxxxx.com/123.jpg)

background-repeat: repeat | no-repea | repeat-x | repeat-y ,分别是指 重复(平铺)、不平铺、在x轴上平铺 及 在y轴上平铺 。

background-position: top | bottom | left | right | center; 除了可以使用类似于左侧的方位词定位,还可以使用坐标轴数值定位。

background: [image] [repeat] [position]; 是复合写法,repeatposition 可省略,image 不可省略。

5. Font

FONT-FAMILY 字体族

通用属性之一,用于设置网页显示字体,font-family的使用方式为 font-family=" " ,双引号内可以书写多个字体,引擎会按顺序搜索本地字体并使用,如果都没有则使用本地字体。

注意:建议使用字体的全英文进行书写,如 微软雅黑 全英文为 Microsoft YaHei,英文书写时有空格的应用单引号‘’ 进行包裹。

FONT-SIZE 字体大小

通常用于对body标签内所有正文字体大小的设置,对标题(如h3)大小的设置仍需另起样式。

复合写法

font: font-style font-weight font-size/line-height font-family;

font-sizefont-family 不可缺省

6. Text

文本属性

属性 书写方式 注意
color
颜色
1. 常见英文表示法,直接书写该颜色英文即可,如 pink  red  blue  purple
2. 16进制表示法,用#号进行书写,如#FF00FF
3. RGB表示法,如rgb(0,0,255)
16进制简写为#fff
实际开发中用16进制
text-align
文本对齐
仅有左、中、右三种表示方式,用英文 left  center  right 进行书写
text-indent
文本缩进
缩进可以用2种方式表示:
1. 精准缩进:即直接使用 px 单位进行书写,表示缩进多少像素点,缺点是容易出现问题
2. 字符单位缩进:即按照字符大小,自适应缩进字符距离,单位是em,如 2em,可以缩进2个字符
text-decoration
文本修饰
常见的修饰类型有四种:无(none)、上划线(overline)、下划线(underline)、删除线(line-through)
line-height 行高=上行距+下行距+字高,且上行距=下行距

7. Box Module

盒子模型主要分三部分:border(边框)、padding(内边距)及 margin(外边距)。

Border

边框主要有一下三种参数:粗细、颜色及样式

  • 粗细(border-width: 5px;)
  • 颜色(boder-color: #555) (注意:如果这个值没有设置,它的默认值是元素的 color属性值(是文字颜色而非背景色)),可以定义为transparent(透明的)
  • 样式(boder-style: none | hidden | dotted | dashed | solid | double(双层线) | groove(内雕刻) | ridge(外浮雕) | inset(内凹陷) | outset(外凹陷) ;)

border属性之可以在中间添加上、下、左、右四个方位词和三参数之一,如 border-top-color | border-bottom-style ....

边框使用时会影响盒子大小,需要注意调整。

复合写法

border: [border-width ||border-style ||border-color |inherit] ;

如:border: 10px solid transparent;

Padding

内边距涉及到的参数包括 上下左右四边的边距。

在未设置内盒子的width时,设置padding对内盒子实际显示大小不起影响,一旦设置width,则会让盒子的width在显示时超过设置参数的大小。

Margin

外边距同内边距。

在标准流下,设置块级盒子width参数后,设置margin左右为auto,可以让盒子实现居中效果。(以下三种写法,推荐第一个,第一个参数表示上下,第二个参数表示左右)

margin: 0 auto;

margin: auto;

margin-left: auto; margin-right: auto;

Q/A

盒子塌陷的解决方案

以下为两个盒子嵌套,同时设置上边距导致塌陷问题的解决方案:

  • 可以为父元素定义上边框/上内边距
  • 可以为父元素添加 overflow: hidden;
  • 利用浮动、固定、绝对定位解决

8. Float

浮动最初的开发目的是让图片和文字产生环绕效果的,浮动可以让多个块级元素在一行内显示。

float: none | left | right;

注意:两个行内块元素中间会有空白间隙存在,如果父级元素设定了宽度,会让元素存放不下。需要给此类行内块元素设定浮动

浮动特性:

  • 脱标

  • 顶端对齐

  • 具有行内块元素特性

外边距合并

外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。

注释:只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框或绝对定位之间的外边距不会合并。

在标准流中嵌套一个带有外边距的浮动框,不会让他们产生外边距合并。

9. Clean Float

清除浮动也叫闭合浮动,是指在未指定父级元素高度而子级元素为浮动时,会对父级元素同级的标准流造成影响,因而需要清除该类浮动造成的弊端的情况。

清除浮动的四种方式:

方法 说明 写法 备注
额外标签 [w3c推荐]也称隔墙法,指在浮动的块(行内块)级元素后面新增一个带有clear: both;属性的额外标签(要求是块级元素)来屏蔽浮动的影响。 clear: both; 弊端是增加了额外标签,对H5结构造成负担;
要求新增的标签不能是行内元素
父级添加overflow 仅给父级元素添加overflow,添加hidden、auto、scroll皆可。 overflow: hidden | auto | scroll 优点是代码简洁,缺点是无法显示溢出的部分
:after伪元素 额外标签法的升级版,利用CSS样式添加额外标签
仅给父级元素添加
见下方 没有增加额外标签,样式写法较为复杂;
双伪元素 在子级前后各添加一个伪元素 见下方 代码简洁,照顾低版本。

:after伪元素代码示例:

1
2
3
4
5
6
7
8
9
10
11
.clearfix:after {
content: "";
display: block;
height: 0;
clear: both;
visibility: hidden;
}

.clearfix { /* IE6、7专有 */
*zoom: 1;
}

双伪元素代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
.clearfix:before, .clearfix:after{
content: "";
display: table;
}

.clearfix:after{
clear: both;
}

.clearfix{
*zoom: 1;
}

10. Position

定位的意义

让盒子自由地在某个盒子中移动或固定在屏幕中的某个位置,并且可以压住其他盒子。

注意:对于标准流和浮动,不可以使用定位。

定位模式

position: static | relative | absolute | fixed ;

定位分类 脱标 使用情况 参考系 其他特点
静态定位 static 否,不能使用边偏移 很少 无,不设置边偏移 按照标准流特性摆放位置
相对定位 relative 否,占用标准流的位置 常用 自身原来的位置 相对于自身原来的位置来移动
设置相对定位后,后面的标准流不会脱标,不会让身后的标准流往前挤或往后挤;
通常是给绝对定位当父级元素的属性
绝对定位 absolute 是,不占用标准流的位置 常用 最近一级父级以上带有定位的盒子(子绝父相) 如果没有已定位的父级元素,则以浏览器进行绝对定位
固定定位 fixed 是,不占用标准流的位置 常用 浏览器的可视窗口 与父级元素无关,不随窗口滚动条滚动
粘性定位 sticky 否,占用标准流的位置 很少 浏览器的可视窗口 相对定位和固定定位的混合体,具有两者的某些特点
必须添加至少一个边偏移参数
需与滚动搭配使用,对IE兼容性差,类似粘性定位的做法通常用JavaScript来做

边偏移

相对于父级盒子(或者有定位的祖辈盒子)的边线偏移量(偏移量可以为负值)。

需要在设置好定位模式后边偏移才能生效。

四种偏移:top、bottom、right、left;

例:top: 10px; right: 20px;

如何将内容固定到版心右侧?

使用固定定位至左侧的50%,在调整margin-left值至版心宽度的一般(直接书写数值px)。

如何让内容固定到屏幕正中心?

使用固定定位至左侧和顶部的50%,再使用margin-leftmargin-right的负值来抵消自身宽高的一半。

定位显示优先级

定位显示优先级,即定位叠放顺序,是指 具有定位属性的盒子(类似于PS图层)在Z轴上的显示优先级,数值越大则优先级越高。

如果设置为auto,则按照H5结构书写顺序以“后来居上”的原则显示。

如果设置为数值,则比auto优先级更高,但是不能写单位。

z-index: (number) | auto;

定位的特殊性质

  • 给行内元素添加绝对或者固定定位后,可以设置宽度和高度(不等同于与块级元素互换特性?)
  • 给块级元素添加绝对或者固定宽度后,不设置宽高也可以则应用内容的大小

11. 显示与隐藏

显示与隐藏的三种方式:display(显示隐藏)、visibility(显示隐藏)、overflow (溢出显示隐藏)

方式 用法 特性
display(显示隐藏) 该属性本来是设置元素如何显示的;
display: none; 用于隐藏对象;
display: block; 除了用于转换成块级元素,还可以用于显示元素;
隐藏元素后,不再占有其原位置;
应用广泛,搭配js做网页特效用;
visibility(显示隐藏) 用于设置元素的可见性;
visibility: visible | hidden | inherit | collapse ;
隐藏元素后,仍占有其原位置;
overflow (溢出显示隐藏) 仅针对溢出元素框的部分进行显示或隐藏;
overflow: visible; 设置时clip属性设置将失效;
overflow: hidden; 不显示超过对象尺寸的内容;
overflow: scroll; 以滚动条形式显示,不管是否内容是否溢出;
overflow: auto; 自动判断内容长度,按需添加滚动条;
如果带有定位属性,应慎用 overflow: hidden; ,会隐藏多余的部分

12. 布局

常见的布局形式

传统布局方式:普通流(文档流、标准流)、浮动、定位。

通栏:是指和浏览器一样宽。

布局设计准则:

  • 纵向块级元素用标准流,横向块级元素用浮动。

  • 先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置,复合网页布局第一准则。

  • 浮动的盒子只会影响浮动盒子后方的标准流,不影响前方的标准流。

  • 应首先采用“一浮全浮”设计原则。

  • 在产品列表数量众多、文字数量众多等不能明确盒子高度的情况下不应指定父级盒子的高度, 否则会出现父级盒子因高度限制而出现子元素无法显示的情况,应让子元素撑开父元素。

  • 当给父元素设置标准流却未设置高度,而子元素为浮动时,父元素会高度塌陷。因浮动的子元素不占有高度,因此子元素浮动会会导致无高度的标准流父级元素高度塌陷,影响后续布局。

CSS属性书写建议

  1. 布局定位属性:display / position / float / clear / visibility / overflow (建议display第一个写)
  2. 自身属性:width / height / margin / padding / border / background
  3. 文本属性:color / font / text-decoration / text-align / vertical-align / white-space / break-word
  4. 其他属性:content / cursor / border-radius / box-shadow / text-shadow / background:liner-gradient ....

页面布局的整体思路

  1. 确定版心,即可视区
  2. 分析行、块 以及 块中的列模块
  3. 列模块经常浮动布局,确定列大小后确定列的位置
  4. 先结构,后样式

关于导航栏

实际开发中,不会直接只用<a>来制作导航栏,而是用<li>包含链接的<li>+<a>来制作。

<li>+<a>语义更加清晰,更为有条理的列表型内容。如果直接用<a>,搜索引擎容易辨别为有堆砌关键字嫌疑(故意堆砌关键字存在被搜索引擎降权的风险),从而影响网站排名。

13. 特殊符号

小于号 < &lt;

大于号 > &gt;

CSS高级知识

目标:

  • 能够使用精灵图

  • 能够使用字体图标

  • 能够写出CSS三角

  • 能够写出常见的CSS用户界面样式

  • 能够说出常见的布局技巧

CSS Sprites

CSS精灵技术的目的:减少客户端向服务器的请求次数,减小服务器的压力,提高网页的加载速度。

使用专用的位置测量工具,如Firework、photoshop或者其他专业工具,可以精确测量精灵图中的小图坐标,设定好盒子大小,使用专业工具测量的图片位置取负值进行平移定位。

建议使用position复合写法进行书写,如 position: url(images/abc.jpg) no-repeat -150px 120px;

缺点:

  1. 图片文件较大
  2. 放大或缩小导致失真
  3. 制作完毕后更换图片复杂

Icon Font

优点:

  1. 轻量级:字体加载时,字体图标就会马上渲染出来,减少了服务器的请求。
  2. 灵活性:本质是文字,具有font相关的所有特性。
  3. 兼容性:几乎支持所有浏览器。

适用场景:结构和样式较为简单的图标。

缺点:不能胜任复杂的结构和样式。

字体图标下载网站:

  1. icomoon字库
  2. 阿里iconfont

四种字体文件格式:

字体格式 兼容性 特性
.ttf 最高 win及mac最常见字体格式
.woff 一般
.eot IE专用字体,支持IE4+
.svg 较低

使用教程:

  1. 字体文件下载完毕之后,会有四种格式的字体文件(请勿删除任一文件)。
  2. 所有的图标字体复制粘贴到资源管理器下即可。
  3. 在效果预览中复制该图标字体,并粘贴至H5文件中。
  4. <style>中添加 font-face 相关的属性(下载的文件包中会有相关代码可供复制粘贴)。

示例


字体声明:

1
2
3
4
5
6
7
8
9
10
11
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('fonts/demofont.eot?t=1545807318834');
src: url('fonts/demofonteot?t=1545807318834#iefix') format('embedded-opentype'),
url('fonts/demofont.woff?t=1545807318834') format('woff'),
url('fonts/demofont.ttf?t=1545807318834') format('truetype'),
url('fonts/demofont.svg?t=1545807318834#iconfont') format('svg');
font-weight: normal;
font-style: normal;
}

使用时需要在标签中引用font-family属性:

1
2
3
span {
font-family: 'iconfont logo';
}

字体追加:

从网站上下载文件时,自带.json文件,里面记录了所有已选择的字体的信息,只要在网站中导入该文件,即可包含过往所选择的所有图标信息,避免选择新图标后旧图标消失。

Triangle

三角形,其实是在一个长宽皆为0的盒子中,利用一条border显示,其余三条boders皆透明来制作的。

1
2
3
4
5
6
7
8
.triangle {
width: 0px;
height: 0px;
inline-height: 0; /*兼容性*/
font-size: 0; /*兼容性*/
border: 10px solid transparent;
border-right-color: rgb(0,0,0);
}

在实际应用中,常与另一个盒子共同包裹在一个大盒子中,使用 position: absolute;位移属性 来制作气泡窗口。

User Interface Style

Cursor

cursor: default | pointer | move | text | not-allowed ;

分别是 箭头手指十字架文本禁止 样式。

Outline

outline: 0; 或者 outline: none;可取消表单轮廓线。

Resize

resize: none; 可以设置让 <textarea> 不能随意拖动。

Vertical-align

vertical-align: baseline | top | middle | bottom;

分别可以实现 父元素基线对齐(与最高元素的)顶端对齐父元素中部对齐(与最低元素的)的顶端对齐

注意:本属性针对行内元素或行内块元素,可以使其水平对齐,对块级元素无效

四种线类型从高往底分别是:top line / middle line / base line / bottom line,默认情况下图片与文字是 baseline align 样式。

行内块元素与(父级)块元素的底部缝隙消除?

当在<div>中装入<img>时,<img>标签会与<div>标签的基线对齐,留下小缝隙,此时需要添加除了baseline以外的属性来消除缝隙。

也可以将行内块元素或行内元素转换为块级元素来实现,但是会有导致其他问题。

Text-overflow

单行文本省略显示

1
2
3
4
5
6
7
8
9
div {
width: 150px;
height: 20px;
background-color: white;
margin: 100px auto;
white-space: nowrap; /* 1. 强制一行显示 */
overflow: hidden; /* 2. 隐藏溢出内容 */
text-overflow: ellipsis; /* 3. 省略号代替溢出部分 */
}

多行文本显示省略号

需要WebKit内核的支持,在最新的浏览器及移动端浏览器上较为兼容,IE不支持。

1
2
3
4
5
6
7
8
9
10
11
div {
width: 150px;
height: 40px;
background-color: white;
margin: 100px auto;
overflow: hidden; /* 1. 隐藏溢出内容 */
text-overflow: ellipsis; /* 2. 省略号代替溢出部分 */
display: -webkit-box; /* 3. 转换为弹性伸缩的盒子 */
-webkit-line-clamp: 2; /* 4. 设置需要显示的行数 */
-webkit-box-orient: vertical; /* 5. 设置排列方式 */
}

Highlight

鼠标滑过<div>时高亮显示,可以使用 position: relative; 或者 z-index: 1; 搭配其他特效 来让盒子图层置顶高亮显示。

单个盒子内文字围绕图片效果

  • 可以在一个父级只装了文字的盒子内,放置一个浮动模块,产生文字围绕图片的效果。
  • 此时文字和盒子的间距为0,显得不美观,可以为图片添加一个 padding属性。

页面导航制作

使用行内块可以制作不需要添加 margin 属性,却有 margin 效果的页码导航部分。 所有行内块元素可以在同一列显示,且使用 text-align: center; 即可让所有元素居中对齐。

梯形制作

梯形是由矩形+直角三角形获得,直角三角形获得方式如下:

1
2
3
4
5
6
7
8
.box {
width: 0;
height: 0;
border-top: 100px solid transparent; /* 其中一边设置为长边,且设置为透明色 */
border-right: 50px solid skyblue;
border-bottom: 0 solid blue;
border-left: 0 solid green;
}

或如下:

1
2
3
4
5
6
7
.box {
width: 0;
height: 0;
border-color: transparent red transparent transparent;
border-style: solid;
border-width: 22px 8px 0 0;
}

CSS初始化样式

<link rel="stylesheet" href="css/base.css">

最简单的初始化方法就是: * {padding: 0; margin: 0;}。虽然通配符* 在编写代码的时候非常方便快捷,但如果网站和CSS样式表文件都很大,书写通配符*会把所有的标签都初始化一遍,加大了网站渲染的负担,延后网页加载时间。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/* CSS 初始化 */
/* 标签选择器 */
html, body, ul, li, ol, dl, dd, dt, p, h1, h2, h3, h4, h5, h6,
form, fieldset, legend, img { margin:0; padding:0; }
fieldset, img,input,button { border:none; padding:0;margin:0;outline-style:none; }
ul, ol { list-style:none; }
input { padding-top:0; padding-bottom:0; font-family: "SimSun","宋体";}
select, input { vertical-align:middle; }
select, input, textarea { font-size:12px; margin:0; }
textarea { resize:none; }
img {border:0; vertical-align:middle;}
table { border-collapse:collapse; }
body {
font:12px/150% Arial,Verdana,"\5b8b\4f53";
color:#666;
background:#fff
}
.clearfix:before,.clearfix:after{
content:"";
display:table;
}
.clearfix:after{clear:both;}
.clearfix{
*zoom:1;/*IE/7/6*/
}
a{color:#666; text-decoration:none; }
a:hover{color:#C81623;}
h1,h2,h3,h4,h5,h6{text-decoration:none;font-weight:normal;}
s,i,em{font-style:normal;text-decoration:none;}
.col-red{color: #C81623!important;}

/* 公共类选择器 */
.w{
width: 1210px;margin:0 auto;
}
.fl {
float:left
}
.fr {
float:right
}
.al {
text-align:left
}
.ac {
text-align:center
}
.ar {
text-align:right
}
.hide {
display:none
}

CSS公共样式

<link rel="stylesheet" href="css/common.css">

CSS3函数支持

滤镜函数

filter属性将模糊或颜色偏移等图形效果应用于元素。滤镜通常用于调整图像,背景和边框的渲染。

CSS标准里包含了一些已实现预定义效果的函数。

设置一种函数,方法如下:

1
filter: <filter-function> [<filter-function>]* | none

filter中所有的滤镜函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* URL to SVG filter */
filter: url("filters.svg#filter-id");

/* <filter-function> values */
filter: blur(5px); /*设置高斯模糊*/
filter: brightness(0.4); /*设置明亮度*/
filter: contrast(200%);
filter: drop-shadow(16px 16px 20px blue); /**/
filter: grayscale(50%);
filter: hue-rotate(90deg);
filter: invert(75%);
filter: opacity(25%);
filter: saturate(30%);
filter: sepia(60%);

/* 多种滤镜复合使用 */
filter: contrast(175%) brightness(3%);

/* 全局变量 */
filter: inherit;
filter: initial;
filter: unset;

计算函数

calc() 函数可以在任何定义数值大小的地方进行使用,不同于代码的严格输入要求,CSS支持混合类型输入,即百分比和精确数值混合使用,如 width: calc(100% - 3px); 运算符号支持 + | - | * | / 四则。

CSS3动画效果

过渡

过渡可以为一个元素在不同状态之间切换的时候定义不同的过渡效果。比如在不同的伪元素之间切换,像是 :hover:active 或者通过 JavaScript 实现的状态变化。

transition CSS属性是 transition-propertytransition-durationtransition-timing-functiontransition-delay 的一个简写属性。

transition-property 可设置的参数如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* 关键值 */
transition-property: none;
transition-property: all;
transition-property: test_05;
transition-property: -specific;
transition-property: sliding-vertically;

transition-property: test1;
transition-property: test1, animation4;
transition-property: all, height, all;
transition-property: all, -moz-specific, sliding;

/* 全局变量 */
transition-property: inherit;
transition-property: initial;
transition-property: unset;

PART 3: JavaScript

——吉财

基础知识

简介

优缺点

优点 缺点
1. 减少服务器交互-数据发送到服务器前验证输入,减少流量及计算量
2. 立即反馈给服务者-不必等待页面重载而立即判断输入是否遗漏
3. 交互性增强-各种悬停交互或键盘交互
4. 更丰富的界面-拖放组件或滑块组件使界面更丰富
1. 客户端的JavaScript不允许读取或写入文件,出于安全考虑
2. 不能用于网络应用,不支持此功能
3. 没有任何多线程或多处理器能力

语法

注释

  • // 及随后的文本
  • /**/之间的文本
  • <!-- (HTML注释开始序列)被视为与 // 一致的单行注释
  • HTML注释结束序列 --> 无法被识别为注释

非JavaScript浏览器警告

可以使用<noscript>标记向用户显示缺少JavaScript功能警告。

1
2
3
4
5
6
7
8
9
<script language="javascript" type="text/javascript">
<!--
JavaScript
-->
</script>

<noscript>
Sorry... JavaScript is needed to go ahead.
</noscript>

变量

JavaScript支持三种原始数据类型:Numbers | Strings | Boolean ; 及两种简单数据类型:Null | Undefined

循环

for...in循环

类似于C# / Java中的用法

事件

onclick事件

可以通过在HTML的标签中设置onclick属性,结合JavaScript定义函数来构成 鼠标单击事件

1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
<script type="text/javascript">
function sayHello(){
alert("Hello, World!");
}
</script>
</head>
<body>
<input type="button" onclick="sayHello()" value="say Hello" />
</body>
</html>

进阶知识

PART 4: 网站及框架

——吉财

框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法。另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。

可以说,一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方法,它为构件复用提供了上下文(Context)关系。因此构件库的大规模重用也需要框架。

构件领域框架方法在很大程度上借鉴了硬件技术发展的成就,它是 构件技术软件体系结构研究应用软件开发 三者发展结合的产物。在很多情况下,框架通常以 构件库 的形式出现,但构件库只是框架的一个重要部分。框架的关键还在于框架内对象间的 交互模式控制流模式

框架比构件可定制性强。在某种程度上,将构件和框架看成两个不同但彼此协作的技术或许更好。框架为构件提供重用的环境,为构件处理错误、交换数据及激活操作提供了标准的方法。

应用框架

应用框架并不是包含构件应用程序的小片程序,而是实现了某应用领域通用完备功能(除去特殊应用的部分)的底层服务。使用这种框架的编程人员可以在一个通用功能已经实现的基础上开始具体的系统开发。框架提供了所有应用期望的默认行为的类集合。具体的应用通过重写子类(该子类属于框架的默认行为)或组装对象来支持应用专用的行为。应用框架强调的是软件的设计重用性和系统的可扩充性,以缩短大型应用软件系统的开发周期,提高开发质量。与传统的基于类库的面向对象重用技术比较,应用框架更注重于面向专业领域的软件重用。应用框架具有领域相关性,构件根据框架进行复合而生成可运行的系统。框架的粒度越大,其中包含的领域知识就更加完整。

“框架其实是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。 ”

框架的概念最早起源于Smalltalk环境,其中最著名的框架是Smalltalk 80的用户界面框架MVC(Model-View-Controller)。随着用户界面框架Interviews 【Linton 89】和ET++ 【Weinand 89】 的开发和发布,框架研究越来越受到研究人员的重视。虽然框架研究最初起源于用户界面领域,但它还被成功地应用到其他领域中,如操作系统、火警系统 等。Taligent公司于1992年成立后,框架研究受到了广泛的重视。该公司计划基于框架来开发一个完整的面向对象操作系统。另外,该公司还发布了一套支持快速应用开发的工具集CommonPoint,其中包括了上百个面向对象框架 【Andert 94,Cotter 95】。框架还没有统一的定义,其中Ralph Johnson所给出的定义基本上为大多数研究人员所接受:

一个框架是一个可复用设计,它是由一组抽象类及其实例间协作关系来表达的。

这个定义是从框架内涵的角度来定义框架的,当然也可以从框架用途的角度来给出框架的定义:

一个框架是在一个给定的问题领域内,一个应用程序的一部分设计与实现。

从以上两个定义可以看出,框架是对特定应用领域中的应用系统的部分设计和实现的整体结构。框架将应用系统划分为类和对象,定义类和对象的责任,类和对象如何互相协作,以及对象之间的控制线程。这些共有的设计因素由框架预先定义,应用开发人员只须关注于特定的应用系统特有部分。框架刻画了其应用领域所共有的设计决策,所以说框架着重于设计复用,尽管框架中可能包含用某种程序设计语言实现的具体类。

一个基于框架开发的应用系统包含一个或多个框架,与框架相关的构件类,以及与应用系统相关的功能扩展。与应用系统相关的扩展包括与应用系统相关的类和对象。应用系统可能仅仅复用了面向对象框架的一部分,或者说,它可能需要对框架进行一些适应性修改,以满足系统需求。

面向对象的框架作为一种可复用的软件,在基于框架的软件开发过程中会涉及到框架的开发和利用两个方面的工作。框架的开发阶段在于产生领域中可复用的设计。该阶段的主要结果是框架以及与框架相关的构件类。该阶段的一个重要活动是框架的演变和维护。象所有软件一样,框架也易于变化。产生变化的原因很多,如应用出错,业务领域变化,等等。

不论是哪一种技术,最终都是为业务发展而服务的。从业务的角度来讲。首先,框架的是为了企业的业务发展和战略规划而服务的,他服从于企业的愿景;其次,框架最重要的目标是提高企业的竞争能力,包括降低成本、提高质量、改善客户满意程度,控制进度等方面。最后,框架实现这一目标的方式是进行有效的知识积累。软件开发是一种知识活动,因此知识的聚集和积累是至关重要的。框架能够采用一种结构化的方式对某个特定的业务领域进行描述,也就是将这个领域相关的技术以代码、文档、模型等方式固化下来。

MVC 框架

即 Model-View-Control 三层框架。

MVVM 框架

即 Model-View-ViewModel,一个软件架构设计模式。由微软 WPF 和 Silverlight 的架构师 Ken Cooper 和 Ted Peters 开发,是一种简化用户界面的事件驱动编程方式。由 John Gossman(同样也是 WPF 和 Silverlight 的架构师)于2005年在他的博客上发表。

MVVM 源自于经典的 Model–View–Controller(MVC)模式(期间还演化出了 Model-View-Presenter(MVP)模式,可忽略不计)。

MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。

当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。ViewModel 层,它就像是一个中转站(value converter),负责转换 Model 中的数据对象来让数据变得更容易管理和使用,该层向上与视图层进行双向数据绑定,向下与 Model 层通过接口请求进行数据交互,起呈上启下作用。如下图所示:

20210219-02

MVVM框架详解

20210219-01

View Level

View 是视图层,也就是用户界面。前端主要由 HTML 和 CSS 来构建,为了更方便地展现 ViewModel 或者 Model 层的数据,已经产生了各种各样的前后端模板语言,比如 FreeMarker、Marko、Pug、Jinja2等等,各大 MVVM 框架如 KnockoutJS,Vue,Angular 等也都有自己用来构建用户界面的内置模板语言。

Model Level

Model 是指数据模型,泛指后端进行的各种业务逻辑处理和数据操控,主要围绕数据库系统展开。

ViewModel Level

ViewModel 是由前端开发人员组织生成和维护的视图数据层。在这一层,前端开发者对从后端获取的 Model 数据进行转换处理,做二次封装,以生成符合 View 层使用预期的视图数据模型。

注意:

  • ViewModel 所封装出来的数据模型包括视图的状态和行为两部分,而 Model 层的数据模型是只包含状态的(比如页面的这一块展示什么,那一块展示什么这些都属于视图状态(展示),而页面加载进来时发生什么,点击这一块发生什么,这一块滚动时发生什么这些都属于视图行为(交互)),视图状态和行为都封装在了 ViewModel 里。

  • 这样的封装使得 ViewModel 可以完整地去描述 View 层。由于实现了双向绑定,ViewModel 的内容会实时展现在 View 层,这是激动人心的,因为前端开发者再也不必低效又麻烦地通过操纵 DOM 去更新视图,MVVM 框架已经把最脏最累的一块做好了,我们开发者只需要处理和维护 ViewModel,更新数据视图就会自动得到相应更新,真正实现数据驱动开发。

  • View 层展现的不是 Model 层的数据,而是 ViewModel 的数据,由 ViewModel 负责与 Model 层交互,这就完全解耦了 View 层和 Model 层,这个解耦是至关重要的,它是前后端分离方案实施的重要一环。

意义:

MVVM用接口实现了前后端数据的通信,这样可以使前后端之间的业务逻辑没有什么关系,促进了 GUI 前端开发与后端业务逻辑的分离, 极大地提高了前端开发效率

MVVM框架编程实例

Vue 的 View 模板:

1
2
3
4
5
<div id="app">
<p>{{message}}</p>
<button v-on:click="showMessage()">Click me</button>
</div>

Vue 的 ViewModel 层(下面是伪代码):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var app = new Vue({
el: '#app',
data: { // 用于描述视图状态(有基于 Model 层数据定义的,也有纯前端定义)
message: 'Hello Vue!', // 纯前端定义
server: {}, // 存放基于 Model 层数据的二次封装数据
},
methods: { // 用于描述视图行为(完全前端定义)
showMessage(){
let vm = this;
alert(vm.message);
}
},
created(){
let vm = this;

// Ajax 获取 Model 层的数据
ajax({
url: '/your/server/data/api',
success(res){
// TODO 对获取到的 Model 数据进行转换处理,做二次封装
vm.server = res;
}
});
}
})

服务端的 Model 层(省略业务逻辑处理,只描述对外接口):

1
2
3
4
5
6
7
8
{
"url": "/your/server/data/api",
"res": {
"success": true,
"name": "IoveC",
"domain": "www.cnblogs.com"
}
}

名词解释

渐进式


指VUE.JS并未强制开发者一定要使用哪种方式进行开发,更不必严格按照规矩来开发(较Angular、React),适用于开发水平不尽相同的团队,其只是提供了视图层(View Level),对于底层的开发方式还是提供了很多选择。

“资料非常多,规则非常多,你要用它开发,你就必须使用它的开发规则,像模块机制、依赖注入及组件的定义,你都得按它的来,不然开发过程中就会有很多坑等着你。”

——对Angular的评价

“你必须要有优秀的函数式编程思想,能把业务很好的映射到函数式编程的理念,……,对于刚接触这个框架的新人来说,如果在没有人或者架构师去详细跟他们讲解公司里react项目框架细节情况的前提下,直接拿着公司项目框架来进行业务模型、逻辑组件开发或者是快速开发,结果可能是非常糟糕的。”

——对React的评价

响应式


此概念于2010年5月由国外著名网页设计师Ethan Marcotte所提出。

响应式网站设计(Responsive Web design)的理念是:

页面的设计与开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相应的响应和调整。具体的实践方式由多方面组成,包括弹性网格和布局、图片、CSS media query的使用等。无论用户正在使用笔记本还是iPad,我们的页面都应该能够自动切换分辨率、图片尺寸及相关脚本功能等,以适应不同设备;换句话说,页面应该有能力去自动响应用户的设备环境。

响应式网页设计就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。这样,我们就可以不必为不断到来的新设备做专门的版本设计和开发了。 [1]

响应式网站设计是一种网络页面设计布局,其理念是:集中创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境进行相对应的布局。

目前流行的9大前端框架


1.Vue

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

2.React

React 是一个用于构建用户界面的 JAVASCRIPT 库。React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图)。React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源。React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它。

3.Angular

AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的是:MVVM、模块化、自动化双向数据绑定、语义化标签、依赖注入等等。

4.QucikUI

QucikUI 4.0是一套完整的企业级web前端开发解决方案,由基础框架、UI组件库、皮肤包、示例工程和文档等组成。底层基于jquery构建。使用QucikUI 开发者可以极大地减少工作量,提高开发效率,快速构建功能强大、美观、兼容的web应用系统。

5.Layui

layui(谐音:类UI) 是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用。其外在极简,却又不失饱满的内在,体积轻盈,组件丰盈,从核心代码到 API 的每一处细节都经过精心雕琢,非常适合界面的快速开发。layui 首个版本发布于2016年金秋,她区别于那些基于 MVVM 底层的 UI 框架,却并非逆道而行,而是信奉返璞归真之道。准确地说,她更多是为服务端程序员量身定做,你无需涉足各种前端工具的复杂配置,只需面对浏览器本身,让一切你所需要的元素与交互,从这里信手拈来。

6.Avalon

avalon2是一款基于虚拟DOM与属性劫持的 迷你、 易用、 高性能 的 前端MVVM框架, 拥有超优秀的兼容性, 支持移动开发, 后端渲染, WEB Component式组件开发, 无需编译, 开箱即用。

7.Dojo

Dojo致力于实现最大的互操作性。Web组件提供了一种机制,可以在Dojo应用程序中利用非Dojo组件,并在非Dojo应用程序中轻松使用基于Dojo的小部件。Dojo为Web组件提供一流的支持。您今天做出的决定不应该将您锁定在未来的决策中。

8.Ember

Ember.js可能是最固执己见的主流框架,这也是其最大的优势。它有创建Ember.js应用程序的正确方法,通常只有一种方法来创建应用程序。Ember.js更类似于一个产品或平台,在那里你会到一个供应商的长期支持和维护。Ember.js提供了对其平台的全面版本管理,升级工具以及对API升级的强大指导和工具。成熟,是对Ember.js的一个很好的总结。

9.Aurelia Aurelia是一个令人惊叹的框架,它在不牺牲功能的情况下采用简单而干净的代码。在本教程中,我们将通过构建“Todo”应用程序向您介绍Aurelia的简单性。您将看到应用程序代码的简洁程度,您将学习Aurelia的几个基本概念和功能。

Web前端js框架有哪些


MobX

MobX 支持单向数据流,也就是动作改变状态,而状态的改变会更新所有受影响的视图。

当状态改变时,所有衍生都会进行原子级的自动更新。因此永远不可能观察到中间值。

Ractive.js

active最初是在The Guardian http://theguardian.com上创建的,用于制作新闻应用程序。典型的新闻应用是高度互动的,结合了HTML和SVG,并且是在极端的最后期限压力下开发的。它必须跨浏览器可靠地工作,即使在移动设备上也能很好地运行。

WebRx

WebRx是一个基于浏览器的MVVM-Framework,它将功能反应编程与声明性数据绑定,模板和客户端路由相结合。

该框架构建于ReactiveX for Javascript(RxJs)之上,它是一组功能强大的库,用于处理和查询异步数据流,这些数据流可以来自不同的来源,如Http-Requests,Input-Events,Timers等等。

Deku

Deku是一个使用纯函数和虚拟DOM渲染接口的库。

Deku只使用函数并将所有状态管理和副作用的责任推送到像Redux这样的工具,而不是使用类和本地状态。它还旨在仅支持现代浏览器以保持简单。

Roit.js

Riot为所有现代浏览器带来了自定义组件。它旨在为您提供Web组件API所需的所有本机

Mithril

用于构建单页应用程序的现代客户端Javascript框架。它很小(9.55 KB gzip),速度快,提供开箱即用的路由和XHR实用程序。

jQuery

Query是一个快速,小巧,功能丰富的JavaScript库。它通过易于使用的API在大量浏览器中运行,使得HTML文档遍历和操作,事件处理,动画和Ajax变得更加简单。通过多功能性和可扩展性的结合,jQuery改变了数百万人编写JavaScript的方式。

React

React 组件使用一个名为 render() 的方法,接收输入的数据并返回需要展示的内容。在示例中这种类似 XML 的写法被称为 JSX。被传入的数据可在组件中通过 this.props 在 render() 访问。

Polymer

Polymer 库提供用于创建自定义元素的一组功能。这些功能的设计,使其更容易、更快地创建像标准的 DOM 元素一样工作的自定义元素。

Node.js

Node.js®是基于Chrome的V8 JavaScript引擎构建的JavaScript运行时。

Meteor

Meteor是一个用于构建现代Web应用程序的超简单环境。

D3.js

D3.js是一个用于根据数据操作文档的JavaScript库。D3可帮助您使用HTML,SVG和CSS将数据变为现实。D3对Web标准的强调为您提供了现代浏览器的全部功能,而无需将自己与专有框架联系起来,将强大的可视化组件和数据驱动方法结合到DOM操作中。

Ember

Ember.js是一个JavaScript框架,可以大大减少构建任何Web应用程序所需的时间,精力和资源。它致力于通过执行大多数Web开发项目中涉及的所有常见,重复但必不可少的任务,使您(开发人员)尽可能高效地工作。

Aurelia

Aurelia是一个现代的前端JavaScript框架,用于构建浏览器,移动和桌面应用程序。它侧重于与Web平台规范紧密结合,使用约定优于配置,并具有最小的框架入侵。

Knockout

Knockout是一个JavaScript MVVM(MVC的现代变体)库,可以更轻松地使用JavaScript和HTML创建丰富的,类似桌面的用户界面。它使用观察器使您的UI自动与底层数据模型保持同步,以及一组功能强大且可扩展的声明性绑定,以实现高效的开发。

Keystore

KeystoneJS是一个功能强大的Node.js内容管理系统和基于Express Web框架和Mongoose ODM构建的Web应用程序框架。Keystone可以轻松创建复杂的网站和应用程序,并附带一个漂亮的自动生成的管理UI。

Backbone

Backbone.js的提供给结构的Web应用程序的模型与键值绑定和自定义事件, 收集与枚举功能丰富的API, 观点与陈述事件处理,而这一切在一个RESTful JSON接口连接到现有的API。

Zepto

Zepto是一个用于现代浏览器的极简主义JavaScript库,具有与jQuery兼容的API。

网站相关知识

静态网站与动态网站

静态网站

特性
  1. 静态网站是最初的建站方式,浏览者所看到的每个页面是建站者上传到服务器上的一个 html ( htm )文件,这种网站每增加、删除、修改一个页面,都必须重新对服务器的文件进行一次下载上传。网页内容一经发布到网站服务器上,无论是否有用户访问,每个静态网页的内容都是保存在网站服务器上的,也就是说,静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件;
  2. 静态网页的内容相对稳定,因此容易被搜索引擎检索;
  3. 静态网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作方式比较困难;
  4. 静态网页的交互性较差,在功能方面有较大的限制。

动态网站

  1. 交互性:网页会根据用户的要求和选择而动态地改变和响应,浏览器作为客户端,成为一个动态交流的桥梁,动态网页的交互性也是今后 Web 发展的潮流。

  2. 自动更新:即无须手动更新 HTML 文档,便会自动生成新页面,可以大大节省工作量。

  3. 因时因人而变:即当不同时间、不同用户访问同一网址时会出现不同页面。

动态网站在页面里嵌套了程序,这种网站对一些框架相同,更新较快的信息页面进行内容与形式的分离,将信息内容以记录的形式存入了网站的数据库中,以便于网 站各处的调用。这样,我们看到的一个页面,可能在服务器上不一一对应某个 html 的文件了,网页框架里套了很多数据库里的记录中的内容。此外动态网页是与静态网页相对应的,也就是说,网页 URL 的后缀不是 .htm.html.shtml.xml 等静态网页的常见形式,而是以 .asp.jsp.php.perl.cgi 等形式为后缀。

这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的 “ 动态效果 ” 没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,采用动态网站技术生成的网页都称为动态网页。

静态或动态的选择

对于一个业务稳定,页面变化频率不大的公司来说,静态网站是一个很好的选择。因为不用开发后台程序,报 价会便宜很多。对于一个公司规模比较大的公司来说,可能经常会有动态信息要发布给浏览者,可以考虑用动态网站的后台来管理网站信息。

服务器端运行状态区别

静态服务器

动态服务器-没有数据库

动态服务器-有数据库

动态服务器-多个数据库

动态服务器-负载均衡

网站制作流程

  1. 网站功能书编写
  2. 网站原型图设计
  3. 网站效果图制作
  4. 网站搭建(前后端同步)

Vue.js

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

Reference

  1. 官方网站:http://cn.vuejs.org/

  2. 视频教程:https://learning.dcloud.io/#/

专利基础

专利概述

  1. 专利的特点、作用
  2. 我国专利制度概述
  3. 专利基础知识点

知识产权分类

知识产权分为 工业产却著作权 两大类,而工业产权又分为 专利商标 等。其中,专利分为 发明专利实用新型专利外观设计专利 三类。

graph LR
    知识产权 --> 工业产权 --> 专利
    工业产权 --> 商标
    工业产权 --> 集成电路布图设计
    工业产权 --> 植物新品种
    知识产权 --> 著作权
    专利 --> 发明专利
    专利 --> 实用新型专利
    专利 --> 外观设计专利

知识产权特点

  • 无形性:客体无形、载体有形
  • 独占性:专属于权利人,经其同意或法律规定外,任何人不得享有或行使该权利。
  • 时间性:法律对各项知识产权保护都有一定有效期。
  • 地域性:只在所确认和保护的地域内有效。除了签订有国际公约或双边互惠协定外,经一国法律所保护的某项权利只在该国范围内发生法律效力。

专利权

  • 发明创造的合法所有人依法对其发明享有的独占权。
  • 国家主管机关依法授予申请人(或发明人)的,在一定期限内禁止他人未经允许实施其专利的权利。

专利制度作用

  • 鼓励发明创造,促进创新
  • 传播技术信息,推动发明创造的应用和推广
  • 促进科学进步和经济发展
  • 构建良好的竞争秩序,激励创新
  • 创建良好的投资环境,吸引投资和先进技术

专利制度宗旨

  • 为了保护专利权人的合法权益
  • 鼓励发明创造
  • 推动发明创造的应用
  • 提高创新能力,促进科学技术进步和经济社会发展

专利保护

专利相关法律

1984年3月12日,全国人大常委会表决通过专利法

1985年04月01日,《中华人民共和国专利法》实施

现今适用法律、法规:

《专利法》 、《专利法实施细则》、 《专利审查指南》

《专利法》的篇章结构 共8章 76条

第一章 总则 21条; 第二章 授予专利权的条件 4条; 第三章 专利的申请 8条; 第四章 专利申请的审查和批准 8条; 第五章 专利权的期限、终止和无效 6条; 第六章 专利实施的强制许可 11条; 第七章 专利权的保护 16条; 第八章 附则 2条

《专利法实施细则》作为专利法的配套行政法规,经国务院批准于1985年1月19日公布,1985年4月1日与专利法一同实施。 目前细则条文总共11章,123条。

专利保护的对象和期限

类型 定义 保护年限
发明 产品、方法 或其改进提出的 新的技术方案 20
实用新型 产品的形状、构造 或者其结合提出的适于实用新的技术方案 10
外观设计 产品的形状、图案 或者其 形状与图案的结合以及色彩与形状、图案的结合所作出富有美感的并适于工业应用新设计 10

专利审查

专利审查机关

国家知识产权局 统一受理和审查专利申请,依法授予专利权。

涉及国防利益需要保密的专利申请,由 国防专利机构 受理并进行审查。

专利审查制度

发明 专利采用 实审制(发明初审公布后,需经实质审查,审查其是否符合专利法的相关规定,发现没有驳回理由的,应当公告授予专利权)。其 正常流程 为,自申请日(有优先权的指优先权日)起18个月公布,申请日(有优先权的指优先权日)起3年内提实审。其加快流程 为,初审、公布、实审、授权,大概2-3个月公布,最快1年内授权。

实用新型 采用 初审制(初审合格即公告授权,不进行实质审查),最快需要3-4个月授权公告。

外观设计采用 初审制

技术淘汰快的最好申请实用新型;技术淘汰慢的最好申请发明

专利权授予条件

对于发明与实用新型专利,应当具 新颖性创造性实用性 三大条件。

新颖性 是指不属于现有技术,也没有抵触申请的新技术,即是否处在一样的技术,是否有区别。创造性 是指非显而易见性,即区别是否足够大。实用性 是指能够在制造和使用上产生积极效果。

现有技术 的定义是:自申请日以前在国内外为公众所知的技术。包括出版物公开、使用公开、其他方式公开。

授予专利权的发明和实用新型,应当具备新颖性、创造性和实用性。新颖性,是指该发明或者实用新型不属于现有技术;也没有任何单位或者个人就同样的发明或者实用新型在申请日以前向国务院专利行政部门提出过申请,并记载在申请日以后公布的专利申请文件或者公告的专利文件中。创造性,是指与现有技术相比,该发明具有突出的实质性特点和显著的进步,该实用新型具有实质性特点和进步。实用性,是指该发明或者实用新型能够制造或者使用,并且能够产生积极效果。本法所称现有技术,是指申请日以前在国内外为公众所知的技术。

——《专利法》第22条

现行专利法——绝对新颖性原则

且以上专利授予条件 必须满足 “不属于《专利法》第法5、9及25条等其他不授予的情况”。

专利权保护范围

发明/实用新型 专利权的保护范围以其 权利要求的内容为准,说明书及附图可以用于解释权利要。

外观设计 专利权的保护范围以表示在图片或者照片中的该产品的外观设计为准,简单说明可以用于解释图片或者照片所表示的该产品的外观设计。

专利意识

统计显示,全世界90%以上的技术信息都将通过专利信息公开。充分利用专利信息,避免重复研发。

专利布局工作能够使我们的研发成果得到全面的保护,避免竞争对手抄袭,通过专利手段提升我司产品的市场份额。

侵权排查与无效规避是我们工作中不可逾越的红线,一旦越过红线,将导致我司产品无法上市,所有的研发心血付诸东流。

image-20210417091043022

image-20210417091131935

image-20210417091222349

image-20210417091245709

image-20210417091430726

image-20210417091604437

格力专利制度

  1. 我司专利团队架构

  2. 我司知识产权管理办法

  3. 我司知识产权相关活动

  4. 我司知识产权荣誉

image-20210417091758176

image-20210417091832811

专利管理办法

我司知识产权管理办法 QG0203.07-02

我司专利管理办法 QG0203.06-03

职务发明

执行本单位的任务 或者主要是利用本单位的物质技术条件所完成的发明创造为职务发明创造。职务发明创造申请专利的权利属于该单位;申请被批准后,该单位为 专利权人

管理办法中对人员的定义如下:

image-20210417092038416

执行本公司的任务”完成的智力劳动成果定义:

  • 在本职工作中取得的智力劳动成果,即在执行科研计划(含补充计划和临时计划)课题和合同计划课题,完成计划创作任务和设计任务,实施技术改造工程或履行其他所在岗位职责的过程中所取得的智力劳动成果。包括但不限于公司所派的项目和各项目组自己提出的项目所产生的劳动成果。动

  • 履行本公司交付的本职工作之外的任务所取得的智力劳动成果。

  • 离休、退休、辞退或调离工作后一年内做出的与其在本公司承担的本职工作或本公司分配的任务有关的智力劳动成果。

利用公司物质技术条件”完成的智力劳动成果定义:

利用本公司资金、设备、原材料、试验条件、场地或者不对外公开的技术资料、图纸及其说明、声像材料等等。

利用本公司的名义”定义:

在经济技术合同中使用本公司名称。

享受本单位的待遇”定义:

指自选课题、自筹资金、自立项目,但在工作时间内完成的智力劳动成果。

格力专利务实操作基础知识

  1. 我司专利申请流程
  2. 我司知识产权管理系统操作方法
  3. 我司一级专利评定及标准
  4. 我司发明人及专利权人变更相关注意事项

image-20210417092724954

image-20210417092937790

image-20210417093010187

image-20210417093053523

image-20210417094700862

专利撰写准备

专利新创性

据《专利法》二十二条第二款,新颖性:

是指该发明或者实用新型不属于现有技术;也没有任何单位或者个人就 同样的发明或者实用新型向国务院专利行政部门提出过申请,并且记载在申请日以后公布的专利申请文件中或者公告的专利文件中。

据《专利法》二十二条第三款,创造性:

是指与现有技术相比,该发明具有突出的实质性特点显著的进步,该实用新型有 实质性特点和进步

抵触申请

是指损害新颖性的专利申请。具体是指在申请日以前,任何单位或个人就同样的技术已向专利行政部门提出过申请,并且记载在申请日以后公布的专利申请文件或者公告的专利文件中,那么这一申请就被称之为 专利申请的抵触申请

——百度百科

image-20210417100345018

审查原则

1、单独对比原则,即每项权利要求与单独一项现有技术(或抵触申

请)进行对比。

2、整体原则(四相同):

(1)技术方案(实质)相同;

(2)能够适用相同的 技术领域、解决相同的 技术问题、并且具有相

同的 预期效果

——《专利审查指南》

从权利要求书上的每一条逐条与现有技术进行比对,此为 单独比对原则

整体比对原则 是指从 技术方案(的实质)技术领域技术问题预期效果 上进行全方面比对。如果全都相同,则说明该专利方案不具有新颖性。

本领域技术人员要求

  • 知晓申请日或者优先权日之前发明所属技术领域所有的普通技术知识;
  • 能够获知该领域中所有的现有技术;
  • 具有应用该日期之前常规实验手段的能力,但他不具有创造能力;
  • 如果所要解决的技术问题能够促使本领域的技术人员在其他技术领域寻找技术手段,他也应具有从该其他技术领域中获知该申请日或优先权日之前的相关现有技术、普通技术知识和常规实验手段的能力。

突出的实质性特点

突出的实质性特点,是指对所属技术领域的技术人员来说,发明相对于现有技术是 非显而易见 的。如果发明是所属技术领域的技术人员在现有技术的基础上仅仅通过合乎逻辑的分析、推理或者有限的试验可以得到的,则该发明是显而易见的,也就不具备突出的实质性特点

无论如何发明出来的专利一定是具有实用性的,也就是有用的,这种有用会体现在实际解决的技术问题上,对于某项发明解决的问题应该明确描述。

判断方法:

  1. 确定最接近的现有技术
  2. 确定发明的区别技术特征和发明实际解决的技术问题
  3. 判断要求保护的发明对本领域的技术人员来说是否显而易见

显著的进步

发明有显著的进步,是指发明与现有技术相比能够产生有益的技术效果。

  • 发明与现有技术相比具有 更好的技术效果,例如,质量改善、产量提高、节约能源、防治环境污染等;
  • 发明提供了一种 技术构思不同的方案,其技术效果能够基本上达到现有技术的水平;
  • 发明代表某种 新技术发展趋势
  • 尽管发明在某些方面有负面效果,但在其他方面具有 明显积极的技术效果

发明的分类

开拓性发明,是指一种全新的技术方案,在技术史上未曾有过先例,它为人类科学技术在某个时期的发展开创了新纪元。开拓性发明同现有技术相比,具有突出的实质性特点和显著的进步,具备创造性。

组合发明,是指将某些技术方案进行组合,构成一项新的技术方案,以解决现有技术客观存在的技术问题。在进行组合发明创造性的判断时通常需要考虑:组合后的各技术特征在功能上是否彼此相互支持、组合的难易程度、现有技术中是否存在组合的启示以及组合后的技术效果等。

选择发明,是指从现有技术中公开的宽范围中,有目的地选出现有技术中未提到的窄范围或个体的发明。在进行选择发明创造性的判断时,选择所带来的预料不到的技术效果是考虑的主要因素。

  1. 如果发明仅是从一些已知的可能性中进行选择,或者发明仅仅是从一些具有相同可能性的技术方案中选出一种,而选出的方案未能取得预料不到的技术效果,则该发明不具备创造性。
  2. 如果发明是在可能的、有限的范围内选择具体的尺寸、温度范围或者其他参数,而 这些选择可以由本领域的技术人员通过常规手段得到并且没有产生预料不到的技术效果, 则该发明不具备创造性。
  3. 如果发明是可以从现有技术中直接推导出来的选择,则该发明不具备创造性。
  4. 如果选择使得发明取得了预料不到的技术效果,则该发明具有突出的实质性特点和显著的进步,具备创造性。

转用发明,是指将某一技术领域的现有技术转用到其他技术领域中的发明。在进行转用发明的创造性判断时通常需要考虑:转用的技术领域的远近、是否存在相应的技术启示、转用的难易程度、是否需要克服技术上的困难、转用所带来的技术效果等

  1. 如果转用是在类似的或者相近的技术领域之间进行的,并且未产生预料不到的技术效果,则这种转用发明不具备创造性。
  2. 如果这种转用能够产生预料不到的技术效果,或者克服了原技术领域中未曾遇到的困难,则这种转用发明具有突出的实质性特点和显著的进步,具备创造性。

已知产品的新用途发明,是指将已知产品用于新的目的的发明。在进行已知产品新用途发明的创造性判断时通常需要考虑:新用途与现有用途技术领域的远近、新用途所带来的技术效果等。

  1. 如果新的用途仅仅是使用了已知材料的已知的性质,则该用途发明不具备创造性。
  2. 如果新的用途是利用了已知产品新发现的性质,并且产生了预料不到的技术效果,则这种用途发明具有突出的实质性特点和显著的进步,具备创造性。

要素变更的发明,包括 要素关系改变的发明要素替代的发明要素省略的发明 。在进行要素变更发明的创造性判断时通常需要考虑:要素关系的改变、要素替代和省略是否存在技术启示、其技术效果是否可以预料等。

要素关系改变的发明,是指发明与现有技术相比,其形状、尺寸、比例、位置及作用关系等发生了变化

  1. 如果要素关系的改变没有导致发明效果、功能及用途的变化,或者发明效果、功能及用途的变化是可预料到的,则发明不具备创造性。
  2. 如果要素关系的改变导致发明产生了预料不到的技术效果,则发明具有突出的实质性特点和显著的进步,具备创造性

要素替代的发明,是指已知产品或方法的某一要素由其他已知要素替代的发明。

  1. 如果发明是相同功能的已知手段的等效替代,或者是为解决同一技术问题,用已知最新研制出的具有相同功能的材料替代公知产品中的相应材料,或者是用某一公知材料替代公知产品中的某材料,而这种公知材料的类似应用是已知的,且没有产生预料不到的技术效果,则该发明不具备创造性。
  2. 如果要素的替代能使发明产生预料不到的技术效果,则该发明具有突出的实质性特点和显著的进步,具备创造性。

要素省略的发明,是指省去已知产品或者方法中的某一项或多项要素的发明。

  1. 如果发明省去一项或多项要素后其功能也相应地消失,则该发明不具备创造性。
  2. 如果发明与现有技术相比,发明省去一项或多项要素(例如,一项产品发明省去了一个或多个零、部件或者一项方法发明省去一步或多步工序) 后,依然保持原有的全部功能,或者带来预料不到的技术效果,则具有突出的实质性特点和显著的进步,该发明具备创造性。

专利文件

专利文件结构

  1. 著录项:包括:公开号、公告/公布日、申请号、申请日、专利权人/ 申请人、发明人、专利代理机构、代理人、分类号等。
  2. 摘要及摘要附图
  3. 权利要求书
  4. 说明书及说明书附图
  • 扉页:著录项、摘要、附图,快速获取信息
  • 权利要求书:以说明书为依据,清楚限定专利保护范围
  • 说明书:背景技术、发明内容、具体实施方式、附图

image-20210417110814683

image-20210417110835219

image-20210417110846476

专利文件阅读技巧

  • 看技术方案,即 说明书 中的具体实施方式。
  • 看结构,即 说明书 附图。
  • 看保护范围,即 权利要求书 如何描述。
  • 看本发明有益效果,即 摘要
  • 看本发明要解决的技术问题,即 说明书 背景技术部分及 发明内容 的第一段。

无效对比与分析

image-20210417111224516

无效宣告请求的理由,是指被授予专利的发明创造不符合专利法第二条、第二十条第一款、第二十二条、第二十三条、第二十六条第三款、第四款、第二十七条第二款、第三十三条或者本细则第二十条第二款、第四十三条第一款的规定,或者属于专利法第五条、第二十五条的规定,或者依照专利法第九条规定 (而)不能取得专利权

image-20210417111400147

专利撰写实践

专利检索

  1. 基本知识
  2. 检索方法
  3. 检索技巧
  4. 常用检索数据库

基本知识

指从用户特定的信息需求出发,对特定的信息集合采用一定的方法、 技术手段,根据一定的线索与规则从中找出相关信息。

专利检索 是根据一项或多项特征,从海量专利文献或专利数据库中挑选出符合某一特定要求的文献或信息的过程。

检索方法

image-20210419101550917

检索技巧

常用检索数据库

专利提案书

提案书是发明人将发明内容清晰、完整地传达给 专利管理员代理人 的文书。而 清楚、完整 是指使用所属技术领域的技术术语,明确表达想做什么和如何 去做,使得所属技术领域的技术人员能够实现该方案。

image-20210417111740858

提案书架构

  • 发明创造名称
  • 背景技术
  • 解决的技术问题及有益效果
  • 发明点
  • 附图
  • 最优实施方式

发明创造名称

应清楚、简要、全面地反映要求保护的发明创造的主题和类型。一件专利申请 可以同时包含产品和方法,如《空调器除霜系统及除霜控制方法》

其中,主题 是指专利所要求保护的技术内容,而 类型 是指要求保护的是产品还是方法

注意:避免使用“技术”、“设计”等笼统且抽象的术语。

错误示例
  • 柜机新增缺氟保护功能
  • 空调主动降噪技术
  • 吸气管减振结构设计
  • 一种可以在导电材料面上实现的触摸检测技术
  • 智能功率模块的集成设计及结构实现
  • 一种提升PCB抗冲击的结构方案
正确示例
  • 柜式空调器的缺氟保护方法
  • 空调器的主动降噪方法和降噪系统
  • 具有圆弧段减震结构的吸气管
  • 金属电容式触摸键盘
  • 集成PFC电路和逆变电路的智能功率模块
  • 一种具有缓冲部件的电器盒及电器盒组件

背景技术

撰写原则
  • 应当系统、全面地介绍对本申请的理解和检索有用的现有技术。
  • 有相关专利文献(或科技文献)的,请 给出引证的专利号(或文献编号)。
  • 通过分析推理,说明现有技术中存在的问题和缺点(仅限于由本申请 的技术方案能解决的),其产生的原因和解决问题时曾遇到的困难
注意事项
  1. (不能满足则被认为没有引证) 所引证的非专利文件和外国专利文件的公开日应当在本申 请的申请日之前;
  2. 所引证的中国专利文件的公开日不能晚于本申请的公开日。
  3. 现有技术中的技术问题分析不到位时,将导致审查员低估专利的新创性高度。建议介绍一下发现问题的过程,以及发现问题过程的难度,进而结合到具体的现有技术通过推理的方式阐述技术问题产生的原因。
错误示例

image-20210417113935138

优秀示例

image-20210417113847130

解决的技术问题及有益效果

技术问题
  • 正面直接、清楚、客观地指出要解决的问题;
  • 技术问题应该是背景技术中存在的技术问题;
  • 可以同时解决多个技术问题,也可以解决一个技术问题,也可以多个方 案解决多个技术问题

image-20210417133524015

有益效果

有益效果是指与背景技术相比具有的有益效果。

  • 应当通过对本申请结构特点的分析和理论说明相结合,或者通过列出实 验数据(给出必要实验条件和方法)的方式,说明与背景技术的区别以 及由该区别所取得的有益效果,不得只断言具有有益效果。
  • 有益效果可以由产率、质量、精度和效率的提高,能耗、原材料、工序 的节省,加工、操作、控制、使用的简便,环境污染的治理以及有用性 能的出现等方面反映出来

image-20210417133718557

image-20210417133700056

有益效果的作用

有益效果是确定 发明 是否具有 “显著进步” 的重要依据,是确定 实用新型 是否具有 “进步” 的重要依据!

举例

设备、装置等结构类: 通过说明增加或者改进了哪些部件,给出机械运动过程,给出推理过 程,围绕需要解决的问题做技术上的说明。

控制方法、工艺等方法类: 重点介绍增加或者改进了哪个步骤,给出为什么可以实现预期效果, 给出推理过程,围绕需要解决的问题做技术上的说明。

发明点

发明点,即本申请相对于背景技术改进的技术点,该技术点是 解决前述技术问题的关键;

简明扼要,突出重点,根据重要程度一一列举改进的技术点。

举例

一项关于空调器清洁杀菌方法的发明,技术方案是通过控制空调按 凝露、结霜、化霜、高温杀菌步骤完成清洁杀菌。

发明点列举:

  1. 杀菌控制方法;

  2. 高压保护;

  3. 低压保护。

附图

附图部分,应当提供可编辑的附图(CAD、VISIO等),写明各附图的图名

结构类附图 最好能够 提供立体图及爆炸图,标号表明各部件

模块框图 需要 描述清楚各个模块的名称及连接关系

照片仅能起到帮助理解方案的作用,在专利申请文件中一般不能使用

image-20210419092202673

image-20210419092228518

具体实施方式

  • 围绕发明点,结合附图详细地描述技术方案,所有附图都应详 细描述,以不看附图即可明白技术方案为准;
  • 对采用的技术手段逐一描述有益效果;
  • 用词规范,含义明确

针对各类提案书的书写建议

产品、装置类技术方案
  • 首先,描述产品整体构造;

  • 其次,详细描述关键改进部分的具体构造;

  • 最后,说明动作过程和工作原理

注意:尽可能详细地描述各个部件之间的连接关系及位置关系。

方法类技术方案
  • 描述具体的实现流程;

  • 描述方式:通过XX设备执行了XX动作/操作,达到了XX条件/目的;

  • 详细介绍方法的步骤构成,各步骤间的关系,工艺参数等

电子类技术方案
  • 描述电子产品的元器件、部件,相互配置关系,以及各器件/部件在整个产品中的功能

举例

例1:产品类 技术方案

首先,描述产品整体构造。

image-20210419093156426

其次,详细描述关键改进部分的具体构造

image-20210419093239539

image-20210419093255210

最后,说明动作过程和工作原理

image-20210419093337481

image-20210419093524237

image-20210419093534973

实施例撰写准则

  • 实施例中,不仅要对技术方案所涉及的各技术特征进行具体描述,还要对有助于理解本发明创造的相关内容进行具体描述。例如:产品的制造过程及设备、原料来源、使用方法等;方法的实施设备、使用范围等。
  • 技术内容保证详实、实质性的描述,切忌只有功能性描述,而无实现该功能的具体技术方案。
  • 如果涉及公式,需要写出具体的公式形式,并给出公式中的每个参数的物理含义。
  • 如果涉及到实验,请尽量提供实验数据(以表格形式)或实验过程,通过实验数据支撑实验结果。
  • 如果涉及到算法,需以步骤形式写出具体的算法逻辑规则。如果是现有算法,请采用业内通用名称,并简单介绍算法原理;若非现有算法,请详细介绍算法原理。

实施例拓展

《专利审查指南》规定:

  • 当专利要求保护范围较宽时,应当给出至少两个不同的实施例,以支持要求保护的范围。
  • 专利的改进涉及数值范围时,通常应当给出两端值的实施例,范围较宽时,还应当给出至少一个中间值的实施例。

提案书内核标准

image-20210419094300129

1 – SYSTEM INFORMATION

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# Display Linux system information
uname -a

# Display kernel release information
uname -r

# Show which version of redhat installed
cat /etc/redhat-release

# Show how long the system has been running + load
uptime

# Show system host name
hostname

# Display the IP addresses of the host
hostname -I

# Show system reboot history
last reboot

# Show the current date and time
date

# Show this month's calendar
cal

# Display who is online
w

# Who you are logged in as
whoami

2 – HARDWARE INFORMATION

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Display messages in kernel ring buffer
dmesg

# Display CPU information
cat /proc/cpuinfo

# Display memory information
cat /proc/meminfo

# Display free and used memory ( -h for human readable, -m for MB, -g for GB.)
free -h

# Display PCI devices
lspci -tv

# Display USB devices
lsusb -tv

# Display DMI/SMBIOS (hardware info) from the BIOS
dmidecode

# Show info about disk sda
hdparm -i /dev/sda

# Perform a read speed test on disk sda
hdparm -tT /dev/sda

# Test for unreadable blocks on disk sda
badblocks -s /dev/sda

3 – PERFORMANCE MONITORING AND STATISTICS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# Display and manage the top processes
top

# Interactive process viewer (top alternative)
htop

# Display processor related statistics
mpstat 1

# Display virtual memory statistics
vmstat 1

# Display I/O statistics
iostat 1

# Display the last 100 syslog messages (Use /var/log/syslog for Debian based systems.)
tail 100 /var/log/messages

# Capture and display all packets on interface eth0
tcpdump -i eth0

# Monitor all traffic on port 80 ( HTTP )
tcpdump -i eth0 'port 80'

# List all open files on the system
lsof

# List files opened by user
lsof -u user

# Display free and used memory ( -h for human readable, -m for MB, -g for GB.)
free -h

# Execute "df -h", showing periodic updates
watch df -h

4 – USER INFORMATION AND MANAGEMENT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Display the user and group ids of your current user.
id

# Display the last users who have logged onto the system.
last

# Show who is logged into the system.
who

# Show who is logged in and what they are doing.
w

# Create a group named "test".
groupadd test

# Create an account named john, with a comment of "John Smith" and create the user's home directory.
useradd -c "John Smith" -m john

# Delete the john account.
userdel john

# Add the john account to the sales group
usermod -aG sales john

5 – FILE AND DIRECTORY COMMANDS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# List all files in a long listing (detailed) format
ls -al

# Display the present working directory
pwd

# Create a directory
mkdir directory

# Remove (delete) file
rm file

# Remove the directory and its contents recursively
rm -r directory

# Force removal of file without prompting for confirmation
rm -f file

# Forcefully remove directory recursively
rm -rf directory

# Copy file1 to file2
cp file1 file2

# Copy source_directory recursively to destination. If destination exists, copy source_directory into destination, otherwise create destination with the contents of source_directory.
cp -r source_directory destination

# Rename or move file1 to file2. If file2 is an existing directory, move file1 into directory file2
mv file1 file2

# Create symbolic link to linkname
ln -s /path/to/file linkname

# Create an empty file or update the access and modification times of file.
touch file

# View the contents of file
cat file

# Browse through a text file
less file

# Display the first 10 lines of file
head file

# Display the last 10 lines of file
tail file

# Display the last 10 lines of file and "follow" the file as it grows.
tail -f file

6 – PROCESS MANAGEMENT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# Display your currently running processes
ps

# Display all the currently running processes on the system.
ps -ef

# Display process information for processname
ps -ef | grep processname

# Display and manage the top processes
top

# Interactive process viewer (top alternative)
htop

# Kill process with process ID of pid
kill pid

# Kill all processes named processname
killall processname

# Start program in the background
program &

# Display stopped or background jobs
bg

# Brings the most recent background job to foreground
fg

# Brings job n to the foreground
fg n

7 – FILE PERMISSIONS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PERMISSION      EXAMPLE

U G W
rwx rwx rwx chmod 777 filename
rwx rwx r-x chmod 775 filename
rwx r-x r-x chmod 755 filename
rw- rw- r-- chmod 664 filename
rw- r-- r-- chmod 644 filename

# NOTE: Use 777 sparingly!

LEGEND
U = User
G = Group
W = World

r = Read
w = write
x = execute
- = no access

8 – NETWORKING

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# Display all network interfaces and ip address
ifconfig -a

# Display eth0 address and details
ifconfig eth0

# Query or control network driver and hardware settings
ethtool eth0

# Send ICMP echo request to host
ping host

# Display whois information for domain
whois domain

# Display DNS information for domain
dig domain

# Reverse lookup of IP_ADDRESS
dig -x IP_ADDRESS

# Display DNS ip address for domain
host domain

# Display the network address of the host name.
hostname -i

# Display all local ip addresses
hostname -I

# Download http://domain.com/file
wget http://domain.com/file

# Display listening tcp and udp ports and corresponding programs
netstat -nutlp

9 – ARCHIVES (TAR FILES)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Create tar named archive.tar containing directory.
tar cf archive.tar directory

# Extract the contents from archive.tar.
tar xf archive.tar

# Create a gzip compressed tar file name archive.tar.gz.
tar czf archive.tar.gz directory

# Extract a gzip compressed tar file.
tar xzf archive.tar.gz

# Create a tar file with bzip2 compression
tar cjf archive.tar.bz2 directory

# Extract a bzip2 compressed tar file.
tar xjf archive.tar.bz2

10 – INSTALLING PACKAGES

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Search for a package by keyword.
yum search keyword

# Install package.
yum install package

# Display description and summary information about package.
yum info package

# Install package from local file named package.rpm
rpm -i package.rpm

# Remove/uninstall package.
yum remove package

# Install software from source code.
tar zxvf sourcecode.tar.gz
cd sourcecode
./configure
make
make install

11 – SEARCH

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Search for pattern in file
grep pattern file

# Search recursively for pattern in directory
grep -r pattern directory

# Find files and directories by name
locate name

# Find files in /home/john that start with "prefix".
find /home/john -name 'prefix*'

# Find files larger than 100MB in /home
find /home -size +100M

12 – SSH LOGINS

1
2
3
4
5
6
7
8
# Connect to host as your local username.
ssh host

# Connect to host as user
ssh user@host

# Connect to host using port
ssh -p port user@host

13 – FILE TRANSFERS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Secure copy file.txt to the /tmp folder on server
scp file.txt server:/tmp

# Copy *.html files from server to the local /tmp folder.
scp server:/var/www/*.html /tmp

# Copy all files and directories recursively from server to the current system's /tmp folder.
scp -r server:/var/www /tmp

# Synchronize /home to /backups/home
rsync -a /home /backups/

# Synchronize files/directories between the local and remote system with compression enabled
rsync -avz /home server:/backups/

14 – DISK USAGE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Show free and used space on mounted filesystems
df -h

# Show free and used inodes on mounted filesystems
df -i

# Display disks partitions sizes and types
fdisk -l

# Display disk usage for all files and directories in human readable format
du -ah

# Display total disk usage off the current directory
du -sh

15 – DIRECTORY NAVIGATION

1
2
3
4
5
6
7
8
# To go up one level of the directory tree.  (Change into the parent directory.)
cd ..

# Go to the $HOME directory
cd

# Change to the /etc directory
cd /etc

1、传统的BIOS只支持从MBR分区的硬盘启动。MBR分区的分区表保存在硬盘的第一个扇区,而且只有64字节,所以最多只能有四个表项。也就是说,我们只能把硬盘分为4主分区,或者分成小于等于3个主分区再加一个扩展分区。扩展分区又可以分为多个逻辑分区。MBR分区的优点就是简单,大家都用,所以大家都懂的嘛,很多操作系统都可以从MBR分区的硬盘启动。缺点就是MBR分区不能识别大于2T的硬盘空间,也不能有大于2T的分区;

2、GPT分区的硬盘可以解决以上MBR分区的所有缺点,它没有4个主分区的限制,想分几个主分区就可以分几个主分区,它可以识别大于2T的硬盘空间,每个分区的大小也可以超过2T。但是它的缺点是需要操作系统支持。比如只有WinXP 64位、Win Vista、Win 7和Win 8和比较新的Linux发行版支持GPT分区的硬盘。而且,如果没有EFI的支持的话,以上系统也只能将GPT分区的硬盘当成数据盘,不能从GPT分区的硬盘启动;

3、要从GPT分区的硬盘启动,则主板使用EFI、硬盘使用GPT分区、操作系统支持GPT和EFI这三个条件缺一不可。目前比较新的64位Linux系统和Win8系统都是支持EFI的,所以都是需要从GPT分区的硬盘启动的。现在的电脑主板已经逐渐抛弃legacy BIOS,而只支持EFI了。(像我的工作机这样的过渡产品将越来越少。)目前很多预装Win8的笔记本的主板几乎都只支持EFI了。所以,学习GPT和EFI的相关知识势在必行;

4、以上分区策略都是固定分区。硬盘分区一旦完成,则分区的大小不可改变,如果要改变分区的大小的话,只有重新分区。而且由于没有办法把多个硬盘分到一个区,所以再怎么分,每个分区的大小都有限。所以我们需要一种动态分区的东西。LVM就是这样一个东西,它叫逻辑卷管理(Logical Volume Manager)。使用LVM的机制是这样的:首先把硬盘分区或者整块硬盘标记为一个物理卷(PV),然后再创建一个卷组(VG),把一个或多个物理卷加入卷组,最后对卷组进行分区,每一个分区称为一个逻辑卷(LV)。LVM的优点就是可以随时向卷组中添加物理卷扩展卷组的大小,以可以动态调整逻辑卷的大小。这在服务器中尤其有用,比如说有一个原本有100个用户的服务器,其/home目录下就会有100个用户的主目录,如果给他们每人分配20G的空间的话,就会占满一个2T的硬盘,如果这时再来100个用户怎么办?如果使用LVM就可以顺利解决这个问题,我们可以再加一个3T的硬盘,然后把这个硬盘加入卷组就可以扩大卷组的大小,然后再调整/home所在的逻辑卷的大小即可。LVM既可以搭配MBR使用,也可以搭配GPT使用。

本文转自 清园 的《CentOS7安装iptables防火墙

请直接复制第八部分的脚本到服务器,保存成***.sh ,并使用chmod +x ***.sh 提升脚本权限,然后直接使用./***.sh 执行即可。参考链接附《国内端口检测网站》。

CentOS7默认的防火墙不是iptables,而是firewalld。

一、 安装iptables

#先检查是否安装了iptables

1
service iptables status

#安装iptables

1
yum install -y iptables

#升级iptables

1
yum update iptables 

#安装iptables-services

1
yum install iptables-services

二、 禁用/停止自带的firewalld服务

#停止firewalld服务

1
systemctl stop firewalld

#禁用firewalld服务

1
systemctl mask firewalld

三、 设置现有规则

#查看iptables现有规则

1
iptables -L -n

#先允许所有,不然有可能会杯具

1
iptables -P INPUT ACCEPT

#清空所有默认规则

1
iptables -F

#清空所有自定义规则

1
iptables -X

#所有计数器归0

1
iptables -Z

#允许来自于lo接口的数据包(本地访问)

1
iptables -A INPUT -i lo -j ACCEPT

#开放22端口

1
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#开放21端口(FTP)

1
iptables -A INPUT -p tcp --dport 21 -j ACCEPT

#开放80端口(HTTP)

1
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#开放443端口(HTTPS)

1
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

#允许ping

1
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

#允许接受本机请求之后的返回数据 RELATED,是为FTP设置的

1
iptables -A INPUT -m state --state  RELATED,ESTABLISHED -j ACCEPT

#其他入站一律丢弃

1
iptables -P INPUT DROP

#所有出站一律绿灯

1
iptables -P OUTPUT ACCEPT

#所有转发一律丢弃

1
iptables -P FORWARD DROP

四、 其他规则设定

#如果要添加内网ip信任(接受其所有TCP请求)

1
iptables -A INPUT -p tcp -s 45.96.174.68 -j ACCEPT

#过滤所有非以上规则的请求

1
iptables -P INPUT DROP

#要封停一个IP,使用下面这条命令:

1
iptables -I INPUT -s ***.***.***.*** -j DROP

#要解封一个IP,使用下面这条命令:

1
iptables -D INPUT -s ***.***.***.*** -j DROP

五、 保存规则设定

#保存上述规则

1
service iptables save

六、 开启iptables服务

#服务 开启 / 停止 / 重启 / 查看状态

1
service iptables start / stop / restart / status

# 七、其他

解决vsftpd在iptables开启后,无法使用被动模式的问题

1.首先在/etc/sysconfig/iptables-config中修改或者添加以下内容

1
2
3
#添加以下内容,注意顺序不能调换
IPTABLES_MODULES="ip_conntrack_ftp"
IPTABLES_MODULES="ip_nat_ftp"

2.重新设置iptables设置

1
iptables -A INPUT -m state --state  RELATED,ESTABLISHED -j ACCEPT

八、 以上完整脚本如下

版本一(通用):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/sh
iptables -P INPUT ACCEPT
iptables -F
iptables -X
iptables -Z

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

service iptables save
systemctl restart iptables.service

版本二(自定义):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/sh

systemctl stop firewalld
systemctl mask firewalld

iptables -P INPUT ACCEPT
iptables -F
iptables -X
iptables -Z

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

iptables -A INPUT -p tcp --dport 22222 -j ACCEPT
iptables -A INPUT -p tcp --dport 62666 -j ACCEPT
iptables -A INPUT -p tcp --dport 20188 -j ACCEPT
iptables -A INPUT -p tcp --dport 23333 -j ACCEPT
iptables -A INPUT -p tcp --dport 15347 -j ACCEPT
iptables -A INPUT -p tcp --dport 16666 -j ACCEPT

iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

service iptables save
service iptables restart

参考链接

  1. CentOS7安装iptables防火墙
  2. 国内端口检测网站

什么是SELinux

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。

NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。

使用SELinux开放SSH端口

  1. 查看SELinux开放给ssh使用的端口
1
semanage port -l|grep ssh

如果系统打印如下,则说明没有开放新添加端口。

1
ssh_port_t                    tcp      22
  1. 添加新端口
1
semanage port -a -t ssh_port_t -p tcp 22222

正确添加后再次查看,会显示如下:

1
ssh_port_t                    tcp      22,22222

参考链接

  1. SELinux
  2. CentOS7增加或修改SSH端口号
  3. 第十七章、程序管理与 SELinux 初探

修改SSH的端口号是为了防止有人恶意使用暴力破解的方法登录你的服务器,其他保护服务器的方法有禁用Root登录、SSH-Key登录等,但更为简单的操作就是修改你的SSH端口号。下文中将添加一个新端口号,待测试新端口号能够正常使用之后就可以关闭旧的端口号了。

一、 修改SSH配置文件

1
vi /etc/ssh/sshd_config

找到#Port 22,去掉#并在下一行添加Port 22222

  • 注意是sshd_config而不是ssh_config,多了个d
  • SSH服务的默认监听端口是22,如果不强制说明别的端口,”Port 22”注不注释都是开放22访问端口的。保留了22端口,是防止之后因为各种权限和配置问题,避免连22端口都不能访问的尴尬。
  • 如果设置10000以下的端口号,容易被系统或一些特殊软件占用,或是以后新应用准备占用该端口的时候,却被你先占用了,导致软件无法运行。因此,请选择10000~65535之间的任意端口号。
  • 到时候需要禁用22号端口的时候,重新修改此文件,给 Port22 前面加上 #,并重新启动服务即可。

二、查看SELinux开放情况

见文章《使用SELinux开放SSH端口

如果没有安装SELinux或已关闭则略过。

三、开启防火墙对应的端口

见文章《CentOS7安装iptables防火墙

直接下载里面的脚本(或者复制粘贴),然后提升权限并运行。

四、 重启服务

1
2
3
service sshd restart
service iptables restart
reboot

此步骤如果使用了第三步骤的脚本之后,便可忽略,而 reboot 则可以看情况使用。

五、 尝试用新端口登陆SSH服务

1
ssh -P 22222 root@******

更多防护技术请看参考链接里的文章。

参考链接

  1. VPS安全之SSH设置

关于测试

测试的目的决定了如何去组织测试。如果测试的目的是为了尽可能多的找出错误,那么测试就应该直接针对设计比较复杂的部分,或是以前出错比较多的位置。如果测试的目的是为了给最终用户提供具有一定可信度的质量评价,那么测试就应该直接针对在实际应用中经常用到的商业假设。

测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前设计过程的缺陷,以便改进。同时,这种分析也能帮助测试人员 设计出有针对性的检测方法,改善测试的有效性。

没有发现错误的测试也是有价值的,完整的测试时评定测试质量的一种方法。

硬件系统测试分为 软件测试硬件测试 两部分。

软件部分可以依据现行软件测试的流行办法来测试。

硬件测试部分分为 硬件基础测试硬件功能级以上测试 两部分。即除了测试各项硬件参数性能是否符合设计要求以外,仍需要测量硬件功能及联动特性是否符合要求。

术语

单元测试

Unit testing,也称为Module testing(模块测试)。是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。

单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

经常与单元测试联系起来的另外一些开发活动包括代码走读(Code review),静态分析(Static analysis)和动态分析(Dynamic analysis)。 静态分析 就是对软件的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和执行。 动态分析 就是通过观察软件运行时的动作,来提供执行跟踪,时间分析,以及测试覆盖度方面的信息。

集成测试

Assemble testing,也叫 组装测试联合测试 。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。

实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。一些局部反映不出来的问题,在全局上很可能暴露出来。

功能测试

Functional testing,也称为Behavioral testing(行为测试)和Black Box testing(黑盒测试),根据产品特性、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。

系统测试

System Testing,是对整个系统的测试,将硬件、软件、操作人员看作一个整体,检验它是否有不符合系统说明书的地方。这种测试可以发现系统分析和设计中的错误。如安全测试是测试安全措施是否完善,能不能保证系统不受非法侵入。再例如,压力测试是测试系统在正常数据量以及超负荷量(如多个用户同时存取) 等情况下是否还能正常地工作。

冒烟测试

Smoke testing,对一个硬件或硬件组件进行更改或修复后,直接给设备加电。如果没有冒烟,则该组件就通过了测试。在软件中,“冒烟测试”这一术语描述的是在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程。在检查了代码后,冒烟测试是确定和修复软件缺陷的最经济有效的方法。冒烟测试设计用于确认代码中的更改会按预期运行,且不会破坏整个版本的稳定性。

验收测试

验收测试是部署软件之前的最后一个测试操作。在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。

检验系统说明书的各项功能与性能是否实现和满足要求。常见的有α测试、β测试,都是由用户进行的。

参考链接

1.《集成测试与联调测试的区别》 2.《软件测试方法——单元测试、集成测试、系统测试、确认测试》 3.《浅谈电子产品的硬件测试技术