M3启动文件.tmp

M3启动文件.tmp
M3启动文件.tmp

目录

第1章CMSIS标准 (1)

1.1 CMSIS标准简介 (1)

1.2 CMSIS标准的软件架构 (1)

1.3 CMSIS标准的文件结构 (2)

第2章注解startup.s文件(以startup_LPC17xx.s为例) (3)

2.1 堆栈以及堆的初始化 (3)

2.1.1 堆栈的初始化 (3)

2.1.2 堆的初始化 (3)

2.2 中断向量表的初始化 (4)

2.3 调用Reset Handler (5)

2.4 其他的代码 (5)

第3章ARM芯片的启动过程详解 (7)

3.1 ARM芯片的启动过程概述 (7)

3.2 结合代码来看ARM芯片的启动过程 (8)

3.2.1 调试环境的搭建及测试代码 (8)

3.2.2 跟踪启动代码 (8)

3.2.3 详细的启动过程 (9)

3.2.4 __main (10)

3.2.5 __rt_entry (10)

3.2.6 __rt_lib_init (11)

3.3 关于microlib (11)

3.4 x.map (11)

3.4.1 关于链接器 (12)

3.4.2 RW段在RAM的存放 (12)

3.5 关于ARM程序的Memory管理 (12)

3.5.1 ARM镜像文件的组成(image) (12)

3.5.2 关于image文件(镜像文件) (13)

3.5.3 RO段 (13)

3.5.4 RW段 (14)

3.5.5 ZI段(初始化为0或未初始化的变量) (15)

3.6 缺省内存映射 (16)

3.7 内存模型 (17)

第4章关于分散加载文件 (18)

4.1 什么时候使用分散加载文件 (18)

4.2 适用范围 (18)

4.3 再谈ARM Image(镜像文件) (18)

4.4 节放置 (19)

4.5 一个简单的加载过程 (20)

4.6 分散加载文件语法 (21)

4.6.1 加载时域(区)描述 (21)

4.6.2 运行时域(区)描述 (22)

4.6.3 输入段描述 (23)

4.7 实战测试(一个简单的例程) (24)

4.8 实战分散加载 (26)

4.8.1 多块RAM的分散加载文件配置 (27)

4.8.2 多块Flash的分散加载文件配置 (28)

第5章编写自己的启动代码(基于LPC17xx) (32)

5.1 最简单的启动代码(Startup.s Version-1.0) (32)

5.1.1 启动代码必须完成的三项工作 (32)

5.1.2 程序实现(Startup.s Version-1.0) (32)

5.1.3 指定加载方式让程序跑起来 (33)

5.1.4 V ersion-1.0的缺点 (33)

5.2 一个实用的启动代码(Startup.s V ersion-2.0) (33)

5.2.1 设计描述 (33)

5.2.2 程序实现(Startup.s) (34)

5.2.3 向量表V ectors.h和V ectors.c (34)

5.2.4 指定加载方式 (37)

第1章CMSIS标准

1.1 CMSIS标准简介

ARM公司于2008年11月12日发布了ARMCortex微控制器软件接口标准CMSIS 1.0。CMSIS是独立于供应商的Cortex-M处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M上操作系统的移植难度,并减少了新入门的微控制器开发者的学习曲线和新产品的上市时间。

根据近期的调查研究,软件开发已经被嵌入式行业公认为最主要的开发成本。因此,ARM 与Atmel、IAR、KEIL、Luminary Micro、Micrium、NXP、SEGGER和ST等诸多芯片和软件工具厂商合作,将所有Cortex芯片厂商的产品的软件接口标准化,制定了CMSIS标准。此举意在降低软件开发成本,尤其针对进行新设备项目开发或将已有的软件移植到其他芯片厂商提供的基于Cortex处理器的微控制器的情况。有了该标准,芯片厂商就能够将他们的资源专注于对其产品的外设特性进行差异化,并且能够消除对微控制器进行编程时需要维持的不同的、互相不兼容的标准的需求,从而达到降低开发成本的目的。

1.2 CMSIS标准的软件架构

图1.1 基于CMSIS标准的软件架构

从图1.1 基于CMSIS标准的软件架构中可以看到,基于CMSIS标准的软件架构主要分为以下四层:用户应用层,操作系统层,CMSIS层以及硬件寄存器层。其中CMSIS层起着承上启下的作用,一方面该层对硬件寄存器层进行了统一的实现,屏蔽了不同厂商对Cortex-M系列微处理器核内外设寄存器的不同定义,另一方面又向上层的操作系统和应用层提供接口,简化了应用程序开发的难度,使开发人员能够在完全透明的情况下进行一些应用程序的开发。也正是如此,CMSIS层的实现也相对复杂,下面将对CMSIS层次结构进行剖析。

CMSIS层主要分为以下3个部分:

l核内外设访问层(CPAL,Core Peripheral Access Layer):该层由ARM负责实现包括对寄存器名称、地址的定义,对核寄存器、NVIC、调试子系统的访问接口定义以及

对特殊用途寄存器的访问接口(例如:CONTROL,xPSR)定义。由于对特殊寄存

器的访问以内联方式定义,所以针对不同的编译器ARM统一用__INLINE来屏蔽差

异。该层定义的接口函数均是可重入的。

l片上外设访问层(DPAL, Device Peripheral Access Layer):该层由芯片厂商负责实现。

该层的实现与CPAL类似,负责对硬件寄存器地址以及外设访问接口进行定义。该

层可调用CPAL层提供的接口函数同时根据设备特性对异常向量表进行扩展,以处

理相应外设的中断请求。

l外设访问函数(AFP , Access Functions for Peripherals):该层也由芯片厂商负责实现,主要是提供访问片上外设的访问函数,这一部分是可选的。

对一个Cortex-M微控制系统而言,CMSIS通过以上三个部分实现了:l定义了访问外设寄存器和异常向量的通用方法;

l定义了核内外设的寄存器名称和核异常向量的名称;

l为RTOS核定义了与设备独立的接口,包括Debug通道。

这样芯片厂商就能专注于对其产品的外设特性进行差异化,并且消除他们对微控制器进行编程时需要维持的不同的、互相不兼容的标准需求,以达到低成本开发的目的。

1.3 CMSIS标准的文件结构

图1.2 CMSIS的文件基本组织结构

如上图5.2中core_cm.c以及core_cm.h中位内核外设访问层,其中定义了内核中的外设地址以及一些内核的访问及控制函数。

Startup_.s文件是系统的启动文件,其包括堆和栈的初始化配置、中断向量表的配置以及将程序引导到main()函数等功能。

而system_.h和system_.c文件则是由ARM公司提供模板,各芯片制造商根据自己芯片的特点来编写的。

第2章注解startup.s文件(以startup_LPC17xx.s为例)

下面以startup_LPC17xx.s为例,简单看一下CMSIS中的启动代码完成了哪些工作。

主要完成了三项工作:

l堆栈以及堆的初始化;

l定位中断向量表;

l调用Reset Handler。

2.1 堆栈以及堆的初始化

2.1.1 堆栈的初始化

程序清单2.1 startup_LPC17xx.s中的堆栈初始化代码

Stack_Size EQU 0x00000200

AREA STACK, NOINIT, READWRITE, ALIGN=3

Stack_Mem SPACE Stack_Size

__initial_sp

Stack_Size EQU 0x00000200,这个语句相当于Stack_Size这个标号(标号:链接器的术语,下文中提到的所有“标号”,指的都是链接器中的标号)等于0x00000200,相当于C语言中的#define Stack_Size 0x00000200,也就是说此语句只是一个声明,并未分配地址。

AREA STACK, NOINIT, READWRITE, ALIGN=3,此语句定义了一个名叫ST ACK的代码段,并指明8字节对齐(ALIGN=3)。

Stack_Mem SPACE Stack_Size,为Stack_Mem分配Stack_Size大小的一块内存区域,注意这里分配的是RAM。

__initial_sp

此标号有一层隐含的意思那就是在M3中堆栈是满递减堆栈,因为它指定了堆栈指针位于堆栈的高地址(在Stack_Mem之后),具体如下图所示。

图2.1 堆栈指针SP位置

上图来自一个LPC1700工程的.map文件。可以看出栈的起始地址为0x10001f70,大小为512字节(即0x00000200 = Stack_Size)。而堆栈指针的位置在0x10002170,其等于栈的起始地址0x10001f70 + 0x00000200,说明LPC1700系列的Cortex-M3微控制器的堆栈为满递减堆栈。

2.1.2 堆的初始化

程序清单2.2 startup_LPC17xx.s中的堆初始化代码

Heap_Size EQU 0x00000200

AREA HEAP, NOINIT, READWRITE, ALIGN=3

__heap_base

Heap_Mem SPACE Heap_Size

__heap_limit

具体过程与栈的初始化相同。

2.2 中断向量表的初始化

程序清单2.3 中断向量表的初始化代码

PRESERVE8

THUMB

AREA RESET, DA TA, READONLY

EXPORT __V ectors

__Vectors DCD __initial_sp ; Top of Stack

DCD Reset_Handler ; Reset Handler

DCD NMI_Handler ; NMI Handler

DCD HardFault_Handler ; Hard Fault Handler

DCD MemManage_Handler ; MPU Fault Handler

DCD BusFault_Handler ; Bus Fault Handler

DCD UsageFault_Handler ; Usage Fault Handler

DCD 0 ; Reserved

DCD 0 ; Reserved

DCD 0 ; Reserved

......(以下代码省略)

PRESERVE8指定了以下的代码位8字节对齐,这是keil编译器的一个编程要求,对齐情况如下图所示:

图2.2 .list文件中的8字节对齐示意图

THUMB指定了接下来的代码为THUMB指令集。

AREA RESET, DATA, READONLY,此语句声明RESET数据段。

EXPORT __Vectors,导出向量表标号,EXPORT作用类似于C语言中的extern。之后的代码就是为向量表分配存储区域。

2.3 调用Reset Handler

程序清单2.4 调用Reset Handler的代码

Reset_Handler PROC

EXPORT Reset_Handler [WEAK]

IMPORT __main

LDR R0, =__main

BX R0

ENDP

此段代码只完成了一个功能,引导程序进入__main。__main的具体行为在第三章中有具体的描述。

2.4 其他的代码

程序清单 2.5 CRP加密级别

IF : LNOT::DEF:NO_CRP

AREA |.ARM.__at_0x02FC|, CODE, READONL Y

CRP_Key DCD 0xFFFFFFFF

ENDIF

此段代码指定了接下来的代码存储与0x02FC的地址,具体情况如下图所示。

这段代码是NXP公司的LPC1700系列的MCU特有的一段代码,其他公司的Cortex-M3 MCU的启动程序是没有这段代码的。

这段代码是指定LPC1700的CRP加密级别的代码段,芯片上电后会自动读取这一地址的值以确定加密方式,其中CRP_Key = 0xffffffff为不加密(0级加密),CRP_Key = 0x12345678为1级加密,CRP_Key = 0x87654321为2级加密,CRP_Key = 0x43218765为3级加密(最高级加密),3级加密将会禁止所有的ISP指令,也就是说,芯片将不能读写、不能擦除。

程序清单 2.6 具体的堆栈以及堆的初始化行为

; User Initial Stack & Heap

IF :DEF:__MICROLIB

EXPORT __initial_sp

EXPORT __heap_base

EXPORT __heap_limit

ELSE

IMPORT __use_two_region_memory

EXPORT __user_initial_stackheap

__user_initial_stackheap

LDR R0, = Heap_Mem

LDR R1, =(Stack_Mem + Stack_Size)

LDR R2, = (Heap_Mem + Heap_Size)

LDR R3, = Stack_Mem

BX LR

关于此段代码将在第三章有具体叙述,在此略过。

第3章ARM芯片的启动过程详解

“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件。这一点清注意区别。

一个ARM程序包含3部分:RO,RW和ZI

l RO就是只读数据,是程序中指令和常量;

l RW是可读写的数据,程序中已初始化变量;

l ZI是程序中未初始化的变量和初始化为0的变量。

由以上3点说明可以理解为:

l RO就是readonly;

l RW就是read/write;

l ZI就是zero。

3.1 ARM芯片的启动过程概述

图3.1 ARM芯片的启动过程详解

注意,以上的过程并非绝对的,不同的ARM架构或是不同的代码以上的执行过程是不同的。

复位处理程序是在汇编器中编写的短模块,系统一启动就立即执行。复位处理程序最少要为应用程序的运行模式初始化堆栈指针。对于具有本地内存系统(如缓存、TCM、MMU和MPU)的处理器,某些配置必须在初始化过程的这一阶段完成。复位处理程序在执行之后,通常跳转到__main以开始C库初始化序列。

__main负责设置内存,而__rt_entry负责设置运行时环境。__main执行代码和数据复制、解压缩以及ZI数据的零初始化。然后,它跳转到__rt_entry,设置堆栈和堆、初始化库函数和静态数据,并调用任何顶级C++构造函数。然后,__rt_entry跳转到应用程序的入口main()。主应用程序结束执行后,__rt_entry将库关闭,然后把控制权交还给调试器。函数标签main()具有

特殊含义。main()函数的存在强制链接器链接到__main和__rt_entry中的初始化代码。如果没有标记为main()的函数,则没有链接到初始化序列,因而部分标准C库功能得不到支持。

3.2 结合代码来看ARM芯片的启动过程

3.2.1 调试环境的搭建及测试代码

使用keil for ARM(uVision4)的软件模拟,工程的硬件设定为LPC1700系列,不使用microlib。这里不使用microlib,则系统自动加载标准C Library,这样我们才能看到标准的ARM 芯片的标准启动过程。随后我们会对microlib进行探讨。

测试代码如下:

程序清单3.1 启动过程测试代码

#include "LPC17xx.h" /* LPC17xx外设寄存器*/

int main (void)

{

SystemInit(); /* 系统初始化,切勿删除*/

while (1) {

}

}

我们的测试代码使用的是一段最简单的代码,代码本身只包含CMSIS标准的必备文件,即stdint.h、core_cm3.h、core_cm3.c、system_LPC17xx.h、system_LPC17xx.c、LPC17xx.h、startup_LPC17xx.s和main.c。

3.2.2 跟踪启动代码

开始调试之前,须将工程设置的DEBUG栏中取消掉Run to main()的勾选,否则代码会直接运行到main()函数,我们也就无法看到芯片的启动过程了。

然后启动调试,最先进入Reset_Handler,如下图所示。

图3.2 Reset_Handler

继续单步运行,程序跳入__main(C Library的代码,并非用户代码),如下图所示。

图3.3 __main

继续单步运行,经过一系列的代码(主要是scatter load过程)后,程序进入__rt_entry(同样是由C Library管理,并非用户代码)。

图3.4 __rt_entry

继续单步运行,再次经过一系列的代码之后(主要是堆栈和堆的初始化以及C Library的初始化),程序进入main()。如下图所示。

图3.5 进入main函数

以上是整个测试代码启动过程的跟踪调试的大致过程,这个过程对ARM系列的芯片来说都是相同的,不同的是里面具体的细节。

3.2.3 详细的启动过程

使用的依然是上面的测试代码,详细启动过程如下图所示。

图3.6 芯片启动的详细过程

上图显示的就是测试代码在LPC17xx上启动运行的全过程(详细过程),由此图可见LPC17xx的启动过程与图3.1所示的启动过程是基本一致的,但是还有差别,可以说是图3.1所示启动过程的简化版。

注意:并非所有代码的启动过程全部相同,此启动过程与所使用的链接器、用户代码以及其所集成的C Library密切相关。此图为由“armlink”的链接器为程序清单3.2所示的测试代码产生的启动过程,其他情况可能会有一些差异(比如有的代码的启动过程就会运行一段RW 段的解压代码等,而本例程中则没有)。

3.2.4 __main

若程序使用的是C或C++语言编写的代码,那么C/C++程序的入口是在C Library中的__main。库代码在此处执行以下操作。

l1将非根(RO和RW)执行区从其加载地址复制到执行地址(这里的根区指的就是__main和__rt_entry)。另外,如果压缩了任何数据节,则会将它们从加载地址解压

缩到执行地址(此数据压缩及解压缩过程并不是对所有代码都会执行);

l将ZI区清零;

l跳转到__rt_entry。

3.2.5 __rt_entry

__rt_entry符号是使用ARM C库的程序的起点。将所有分散加载区重定位到其执行地址后,会将控制权传递给__rt_entry。其有如下缺省实现:

l设置堆和堆栈。

l调用__rt_lib_init以初始化C Library。

l调用main()。

l调用__rt_lib_shutdown以关闭C Library。

l退出。

注意:最后两步是在程序退出main()函数时才会执行,而嵌入式程序一般都是死循环,所以基本不会执行这两个过程。还有,以上过程是对标准C Library而言,不包括使用microlib 的情况。

3.2.6 __rt_lib_init

这是库初始化函数,它与__rt_lib_shutdown()配合使用。

这是库初始化函数。它是紧靠__rt_stackheap_init()后面调用的,并传递一个要用作堆的初始内存块。此函数是标准ARM库初始化函数,不能重新实现此函数。

3.3 关于microlib

microlib是缺省C库的备选库。它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使用。这些应用程序不在操作系统中运行。microlib进行了高度优化以使代码变得很小。它的功能比缺省C库少,并且根本不具备某些ISO C特性。某些库函数的运行速度也比较慢,例如,memcpy()。

microlib 与缺省C库之间的主要差异是:

l microlib不符合ISO C库标准。不支持某些ISO特性,并且其他特性具有的功能也较少;

l microlib不符合IEEE 754二进制浮点算法标准;

l microlib进行了高度优化以使代码变得很小;

l无法对区域设置进行配置。缺省C区域设置是唯一可用的区域设置;

l不能将main()声明为使用参数,并且不能返回内容;

l不支持stdio,但未缓冲的stdin、stdout和stderr除外;

l microlib对C99函数提供有限的支持;

l microlib不支持操作系统函数;

l microlib不支持与位置无关的代码;

l microlib不提供互斥锁来防止非线程安全的代码;

l microlib不支持宽字符或多字节字符串;

l与stdlib不同,microlib不支持可选择的单或双区内存模型。microlib只提供双区内存模型,即单独的堆栈和堆区。

3.4 x.map

想要更好的了解启动代码的运行机制,我们就有必要了解一下由Keil的链接器“armlink”生成的描述文件即x.map文件。

3.4.1 关于链接器

图3.7 目标文件的组成

上图即是armlink的链接器为程序清单3.1所示的测试代码生成的.map文件中的一部分,其描述了镜像文件的组成信息,其中可以明显的看到其由两部分构成:

l由User Code生成的目标文件;

l由C Library生成的目标文件。

可见我们在上文中所描述的启动过程中看到的__main、__rt_entry、__scatterload以及__rt_lib_init等,就是C Library中的代码。

同理,我们每次烧录的可执行的ARM的bin文件中不仅有开发者编写的代码,还有 C Library的代码。

3.4.2 RW段在RAM的存放

图3.8 由armlink生成的RW段在RAM中存放的描述

3.5 关于ARM程序的Memory管理

3.5.1 ARM镜像文件的组成(image)

所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文件。以下用Image 文件来称呼它。Image文件包含了RO和RW数据(注意:不包含ZI数据)。之所以Image文

件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域(执行区域)一律清零即可。包含进去反而浪费存储空间。

3.5.2 关于image文件(镜像文件)

从以上两点可以知道,烧录到ROM中的image文件与实际运行时的ARM程序之间并不是完全一样的。因此就有必要了解ARM程序是如何从ROM中的image到达实际运行状态的。实际上,RO中的指令(启动程序)至少应该有这样的功能:

l将RW从ROM中搬到RAM中,因为RW是变量,变量不能存在ROM中。

l将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量,同理:变

量不能存在ROM中。

在程序运行的最初阶段,RO中的指令(启动程序)完成了这两项工作后(也就是分散加载的过程)C程序才能正常访问变量。否则只能运行不含变量的代码。说了这么多可能还是有些迷糊,RO,RW和ZI到底是什么,下面我将给出几个例子,最直观的来说明RO,RW,ZI 在C语言中的含义。

3.5.3 RO段

看下面两段程序,它们之间差了一条语句,这条语句就是声明一个字符常量。因此按照之前的内容,它们之间应该只会在RO数据中相差一个字节(字符常量为1字节)。

Prog1:

#include

void main(void)

{

;

}

Prog2:

#include

const char a = 5;

void main(void)

{

;

}

Prog1编译出来后的信息如下(来自.map文件):

==============================================================

Code RO Data RW Data ZI Data Debug

948 60 0 96 0 Grand Totals

==============================================================

Total RO Size(Code + RO Data) 1008 ( 0.98kB)

Total RW Size(RW Data + ZI Data) 96 ( 0.09kB)

Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB)

==============================================================

Prog2编译出来后的信息如下(来自.map文件):

==============================================================

Code RO Data RW Data ZI Data Debug

948 61 0 96 0 Grand Totals

==============================================================

Total RO Size(Code + RO Data) 1009 ( 0.99kB)

Total RW Size(RW Data + ZI Data) 96 ( 0.09kB)

Total ROM Size(Code + RO Data + RW Data) 1009 ( 0.99kB)

============================================================== 以上两个程序编译出来后的信息可以看出:Prog1和Prog2的RO包含了Code和RO Data 两类数据。他们的唯一区别就是Prog2的RO Data比Prog1多了1个字节。这正和之前的推测一致。如果增加的是一条指令而不是一个常量,则结果应该是Code数据大小有差别。

3.5.4 RW段

同样再看两个程序,它们之间只相差一个“已初始化的变量”,按照之前所讲的,已初始化的变量应该是算在RW中的,所以两个程序之间应该是RW大小有区别。

Prog3:

#include

void main(void)

{

;

}

Prog4:

#include

char a = 5;

void main(void)

{

;

}

Prog3编译出来后的信息如下(来自.map文件):

==============================================================

Code RO Data RW Data ZI Data Debug

948 60 0 96 0 Grand Totals

==============================================================

Total RO Size(Code + RO Data) 1008 ( 0.98kB)

Total RW Size(RW Data + ZI Data) 96 ( 0.09kB)

Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB)

============================================================== Prog4编译出来后的信息如下(来自.map文件):

==============================================================

Data RO Data RW Data ZI Data Debug

948 60 1 96 0 Grand Totals

==============================================================

Total RO Size(Code + RO Data) 1008 ( 0.98kB)

Total RW Size(RW Data + ZI Data) 97 ( 0.09kB)

Total ROM Size(Code + RO Data + RW Data) 1009 ( 0.99kB)

============================================================== 以上两个程序编译出来后的信息可以看出:Prog1和Prog2的RO包含了Code和RO Data 两类数据。他们的唯一区别就是Prog2的RO Data比Prog1多了1个字节。这正和之前的推测一致。如果增加的是一条指令而不是一个常量,则结果应该是Code数据大小有差别。

3.5.5 ZI段(初始化为0或未初始化的变量)

再看两个程序,他们之间的差别是一个未初始化的变量“a”,从之前的了解中,应该可以推测,这两个程序之间应该只有ZI大小有差别。

Prog3:

#include

void main(void)

{

;

}

Prog4:

#include

char a;

void main(void)

{

;

}

Prog3编译出来后的信息如下(来自.map文件):

==============================================================

Code RO Data RW Data ZI Data Debug

948 60 0 96 0 Grand Totals

==============================================================

Total RO Size(Code + RO Data) 1008 ( 0.98kB)

Total RW Size(RW Data + ZI Data) 96 ( 0.09kB)

Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB)

==============================================================

Prog4编译出来后的信息如下(来自.map文件):

==============================================================

Code RO Data RW Data ZI Data Debug

948 60 0 97 0 Grand Totals

==============================================================

Total RO Size(Code + RO Data) 1008 ( 0.98kB)

Total RW Size(RW Data + ZI Data) 97 ( 0.09kB)

Total ROM Size(Code + RO Data + RW Data) 1008 (0.98kB)

============================================================== 编译的结果完全符合推测,只有ZI数据相差了1个字节。这个字节正是未初始化的一个字符型变量“a”所引起的。

注意:如果一个变量被初始化为0,则该变量的处理方法与未初始化华变量一样放在ZI 区域。即:ARM C程序中,所有的未初始化变量都会被自动初始化为0。

以上代码是再ADS下编译的,keil环境下与之不同,比如在keil下生成ZI数据段就必须定义一个大于8字节的未初始化或初始化位0的变量,且必须在源代码中引用此变量才会在链接的描述文件中看到其生成的ZI文件。

3.6 缺省内存映射

对于没有描述内存映射的映像,链接器根据缺省内存映射放置代码和数据。如下图所示。

图3.9 缺省内存映射

创建一个可以在其中执行C或C++程序的环境。这包括:

l创建一个堆栈;

l创建一个堆(如果需要);

l初始化程序所用的库的部分组成内容;

l调用main()以开始执行程序;

l支持程序使用ISO定义的函数;

l捕获运行时错误和信号,如果需要,还可以在出现错误或程序退出时终止执行。

注意:这个内存映射并非对所有芯片都有效,不同的芯片的内存映射是不同的。在Cortex-M3中的内存映射与上图是一致的。

3.7 内存模型

在Keil for ARM下你可以选择以下任意内存模型:

1.单内存区

堆栈从内存区顶部向下增长。堆从内存区底部向上增长。这是缺省设置。由堆管理的内存从来不会缩减。不能将通过调用free()释放的堆内存再次用于其他用途。

2.双内存区

一个内存区用于堆栈,另一个内存区用于堆。堆区大小可以是零。堆栈区可以位于分配的内存中,也可以从执行环境中继承。要使用双区模型而不是缺省的单区模型,请使用以下任一方法:

l汇编语言中的IMPORT __use_two_region_memory;

l C中的#pragma import(__use_two_region_memory)。

例如下图所示,此代码来自startup_LPC17xx.s。

如果使用双区内存模型,并且未提供任何堆内存,则无法调用malloc()、使用stdio或获取main()的命令行参数。如果将堆区大小设置为0,并且将__user_heap_extend()定义为可扩展堆的函数,则会在需要时创建堆。

第4章关于分散加载文件

4.1 什么时候使用分散加载文件

l存在复杂的地址映射:例如代码和数据需要分开放在在多个区域。

l存在多种存储器类型:例如包含Flash、ROM、SDRAM快速SRAM。我们根据代码与数据的特性把他们放在不同的存储器中,比如中断处理部分放在快速SRAM内部

来提高响应速度,而把不常用到的代码放到速度比较慢的Flash内。

l函数的地址固定定位:可以利用Scatter file实现把某个函数放在固定地址,而不管其应用程序是否已经改变或重新编译。

l利用符号确定堆与堆栈:

l内存映射的IO:采用scatter file可以实现把某个数据段放在精确的地指处。

因此对于嵌入式系统来说scatter file是必不可少的,因为嵌入式系统采用了ROM,RAM,和内存映射的IO。通过使用分散加载机制,可以使用文本文件中的描述为链接器指定映像的内存映射。分散加载为您提供了对映像组件分组和位置的全面控制。分散加载可以用于简单映像,但它通常仅用于具有复杂内存映射的映像,即多个区在加载和执行时分散在内存映射中。

4.2 适用范围

有时候用户希望将不同代码放在不同存储空间,也就是通过编译器生成的映像文件需要包含多个域,每个域在加载和运行时可以有不同的地址。要生成这样的映像文件,必须通过某种方式告知编译器相关的地址映射关系。

Scattter loading是ARM连接器(armlink)提供的一种机制,该机制让你能够把可执行映像文件分成多个区域,然后分别为它们指定在存储器上的存储位置。Scatter loading机制用于定位装载区域和运行区域在分离的存储映像中的位置。

4.3 再谈ARM Image(镜像文件)

ARM中的源文件经过编译器编译生成的目标文件.obj(Object file)和相应的C/C++运行时库(Runtime Library)经过连接器的处理后,生成ELF格式的映像文件(image)——它可以被写入目标设备的ROM中直接运行或加载后运行。

镜像文件的组成如图所示。

各种文件的后缀文件格式

超星浏览器 002 超星浏览器 003 超星浏览器 !!! 没有下载完成的另时文件 aiff Windows Media Player ani 动画鼠标 ans 记事本 ape Monkey s audioWinamp 2.81以上版本 arj 压缩文件ARJ asp 无效下载文件,重新下载 au Windows Media Player avi Media player金山影霸(如果不能播放请装divx插件) bik bink playerRAD Game Tools bin daemon tool虚拟光驱 bmp 画图(Windows附件) box Lotus Notes c Turbo C;记事本 cab WinRARINSTALL SHELDWinzip caj Cajviewer ccd daemon tool cdr Corel DRAWfreehand chm Windows帮助文件,直接打开 cmb ComicGURU cpp C++记事本 cue daemon tool cur 静态鼠标 Dat 不确定打开方式,多种格式的数据文件 db SQL数据库文件 dbf FoxbaseDbaseVisual FoxPro ddb Protel 99 se dfi 东方光驱魔术师 doc Microsoft Word dwg AutoCAD eml outlook fla Macromedia Flash 6 gba game boy advanced的文件,游戏模拟器 gho Norton Ghost gif AcdseeInternet Explorer hlp Windows帮助文件,可以直接打开 htm Internet Explorer ico Windows图标AcdSee img daemon toolWinimg inf 记事本 ini 记事本

Debug fail “Can’t” find a source file at “tmpTi_MKLIBaXqLbTSRCcopy_zero_init.c”

遇到MSP430莫名BUG Debug fail “Can’t” find a source file at “/tmp/Ti_MKLIBaXqLbT/SRC/copy_zero_init.c” TI 论坛上前辈的提问…

解决方案

MSP430遇到一个问题程序编译链接都没问题但是,下载Debug不能运行,原因是代码量过大,初始化变量时耗时太长导致程序未进入MAIN函数看门狗就导致单片机复位。解决办法如下this can be done by adding code to disable the watchdog within the routine system_pre_init() in file pre_init.c. This routine is called prior to the auto init hence the watchdog will be disabled prior to the C initialization process. This file can be found in the directory 'your_CSS_instalation_directory' \tools\compiler\msp430\lib after unzipping the file rtssrc.zip. Add this file to your project and edit it to add the statement to disable to watchdog. Rebuild your project and test." 意思就是在CCS5安装目录下找到\tools\compiler\msp430\lib 找到rtssrc.zip文件,解压后找 到pre_init.c文件,添加这个文件到工程中,编辑这个文件,添加关狗语句。

常见文件扩展名

常见文件扩展名 aiff 声音文件Windows media Player .!!! Netants 暂存文件Netants .ani 动画鼠标 .arj 压缩文件ARJ .avi 电影文件Windows media Player .awd 传真文档 .bak 备份文件 .bas Basic 语言Basic .bat DOS批处理文件 .bin MAC 二进制码文件Stuffit Expander .bmp 图象文件画图/看图软件 .cab 压缩文件Winzip .cdr Corel图画文件Corel Draw .chk Scandisk检察后制作的文件可以删掉 .com DOS命令文件自执行 .cpx Cryptapix加密图片文件Cryptapix .cur 静态鼠标 .dbf 数据库文件dBase, FoxBase, Access .dll 应用程序扩展 .doc 文档文件Word .dwg AutoCAD文件AutoCAD .eps Illustrator 图画文件Adobe Illustrator .exe 执行文件自执行 .fon 字体文件 .gb 国标码文件南极星文字处理 .get Getright 暂存文件 .gif 256色图象文件画图/看图软件 .gz 可供UNIX或LINUX使用的压缩文件Winzip .hqx Macintosh 文件Stuffit Expander .htm 网页浏览器 .html 网页浏览器 .ico 图标 .ini 配置设置笔记本或WordPad .ipx IPX演示文件浏览器加装IPX 插件 .jiff 图象文件画图/看图软件 .jpeg 压缩过的图象文件画图/看图软件 .jpg 压缩过的图象文件画图/看图软件 .js javascript .lnk 快捷方式连接文件连接文件的相应程序 .m3u Winamp播放列表Winamp .mid 声音文件Windows media Player .mov Quicktime影像文件Quick Time .mp3 压缩音乐文件Winamp

M3启动文件.tmp

目录 第1章CMSIS标准 (1) 1.1 CMSIS标准简介 (1) 1.2 CMSIS标准的软件架构 (1) 1.3 CMSIS标准的文件结构 (2) 第2章注解startup.s文件(以startup_LPC17xx.s为例) (3) 2.1 堆栈以及堆的初始化 (3) 2.1.1 堆栈的初始化 (3) 2.1.2 堆的初始化 (3) 2.2 中断向量表的初始化 (4) 2.3 调用Reset Handler (5) 2.4 其他的代码 (5) 第3章ARM芯片的启动过程详解 (7) 3.1 ARM芯片的启动过程概述 (7) 3.2 结合代码来看ARM芯片的启动过程 (8) 3.2.1 调试环境的搭建及测试代码 (8) 3.2.2 跟踪启动代码 (8) 3.2.3 详细的启动过程 (9) 3.2.4 __main (10) 3.2.5 __rt_entry (10) 3.2.6 __rt_lib_init (11) 3.3 关于microlib (11) 3.4 x.map (11) 3.4.1 关于链接器 (12) 3.4.2 RW段在RAM的存放 (12) 3.5 关于ARM程序的Memory管理 (12) 3.5.1 ARM镜像文件的组成(image) (12) 3.5.2 关于image文件(镜像文件) (13) 3.5.3 RO段 (13) 3.5.4 RW段 (14) 3.5.5 ZI段(初始化为0或未初始化的变量) (15) 3.6 缺省内存映射 (16) 3.7 内存模型 (17) 第4章关于分散加载文件 (18) 4.1 什么时候使用分散加载文件 (18) 4.2 适用范围 (18) 4.3 再谈ARM Image(镜像文件) (18) 4.4 节放置 (19) 4.5 一个简单的加载过程 (20) 4.6 分散加载文件语法 (21) 4.6.1 加载时域(区)描述 (21) 4.6.2 运行时域(区)描述 (22) 4.6.3 输入段描述 (23)

TMP活动小组推行管理方案教学内容

TPM活动推行管理实施方案 文件编号:QF/SB-08 1.目的: 通过组织公司全体人员参与提高企业生产效率的现场改善活动,建全TPM管理活动体 制,创建整洁有序的生产现场,确保精良可靠的技术装备,培训文明进取的员工团队。最终实现设备故障为“0”、现场浪费为“0”、品质不良为“0”。 2.TPM定义:全员参与生产设备自主保全活动。 3.范围:公司内从事生产活动的全体人员,围绕企业管理方针目标、经营策略和生产现场存 在的问题,从降低设备故障、提高设备生产率和设备稳定性、可靠性从而确保产品质 量为目的而组织的在公司生产实现部门开展对生产设备的自主管理和专业管理及课 题改善管理活动。 4.组织管理:成立TPM活动推行委员会,负责TPM活动体系组建,目标制订,运行管理,评估 表彰工作。由公司塑料部经理出任推行委员会主任委员,设执行委员若干名,下设活 动小组若干个(组织图见附表1)。日常工作分工是:设备课人员负责TPM活动有关 体系文件的标准化制作,活动项目跟踪管理,维修作业管理,并对班组长熟练工进行 设备点检维护作业和设备操作规程培训。生产课人员负责对操作人员进行现场改善提 案,6S管理培训,督促生产操作人员按TPM活动的体系文件规定执行点检,维护, 修理和操作;积极参与现场改善提案管理活动。品管课负责TPM活动后QC成果图表 资料的搜集整理,检查评估TPM活动目标达成状况。 5.TPM活动小组的建立 5.1 TPM活动强调的是与生产活动有关的全员参与自主保全改善。由于我们公司的规模小、设备简单,TPM推行委员会决定成立如下三种类型TPM活动小组若干个,各设组长一名:(1)自主保全组 (2)自主保全专业组 (3)课题改善组 5.2 自主保全组根据生产机组状况又分为网袋加工组、网袋制造组,缠绕管制造组。目的是自己使用的设备自己管理和维护,降低设备故障率,实现设备的良好运行。各小组 组建按附表2要求填写《TPM自主保全小组人员登记表》报设备课备案,经推行委员会 主任批准后成立。主要工作是进行日常6S管理和设备日常点检维护。 5.3 自主保全专业组主要工作是针对设备开展的专门维护。有计划的定期点检,周期性保养,有计划大修等活动就是专业保全。专业组人员由设备课提名,按附表3要求填写 《TPM活动专业组人员登记表》报设备课备案,经推行委员会主任批准后成立(应包含 机械,电器专业资格人员,设备使用和维修人员,生产和品质管理人员)。 5.4 课题改善组是在生产过程中,作业人员可以根据目前生产流程、生产设备存在的问题提出改善提案。改善提案活动要求全员参与,由员工个人或班组自主提出,填写《改 善提案申报和评审表》(附表4)报设备课备案进行跟踪管理。每月由TPM推行委员会 对设备课汇总的改善提案进行评审,合理化提案一律奖励,如改善提案被采纳并能产 生巨大经济效益的则进行重奖,详见奖励方案。通过各种改善活动提高操作人员的技 术水平和提高企业的素质。 6.TPM活动的推行方法

解析tmp是什么文件

解析tmp是什么文件 tmp是什么文件 在系统C盘下\Windows\Temp文件夹中,经常看到很多的TMP格 式文件。TMP、TEMP和TMP文件是各种软件或这类文件运行时系统 产生的临时文件,在访问网站的时候电脑自动保存下来的图片等各 种网站临时文件,也可以说是垃圾文件或者其他程序没有删除而生的。而且在该文件夹中还有其他一些类型的文件,对于这类文件, 留在系统里没有什么价值,直接将这些文件删除。不要害怕会带来 什么不良影响的,否则会带来这些垃圾越来越多会最后会影响电脑 运行速度,同时如果不小心上网中了网页木马的话,这些木马病毒 隐藏在Temp文件夹中的可能性也比较大!所以temp里面的文件应该要经常定期清理,删除tmp文件的方法有两种: (1)直接进到C盘\Windows\Temp文件夹下全选进行删除。 (2)是用360安全卫士“电脑清理”功能全面清除包括TMP格式 文件在内的全部电脑垃圾 tmp文件用什么打开tmp文件一般是临时文件,容量都是为0字节。这些文件可能是系统被误关机或者系统软件运行时产生的,这 类文件一般是没有什么价值的,可直接将其删除,但将它们删除后 一会儿又有了。对此,解决办法是进到C:WindowsSystem文件夹, 把mdm.exe删除掉,再到“运行”窗口中输入“msconfig”并回车,在“启动”选项卡中把“MachineDebugManager”项的钩钩取消即可,还有另外一个禁止tmp文件产生的办法就是在IE里面进行设置,打 开IE“工具”--“Internet选项”--“高级”选项卡--选中“禁用 脚本调试”项,同样可以禁止这些TMP垃圾文件产生。至于有人又 问tmp文件用什么打开。能看到文件里面的内容吗?这里告诉你tmp 文件里面没什么内容,字节数量都是为0的,你也无法从里面看到 什么,它们同时也是打不开的,所以不必纠缠于如何打开tmp文件,

win10系统删除tmp文件的方法步骤

win10系统删除tmp文件的方法步骤 win10系统删除tmp文件的方法步骤 方法步骤: 1、Windows10系统下,右键点击开始图标,在弹出的选项框中点击“运行”,或者按住键盘的Windows+R快捷组合键,调出“运行”命令窗口。如图所示; 2、在弹出的“运行”命令对话窗口中的输入命令栏中输入“%tmp% ”命令。然后再点击“确定”按钮。如图所示; 3、点击确定按钮后,这个时候会打开Win10“临时文件夹”对话窗口。如图所示;

4、在临时文件夹窗口中,选中所有文件,点击鼠标右键,在弹出的选项框中选择“删除”选项命令,并将文件删除。如图所示; 5、在弹出的删除确认对话框中,点击“是”按钮。确认删除选项。如图所示; 6、接着在计算机桌面或者新建文件夹中。点击鼠标右键,在弹出的选项框中,依次点击“新建”–》“文本文档”命令选项。新建一个空白的文本文档。如图所示;

7、文本文档新建好以后,将其打开。并在文档中输入 “@echo off del “%tmp%\*.*” /s /q /f FOR /d %%p IN (“%tmp%\*.*”)DO rmdir “%%p” /s /q” 以上命令。如图所示; 8、命令输入好以后。依次点击“文件”–“另存为”选项。如图所示;

9、点击另存为后,这个时候会打开另存为对话框。在另存为对话框中,将文件名保存为“自动清理.bat”,并点击保存按钮。如图所示; 10、保存之后,在文件夹中可看到保存的批处理文件。如图所示; 11、运行批处理文件后,会对临时文件进行自动清理。如图所示;

12、再次按住键盘的Windows+R快捷组合键,调出“运行”命令窗口。如图所示; 13、在弹出的“运行”命令对话窗口中的输入命令栏中输入“shell:Startup”命令。然后再点击“确定”按钮。如图所示;

AIX扩展tmp文件系统

AIX扩展/tmp文件系统 利用率检查 /tmp利用率达到了80%,划分容量为3G,现准备将其扩大到4G [ocs_8_1-!:/ocs]df -g Filesystem GB blocks Free %Used Iused %Iused Mounted on /dev/hd4 2.00 1.88 6% 5805 2% / /dev/hd2 5.00 3.09 39% 43267 6% /usr /dev/hd9var 6.00 5.69 6% 4864 1% /var /dev/hd3 3.00 0.63 80% 230 1% /tmp /dev/fwdump 3.25 3.25 1% 20 1% /var/adm/ras/platform /dev/hd1 10.00 9.90 2% 660 1% /home /proc - - - - - /proc /dev/hd10opt 2.00 1.92 5% 1709 1% /opt /dev/lv_soft 30.00 29.78 1% 44 1% /soft /dev/lv_oracle 10.00 6.21 38% 18540 2% /oracle /dev/lv_tt1 238.50 226.75 5% 2967 1% /tt /dev/lv_ocs1 238.50 218.10 9% 115065 1% /ocs 实施步骤 先扩备机,再扩主机 以扩展OCS4时的步骤为例: 1)smitty chfs 2)

3) 按TAB键,修改单位Unit Size:G 4)

修改Number of units:4(扩大1G) 知识扩展: 3G Bytes = 6291456 *512 Bytes = 1024*1024*1024*3 Bytes = 1024*1024*1024 *3*8 Bit = 25769803776 Bit 4G Bytes = 8388608 *512 Bytes 5G Bytes = 10485760 *512 Bytes 5)df -g检查

怎样打开和删除tmp格式文

在实际操作电脑的过程中,常会在系统中看到很多后缀名为.t m p格式的文件,系统中经常看到一些莫名其妙的t m p格式的文件。如果想打开或者删除这些tm p文件,系统会提示无法删除。那么t m p是什么文件,t m p文件怎么打开又该怎么删除呢?笔者给大家做个简单的介绍。 临时文件产生t m p文件 在系统中c:wi n do w st e mp文件夹中,我们经常会发现一些后缀名为tm p 的文件,在该文件夹中的这些文件其实都是临时文件。它们可能是系统被误关机,或者其它程序没有删除而生的。而且在该文件夹中还有其它一些类型的文件,对于这类文件,一般没有什么使用价值,我们可以直接将其删除。 另外我们打开附件的“系统工具”下的“磁盘清理”,然后选择要清理的分区,一般首选为系统分区,即c盘。这样系统则会提示正在扫描,稍候片刻即会打开磁盘清理项目窗口,在“要删除的文件”中选中所有的文件,然后单击“确定”按钮即可。将这些临时文件清理后将可以获得更多的磁盘使用空间。 调试管理器产生t m p文件 很多细心的朋友,还会在c:w i nd o ws目录中发现一些文件名很长的tm p 文件,而且其容量都是为0字节,将它们删除后一会儿又有了。其实这些文件都是由调试管理器程序产生的。对此,我们只需要进入c:w in d ow s sy s te m文件夹,将其中的m d m.e x e删除或重命名,然后再“运行”窗口中输入“m sc o nf i g”并回车,在“启动”选项卡中把“m ac h in e d e b ug ma n ag e r”项取消即可。另外提醒大家还可以打开i e“工具”菜单下的“in t er n e t选项”命令,然后切换到“高级”选项卡,选中“禁用脚本调试”项,同样可以禁止这些0字节的t m p文件产生。

文件操作

说明:XXX为考试学生的姓名全拼。 一、根据要求完成如下操作。(共100分) 1、修改虚拟机hostname为:XXX (5分)1 2、用cat命令在tmp目录下新建文件xxx.txt ,并编辑(添加)添加如下内容:(10分) # cat > /tmp/xxx.txt 1.My name is xxx. 2.I am a student. 3.I am participating in the test. 4.Wishes us to succeed. 5.Thank you! 3、修改/tmp/xxx.txt的权限为764,属主为mail ,属组为mail 。(10分) # chmod 764 /tmp/xxx.txt # chown mail.mail /tmp/xxx.txt 4、使用长格式列出/tmp/xxx.txt文件,以验证是否新建及修改成功。(5分)# ll /tmp/xxx* 5、改变当前目录为/tmp ,新建目录wlgc 。显示当前工作目录的绝对路径。(15分) # cd /tmp # mkdir /tmp/wlgc 或 # mkdir wlgc # pwd

6、将/tmp/xxx.txt文件移动到wlgc目录下,改名为1234.txt 。(5分) # mv /tmp/xxx.txt /tmp/wlgc/1234.txt 7、使用less命令查看1234.txt文件,以检验文件内容是否与xxx.txt文件的内容一致。(5分) # less /tmp/wlgc/1234.txt 8、将文件1234.txt复制到/tmp目录下,备份wlgc目录下所有文件及目录,并命名为5678.tar。(10分) # cp /tmp/wlgc/1234.txt /tmp/1234.txt # tar –cvf 5678.tar /tmp/wlgc 9、将5678.tar保存在/tmp/wlgc目录下。(5分) # mv /tmp/5678.tar /tmp/wlgc/5678.tar

贴牌生产协议.tmp

贴牌生产协议 合同编号: 签订地点: 签订时间: 甲方: 乙方: 为了能充分发挥双方企业资源优势,本着互利双赢、共同发展的原则,甲乙双方就贴牌生产项目达成如下条款: 一、双方交换企业资信材料,且必须真实、有效,否则,由此带来的损失由违约方承担。 1、营业执照(副本)复印件; 2、税务登记证(副本)复印件; 3、组织机构代码证(副本)复印件; 4、商标受理书(注册证); 5、企业质量管理体系证书复印件; 6、乙方应提供产品爆炸图和结构明细、零配件明细表、主板原理图、控制面板原理图、关键元器件 规格书等以及他相关的检证证书与检验检测报告。 二、协议范围 甲方委托乙方贴牌生产牌系列产品,采用甲方的厂名、厂址、品牌标识;乙方应确保这些产品是不侵犯任何第三方知识产权和合法权益的合格产品。 甲方利用自身的营销网络开发市场、销售贴牌产品;乙方利用其技术、设备、人力等资源生产制造符合甲方要求并经甲方认可的贴牌产品。 贴牌产品完全由甲方销售,乙方不负责销售,乙方不得将甲方委托生产的贴牌产品转卖给任何第三方。 双方合作期满后或终止合作后,乙方不得以任何形式再生产或销售有甲方品牌标识的产品,乙方若违反规定,甲方有权乙方按销售所得的10倍进行赔偿。 甲方有权派员监督、见车贴牌产品的原料、配件、生产整个过程、产品质量等,乙方应予以全力配合与协助。 三、产品名称、型号、价格(RMB) 产品价格应包含内外包装、说明书、标贴、合格证、保修卡等相关包装费用(不含增值税发票),具体承担情况见产品价格表。 四、交(提)货地点、方式及费用 乙方直接送货到甲方指定仓库或双方协定的交货点,单价含运费; 乙方严格按订购计划单中规定的数量和日期准时交货;乙方在装车或交付托运后须在2小时内以电话或传真的形式通知甲方发货情况及预计到货时间、地点,以便甲方及时提货。 五、产品包装与防护要求

WORD中的tmp文件

tmp文件大家在使用Windows操作系统的时候,可能会经常在C盘根目录发现一些后缀名为TMP的文件,还会在Windows目录里发现一个TEMP的目录。一些刚接触电脑的用户可能会觉得莫名其妙,这是什么东西来的,我没建立过这样的文件啊! 其实,这是Windows产生的临时文件,本质上和虚拟内存没什么两样,只不过临时文件比虚拟内存更具有针对性,单独为某个程序服务而已。还有,如果您是使用WORD编辑文档,也会在WORD的安装目录里发现一批~开头的,TMP结尾的文件,这是WORD产生的临时文件,但如果你的WORD还没关闭,想删除它们,却可能会发现怎么都删除不了,系统反复提示读写保护,这又如何是好呢?下面就综合谈谈这些临时文件及处理的办法:一般来说,你当前运行着大型的工具软件的时候,都不应该去碰临时文件,比如Photoshop会在处理图形时候产生巨大的临时文件,如果你认为这不是你创建的文件企图删除,可能会导致Photoshop死机。你当前没有运行程序的话,发现的临时文件都可以删除,以免它们天长日久堆积如山,占据磁盘空间还是小事,关键是它们又多又散乱,会给磁盘扫描整理带来时间上的无谓消耗,也可能会造成文件分配表混乱,导致文件交叉链接的错误。但是不能所有的临时文件都一概而论。比如,C盘根目录的TEMP目录,是很多工具程序临时文件的指向目录,没有这个目录的话,临时文件无法创建,这些工具软件就很可能会出错,所以要删除的话,只应该清空里面的临时文件垃圾,而不能把TEMP这个目录都干掉了;Windows里通常也有一个TEMP文件,是系统默认的临时文件的放置地方,也不建议连目录都删除了,定期清空里面的垃圾即可。还有就是WORD安装目录里的临时文件,在你使用WORD的时候,不要去删除它们,这些~开头,TMP结尾的文件是WORD程序工作要用到的,多处于读写保护状态,你想删除它们也删除不了;如果你在使用WORD时候死机,下次开机进入Windows的时候,也不要先删除它们,应该打开WORD,WORD会从这些临时文件里读取上次你死机时候最新保存的结果,让你最大限度地恢复上次的工作。其实这就是WORD恢复上次文档的原理。等你另存了文件后,再删除它们也不迟。什么情况下TEMP文件非删除不可呢?那就是后台没运行程序,又反复出现同一种现象相同的故障、而且确认不是系统硬件导致问题的时候,比如打印出问题,打印机老是不认你的纸张,老提示你没放纸,你就应该删除Windows目录下的TEMP里的文件;还有就是磁盘扫描出现交叉链接的错误,又不能自动纠正,你应该尝试删除临时文件再进行一次扫描试试。注意哦,WORD安装目录下的某些临时文件是隐藏的,你可能要用到清理临时文件的专门小工具才能删除它们,否则就得到该目录里先显出所有文件,再手工删除了。快速清除在Windows在安装和使用过程中都会产生相当多的垃圾文件,包括临时文件(如:*.tmp、*._mp)日志文件(*.log)、临时帮助文件(*.gid)、磁盘检查文件(*.chk)、临时备份文件(如:*.old、*.bak)以及其他临时文件。步骤很简单就两步!新建一个记事本,把下面的文字复制进去,点“另存为”,路径选“桌面”,保存类型为“所有文件”,文件名为“清除系统LJ.bat”,就完成了。记住后缀名一定要是.bat,ok!你的垃圾清除器就这样制作成功了!双击它就能很快地清理垃圾文件,大约一分钟不到。======就是下面的文字(这行不用复制)====================== @echo off echo 正在清除系统垃圾文件,请稍等...... del /f /s /q %systemdrive%\*.tmp del /f /s /q %systemdrive%\*._mp del /f /s /q %systemdrive%\*.log del /f /s /q %systemdrive%\*.gid del /f /s /q %systemdrive%\*.chk del /f /s /q %systemdrive%\*.old del /f /s

win10系统删除tmp文件的方法步骤

win10系统删除tmp文件的方法步骤 Win10系统中tmp文件删除不了怎么办?有win10系统用户反应,有后缀名为TMP的文件怎么也删除不了,当电脑开机重启之后又会出现,那么遇到这个问题应该如何解决呢?接下来就为大家分享win10系统删除tmp文件的方法步骤。 方法步骤: 1、Windows10系统下,右键点击开始图标,在弹出的选项框中点击“运行”,或者按住键盘的Windows+R 快捷组合键,调出“运行”命令窗口。如图所示; 2、在弹出的“运行”命令对话窗口中的输入命令栏中输入“%tmp% ”命令。然后再点击“确定”按钮。如图所示; 3、点击确定按钮后,这个时候会打开Win10“临时文件夹”对话窗口。如图所示;

4、在临时文件夹窗口中,选中所有文件,点击鼠标右键,在弹出的选项框中选择“删除”选项命令,并将文件删除。如图所示; 5、在弹出的删除确认对话框中,点击“是”按钮。确认删除选项。如图所示; 6、接着在计算机桌面或者新建文件夹中。点击鼠标右键,在弹出的选项框中,依次点击“新建”–》“文本文档”命令选项。新建一个空白的文本文档。如图所示;

7、文本文档新建好以后,将其打开。并在文档中输入 “@echo off del “%tmp%\*.*” /s /q /f FOR /d %%p IN (“%tmp%\*.*”)DO rmdir “%%p” /s /q” 以上命令。如图所示; 8、命令输入好以后。依次点击“文件”–“另存为”选项。如图所示;

9、点击另存为后,这个时候会打开另存为对话框。在另存为对话框中,将文件名保存为“自动清理.bat”,并点击保存按钮。如图所示; 10、保存之后,在文件夹中可看到保存的批处理文件。如图所示; 11、运行批处理文件后,会对临时文件进行自动清理。如图所示; 12、再次按住键盘的Windows+R快捷组合键,调出“运行”命令窗口。如图所示;

TMP006红外传感器技术文档

TMP006红外传感器技术文档本用户指南描述了TMP006,非接触红外(IR)传感器,具有数字接口的功能和操作。本文讨论的最重要的应用相关的设计考虑使用的TMP006的表面温度测量时,以达到最佳性能 内容 1. 介绍……………………………………………………………………………………………... 2.系统概述………………………………………………………………………………………... 3.TMP006物体温度测量设置…………………………………………………………………... 4.TMP006布局指南……………………………………………………………………………... 5.物体温度计算…………………………………………………………………………………... 6.校准系统………………………………………………………………………………………... 图目录 1. TMP006在目标物体温度测量设置 2.红外信号的百分比由传感器吸收与入射角 3.从之间的TMP006目标物体的大小与距离的关系 4.TMP006两层PCB:顶层 5.TMP006土地格局和铜填充:第1层的放大图 6.TMP006两层PCB:底层 7.寻找校准功能与TOBJ4的斜率- TDIE4来计算S0 1.介绍 1.1术语和定义 下面的列表总结了许多本文档中使用的术语和缩写。 PCB:印刷电路板;具体是指,该TMP006被安装在印刷电路板上。 IR:红外或辐射发生在红外波长(0.7微米到1000微米)。该TMP006采用IR波长从4微米到8微米。 红外线感应器,感应器:该TMP006集成电路器件内的红外线传感器。 目标对象,目标:针对该TMP006测量温度的对象。 1.2如果您需要协助 如果您对TMP006的问题,在加入与https://www.360docs.net/doc/6c1427221.html,在E2E?论坛的线性放大器温度传感器的应用团队的讨论。包括TMP006为您张贴的主题词。 1.3信息关于注意和警告 本文件包含注意事项。

相关主题
相关文档
最新文档