STM32F103程序运行启动过程解析

STM32F103程序运行启动过程解析
STM32F103程序运行启动过程解析

STM32启动过程解析

1、通过boot引脚设置可以将中断向量表定位于SRAM区,即起始地址为0x2000000,同时复位后PC指针位于0x2000000处;

2、通过boot引脚设置可以将中断向量表定位于FLASH区,即起始地址为0x8000000,同时复位后PC指针位于0x8000000处;

3、通过boot引脚设置可以将中断向量表定位于内置Bootloader区,本文不对这种情况做论述;

而Cortex-M3内核规定,起始地址必须存放堆顶指针,而第二个地址则必须存放复位中断入口向量地址,这样在Cortex-M3内核复位后,会自动从起始地址的下一个32位空间取出复位中断入口向量,跳转执行复位中断服务程序。对比ARM7/ARM9内核,Cortex-M3内核则是固定了中断向量表的位置而起始地址是可变化的。

有了上述准备后,下面以STM32的2.02固件库提供的启动文件“stm32f10x_vector.s”为模板,对STM32的启动过程做一个简要而全面的解析。

程序清单一:

;文件“stm32f10x_vector.s”,其中注释为行号

DATA_IN_ExtSRAM EQU 0 ;1

Stack_Size EQU 0x00000400 ;2

AREA STACK, NOINIT, READWRITE, ALIGN = 3 ;3

Stack_Mem SPACE Stack_Size ;4

__initial_sp ;5

Heap_Size EQU 0x00000400 ;6

AREA HEAP, NOINIT, READWRITE, ALIGN = 3 ;7

__heap_base ;8

Heap_Mem SPACE Heap_Size ;9

__heap_limit ;10

THUMB ;11

PRESERVE8 ;12

IMPORT NMIException ;13

IMPORT HardFaultException ;14

IMPORT MemManageException ;15

IMPORT BusFaultException ;16

IMPORT UsageFaultException ;17

IMPORT SVCHandler ;18

IMPORT DebugMonitor ;19

IMPORT PendSVC ;20

IMPORT SysTickHandler ;21

IMPORT WWDG_IRQHandler ;22

IMPORT PVD_IRQHandler ;23

IMPORT TAMPER_IRQHandler ;24

IMPORT RTC_IRQHandler ;25

IMPORT FLASH_IRQHandler ;26

IMPORT EXTI0_IRQHandler ;28

IMPORT EXTI1_IRQHandler ;29

IMPORT EXTI2_IRQHandler ;30

IMPORT EXTI3_IRQHandler ;31

IMPORT EXTI4_IRQHandler ;32

IMPORT DMA1_Channel1_IRQHandler ;33 IMPORT DMA1_Channel2_IRQHandler ;34 IMPORT DMA1_Channel3_IRQHandler ;35 IMPORT DMA1_Channel4_IRQHandler ;36 IMPORT DMA1_Channel5_IRQHandler ;37 IMPORT DMA1_Channel6_IRQHandler ;38 IMPORT DMA1_Channel7_IRQHandler ;39 IMPORT ADC1_2_IRQHandler ;40

IMPORT USB_HP_CAN_TX_IRQHandler ;41 IMPORT USB_LP_CAN_RX0_IRQHandler ;42 IMPORT CAN_RX1_IRQHandler ;43 IMPORT CAN_SCE_IRQHandler ;44 IMPORT EXTI9_5_IRQHandler ;45

IMPORT TIM1_BRK_IRQHandler ;46 IMPORT TIM1_UP_IRQHandler ;47 IMPORT TIM1_TRG_COM_IRQHandler ;48 IMPORT TIM1_CC_IRQHandler ;49 IMPORT TIM2_IRQHandler ;50

IMPORT TIM3_IRQHandler ;51

IMPORT TIM4_IRQHandler ;52

IMPORT I2C1_EV_IRQHandler ;53

IMPORT I2C1_ER_IRQHandler ;54

IMPORT I2C2_EV_IRQHandler ;55

IMPORT I2C2_ER_IRQHandler ;56

IMPORT SPI1_IRQHandler ;57

IMPORT SPI2_IRQHandler ;58

IMPORT USART1_IRQHandler ;59

IMPORT USART2_IRQHandler ;60

IMPORT USART3_IRQHandler ;61

IMPORT EXTI15_10_IRQHandler ;62 IMPORT RTCAlarm_IRQHandler ;63 IMPORT USBWakeUp_IRQHandler ;64 IMPORT TIM8_BRK_IRQHandler ;65 IMPORT TIM8_UP_IRQHandler ;66 IMPORT TIM8_TRG_COM_IRQHandler ;67 IMPORT TIM8_CC_IRQHandler ;68 IMPORT ADC3_IRQHandler ;69

IMPORT FSMC_IRQHandler ;70

IMPORT TIM5_IRQHandler ;72

IMPORT SPI3_IRQHandler ;73

IMPORT UART4_IRQHandler ;74

IMPORT UART5_IRQHandler ;75

IMPORT TIM6_IRQHandler ;76

IMPORT TIM7_IRQHandler ;77

IMPORT DMA2_Channel1_IRQHandler ;78 IMPORT DMA2_Channel2_IRQHandler ;79 IMPORT DMA2_Channel3_IRQHandler ;80 IMPORT DMA2_Channel4_5_IRQHandler ;81 AREA RESET, DATA, READONLY ;82 EXPORT __Vectors ;83

__Vectors ;84

DCD __initial_sp ;85

DCD Reset_Handler ;86

DCD NMIException ;87

DCD HardFaultException ;88

DCD MemManageException ;89

DCD BusFaultException ;90

DCD UsageFaultException ;91

DCD 0 ;92

DCD 0 ;93

DCD 0 ;94

DCD 0 ;95

DCD SVCHandler ;96

DCD DebugMonitor ;97

DCD 0 ;98

DCD PendSVC ;99

DCD SysTickHandler ;100

DCD WWDG_IRQHandler ;101

DCD PVD_IRQHandler ;102

DCD TAMPER_IRQHandler ;103

DCD RTC_IRQHandler ;104

DCD FLASH_IRQHandler ;105

DCD RCC_IRQHandler ;106

DCD EXTI0_IRQHandler ;107

DCD EXTI1_IRQHandler ;108

DCD EXTI2_IRQHandler ;109

DCD EXTI3_IRQHandler ;110

DCD EXTI4_IRQHandler ;111

DCD DMA1_Channel1_IRQHandler ;112 DCD DMA1_Channel2_IRQHandler ;113 DCD DMA1_Channel3_IRQHandler ;114

DCD DMA1_Channel5_IRQHandler ;116 DCD DMA1_Channel6_IRQHandler ;117 DCD DMA1_Channel7_IRQHandler ;118 DCD ADC1_2_IRQHandler ;119

DCD USB_HP_CAN_TX_IRQHandler ;120 DCD USB_LP_CAN_RX0_IRQHandler ;121 DCD CAN_RX1_IRQHandler ;122

DCD CAN_SCE_IRQHandler ;123

DCD EXTI9_5_IRQHandler ;124

DCD TIM1_BRK_IRQHandler ;125

DCD TIM1_UP_IRQHandler ;126

DCD TIM1_TRG_COM_IRQHandler ;127 DCD TIM1_CC_IRQHandler ;128

DCD TIM2_IRQHandler ;129

DCD TIM3_IRQHandler ;130

DCD TIM4_IRQHandler ;131

DCD I2C1_EV_IRQHandler ;132

DCD I2C1_ER_IRQHandler ;133

DCD I2C2_EV_IRQHandler ;134

DCD I2C2_ER_IRQHandler ;135

DCD SPI1_IRQHandler ;136

DCD SPI2_IRQHandler ;137

DCD USART1_IRQHandler ;138

DCD USART2_IRQHandler ;139

DCD USART3_IRQHandler ;140

DCD EXTI15_10_IRQHandler ;141

DCD RTCAlarm_IRQHandler ;142

DCD USBWakeUp_IRQHandler ;143

DCD TIM8_BRK_IRQHandler ;144

DCD TIM8_UP_IRQHandler ;145

DCD TIM8_TRG_COM_IRQHandler ;146 DCD TIM8_CC_IRQHandler ;147

DCD ADC3_IRQHandler ;148

DCD FSMC_IRQHandler ;149

DCD SDIO_IRQHandler ;150

DCD TIM5_IRQHandler ;151

DCD SPI3_IRQHandler ;152

DCD UART4_IRQHandler ;153

DCD UART5_IRQHandler ;154

DCD TIM6_IRQHandler ;155

DCD TIM7_IRQHandler ;156

DCD DMA2_Channel1_IRQHandler ;157 DCD DMA2_Channel2_IRQHandler ;158

DCD DMA2_Channel4_5_IRQHandler ;160 AREA |.text|, CODE, READONLY ;161 Reset_Handler PROC ;162

EXPORT Reset_Handler ;163

IF DATA_IN_ExtSRAM == 1 ;164

LDR R0,= 0x00000114 ;165

LDR R1,= 0x40021014 ;166

STR R0,[R1] ;167

LDR R0,= 0x000001E0 ;168

LDR R1,= 0x40021018 ;169

STR R0,[R1] ;170

LDR R0,= 0x44BB44BB ;171

LDR R1,= 0x40011400 ;172

STR R0,[R1] ;173

LDR R0,= 0xBBBBBBBB ;174

LDR R1,= 0x40011404 ;175

STR R0,[R1] ;176

LDR R0,= 0xB44444BB ;177

LDR R1,= 0x40011800 ;178

STR R0,[R1] ;179

LDR R0,= 0xBBBBBBBB ;180

LDR R1,= 0x40011804 ;181

STR R0,[R1] ;182

LDR R0,= 0x44BBBBBB ;183

LDR R1,= 0x40011C00 ;184

STR R0,[R1] ;185

LDR R0,= 0xBBBB4444 ;186

LDR R1,= 0x40011C04 ;187

STR R0,[R1] ;188

LDR R0,= 0x44BBBBBB ;189

LDR R1,= 0x40012000 ;190

STR R0,[R1] ;191

LDR R0,= 0x44444B44 ;192

LDR R1,= 0x40012004 ;193

STR R0,[R1] ;194

LDR R0,= 0x00001011 ;195

LDR R1,= 0xA0000010 ;196

STR R0,[R1] ;197

LDR R0,= 0x00000200 ;198

LDR R1,= 0xA0000014 ;199

STR R0,[R1] ;200

ENDIF ;201

IMPORT __main ;202

LDR R0, =__main ;203

BX R0 ;204

ENDP ;205

ALIGN ;206

IF :DEF:__MICROLIB ;207

EXPORT __initial_sp ;208

EXPORT __heap_base ;209

EXPORT __heap_limit ;210

ELSE ;211

IMPORT __use_two_region_memory ;212

EXPORT __user_initial_stackheap ;213

__user_initial_stackheap ;214

LDR R0, = Heap_Mem ;215

LDR R1, = (Stack_Mem + Stack_Size) ;216

LDR R2, = (Heap_Mem + Heap_Size) ;217

LDR R3, = Stack_Mem ;218

BX LR ;219

ALIGN ;220

ENDIF ;221

END ;222

ENDIF ;223

END ;224

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

如程序清单一,STM32的启动代码一共224行,使用了汇编语言编写,这其中的主要原因下文将会给出交代。现在从第一行开始分析:

第1行:定义是否使用外部SRAM,为1则使用,为0则表示不使用。此语行若用C语言表达则等价于:λ

#define DATA_IN_ExtSRAM 0

第2行:定义栈空间大小为0x00000400个字节,即1Kbyte。此语行亦等价于:λ

#define Stack_Size 0x00000400

第3行:伪指令AREA,表示λ

第4行:开辟一段大小为Stack_Size的内存空间作为栈。λ

第5行:标号__initial_sp,表示栈空间顶地址。λ

第6行:定义堆空间大小为0x00000400个字节,也为1Kbyte。λ

第7行:伪指令AREA,表示λ

第8行:标号__heap_base,表示堆空间起始地址。λ

第9行:开辟一段大小为Heap_Size的内λ存空间作为堆。

第10行:标号__heap_limit,表示堆空间结束地址。λ

第11行:告诉编译器使用THUMB指令集。λ

第12行:告诉编译器以8字节对齐。λ

第13—81行:IMPORT指令,指示后续符号是在外部文件定义的(类似C语言中的全局

变量声明),而下文可能会使用到这些符号。λ

第82行:定义只读数据段,实际上是在CODE区(假设STM32从FLASH启动,则此中断向量表起始地址即为0x8000000)λ

第83行:将标号__Vectors声明为全局标号,这样外部文件就可以使用这个标号。λ

第84行:标号__Vectors,表示中断向量表入口地址。λ

第85—160行:建立中断向量表。λ

第161行:λ

第162行:复位中断服务程序,PROC…ENDP结构表示程序的开始和结束。λ

第163行:声明复位中断向量Reset_Handler为全局属性,这样外部文件就可以调用此复位中断服务。λ

第164行:IF…ENDIF为预编译结构,判断是否使用外部SRAM,在第1行中已定义为“不使用”。λ

第165—201行:此部分代码的作用是设置FSMC总线以支持SRAM,因不使用外部SRAM 因此此部分代码不会被编译。λ

第202行:声明__main标号。λ

第203—204行:跳转__main地址执行。λ

第207行:IF…ELSE…ENDIF结构,判断是否使用DEF:__MICROLIB(此处为不使用)。λ

第208—210行:若使用DEF:__MICROLIB,则将__initial_sp,__heap_base,__heap_limit 亦即栈顶地址,堆始末地址赋予全局属性,使外部程序可以使用。λ

第212行:定义全局标号__use_two_region_memory。λ

第213行:声明全局标号__user_initial_stackheap,这样外程序也可调用此标号。λ

第214行:标号__user_initial_stackheap,表示用户堆栈初始化程序入口。λ

第215—218行:分别保存栈顶指针和栈大小,堆始地址和堆大小至R0,R1,R2,R3寄存器。λ

第224行:程序完毕。λ

以上便是STM32的启动代码的完整解析,接下来对几个小地方做解释:

1、 AREA指令:伪指令,用于定义代码段或数据段,后跟属性标号。其中比较重要的一个标号为“READONLY”或者“READWRITE”,其中 “READONLY”表示该段为只读属性,联系到STM32的内部存储介质,可知具有只读属性的段保存于FLASH区,即0x8000000地址后。而 “READONLY”表示该段为“可读写”属性,可知“可读写”段保存于SRAM区,即0x2000000地址后。由此可以从第3、7行代码知道,堆栈段位于SRAM空间。从第82行可知,中断向量表放置与FLASH区,而这也是整片启动代码中最先被放进FLASH区的数据。因此可以得到一条重要的信息:0x8000000地址存放的是栈顶地址__initial_sp,0x8000004地址存放的是复位中断向量 Reset_Handler(STM32使用32位总线,因此存储空间为4字节对齐)。

2、 DCD指令:作用是开辟一段空间,其意义等价于C语言中的地址符“&”。因此从第84行开始建立的中断向量表则类似于使用C语言定义了一个指针数组,其每一个成员都是一个函数指针,分别指向各个中断服务函数。

3、标号:前文多处使用了“标号”一词。标号主要用于表示一片内存空间的某个位置,等价于C语言中的“地址”概念。地址仅仅表示存储空间的一个位置,从C语言的角度来看,变量的地址,数组的地址或是函数的入口地址在本质上并无区别。

4、第202行中的__main标号并不表示C程序中的main函数入口地址,因此第204行也并不是跳转至main函数开始执行C程序。__main标号表示C/C++标准实时库函数里的一个

初始化子程序__main的入口地址。该程序的一个主要作用是初始化堆栈(对于程序清单一来说则是跳转 __user_initial_stackheap标号进行初始化堆栈的),并初始化映像文件,最后跳转C程序中的main函数。这就解释了为何所有的C 程序必须有一个main函数作为程序的起点——因为这是由C/C++标准实时库所规定的——并且不能更改,因为C/C++标准实时库并不对外界开发源代码。因此,实际上在用户可见的前提下,程序在第204行后就跳转至.c文件中的main函数,开始执行C程序了。

至此可以总结一下STM32的启动文件和启动过程。首先对栈和堆的大小进行定义,并在代码区的起始处建立中断向量表,其第一个表项是栈顶地址,第二个表项是复位中断服务入口地址。然后在复位中断服务程序中跳转??C/C++标准实时库的__main函数,完成用户堆栈等的初始化后,跳转.c文件中的 main函数开始执行C程序。假设STM32被设置为从内部FLASH启动(这也是最常见的一种情况),中断向量表起始地位为0x8000000,则栈顶地址存放于0x8000000处,而复位中断服务入口地址存放于0x8000004处。当STM32遇到复位信号后,则从0x80000004处取出复位中断服务入口地址,继而执行复位中断服务程序,然后跳转__main函数,最后进入mian函数,来到C的世界。

项目启动包括哪些内容

项目启动包括哪些内容 在项目管理中,启动阶段就是识别和开始一个新项目或新项目阶段的过程。为了确保以合适的理由开始合适的项目需要考虑许多因素。在一个重要项目上获得适当的甚至很小的一点成功比在一个不重要的项目上获得巨大成功更具有意义。一次,选择项目进行投资就像选择项目经理一样至关重要。 战略计划是选择项目的基础。组织的战略计划阐述了组织的经营理念、使命、目标、目的、战略。它还为IT项目的计划提供了依据。信息技术在组织中的功能通常是支持性的,因此,启动IT项目必须了解组织在目前和未来的技术需求。信息系统必须支持公司的主要业务目标。 启动IT项目有很多理由,但是最重要的是支持明确的业务目标。项目启动过程的任务包括进行项目干系人分析、可行性研究和初步需求文件。项目启动的输出或者结果包括:项目章程、项目经理的选择、项目关键约束和假设条件。 选择项目经理 项目启动阶段的一项重要工作就是选择项目经理。 项目经理要熟悉本行业,工作经验丰富。懂技术;懂得技术可以提高企业的生产力。对项目充满热情。 项目章程: 制定项目章程是制定一份正式批准项目或阶段的文件,并记录能反映项目干系人的需要和期望的初步要求的过程。在多阶段项目中,这一过程可用来确定或优化在以前的制定项目章程过程中所做的相关决策。 它在项目执行组织与项目发起组织(或客户,如果是外部项目的话)之间建立起伙伴关系。项目章程的批准,标志着项目的正式启动。在项目中,应尽早确认并任命项目经理,最好在制定项目章程时就任命,最晚也必须在规划开始之前。项目经理应该参与与指定项目章程,因为该项目章程将授权项目经理在项目活动中使用组织资源。

项目由项目以外的人员批准,如发起人、PMO(Project Management Office)或项目组指导委员会。项目启动者或发起人应该具有一定的职权,为项目提供资金。他们亲自编制项目章程,或授权项目经理代为编制。项目章程经启动者签字,即标志着项目获得批准。可能因为内部经营需要或外部影响而批准项目,故通常需要编制需求分析、商业分析或情况描述。通过编制项目章程,就可以把项目与组织的战略及日常运营工作联系起来。 输入:项目工作说明书、商业论证、合同、事业环境因素、组织过程资产 工具与技术:专家判断 输出:项目章程 项目章程的下一步是指定项目管理计划。 并且项目章程是:收集需求、定义范围、识别干系人的基础。 其中: 1、项目工作说明书(SOW)是对项目所需交付的产品或服务的叙述性说明。对于内部项目,项目启动者或发起人根据业务需要及对产品或服务的需求,来提供工作说明书。对于外部项目,工作说明书则有客户提供,可以是招标文件(例如:建议邀请书、信息要求书、投标邀请书)的一部分,或合同的一部分。SOW涉及: 业务需要。组织的业务需要可基于市场需求、技术进步、法律要求或政府法规。 产品范围描述。记录项目所需产出的产品的特征,以及这些产品或服务与项目所对应的业务需求之间的关系。战略计划。所有项目都应支持组织的战略目标。进行项目选择和排序时,应该考虑执行组织的战略计划。 2、商业论证 什么是项目章程:

WindowsXP启动过程概述

WindowsXP启动过程概述 从按下计算机开关启动计算机,到登入到桌面完成启动,一共经过了以下几个阶段: 1. 预引导(Pre-Boot)阶段; 2. 引导阶段; 3. 加载内核阶段; 4. 初始化内核阶段; 5. 登陆。 每个启动阶段的详细介绍 a) 预引导阶段 在按下计算机电源使计算机启动,并且在Windows XP专业版操作系统启动之前这段时间,我们称之为预引导(Pre-Boot)阶段,在这个阶段里,计算机首先运行Power On Self Test (POST),POST检测系统的总内存以及其他硬件设备的现状。如果计算机系统的BIOS(基础输入输出系统)是即插即用的,那么计算机硬件设备将经过检验以及完成配置。计算机的基础输入输出系统(BIOS)定位计算机的引导设备,然后MBR(Master Boot Record)被加载并运行。在预引导阶段,计算机要加载Windows XP的NTLDR文件。 b) 引导阶段 Windows XP Professional引导阶段包含4个小的阶段。 首先,计算机要经过初始引导加载器阶段(Initial Boot Loader),在这个阶段里,NTLDR 将计算机微处理器从实模式转换为32位平面内存模式。在实模式中,系统为MS-DOS保留640kb内存,其余内存视为扩展内存,而在32位平面内存模式中,系统(Windows XP Professional)视所有内存为可用内存。接着,NTLDR启动内建的mini-file system drivers,通过这个步骤,使NTLDR可以识别每一个用NTFS或者FAT文件系统格式化的分区,以便发现以及加载Windows XP Professional,到这里,初始引导加载器阶段就结束了。 接着系统来到了操作系统选择阶段,如果计算机安装了不止一个操作系统(也就是多系统),而且正确设置了boot.ini使系统提供操作系统选择的条件下,计算机显示器会显示一个操作系统选单,这是NTLDR读取boot.ini的结果。(至于操作系统选单,由于暂时条件不够,没办法截图,但是笔者模拟了一个,见图一。) 在boot.ini中,主要包含以下内容: [boot loader]

看门狗程序

TMS320F2812 Watchdog范例程序 FILE: Example_28xWatchdog.c // // TITLE: DSP28 Watchdog interrupt test program. // // ASSUMPTIONS: // // This program requires the DSP28 header files. To compile the // program as is, it should reside in the DSP28/examples/watchdog // sub-directory. // // As supplied, this project is configured for "boot to H0" operation. // // DESCRIPTION: // This program exercises the watchdog on the F2812/F2810 parts. // // First the watchdog is connected to the WAKEINT interrupt of the // PIE block. The code is then put into an infinite loop. // // The user can select to feed the watchdog key register or not // by commenting one line of code in the infinite loop. // // If the watchdog key register is fed by the KickDog function // then the WAKEINT interrupt is not taken. If the key register // is not fed by the KickDog function then WAKEINT will be taken. // // Watch Variables: // LoopCount for the number of times through the infinite loop // WakeCount for the number of times through WAKEINT // //########################################################################### // // Ver | dd mmm yyyy | Who | Description of changes // =====|=============|======|=============================================== // 0.57| 29 May 2002 | L.H. | Initial Release //########################################################################### // Step 0. Include required header files // DSP28_Device.h: device specific definitions #include statements for // all of the peripheral .h definition files. // DSP28_Example.h is specific for the given example. #include "DSP28_Device.h"

机动车辆启动过程的几种图象分析

精心整理 机动车辆启动过程的几种图象分析 在分析的过程中涉及的公式有:;;在匀加速运动阶段、;在达到额定功率以后。以上各式中:表示机车发动机功率,即机车发动机牵引力的功率,为机车启动的加速度,表示机车牵引力,并不表示机车受到的合外力,表示以额定功率运动过程的牵引力做功。所以可以得出,机车的启动过程 机动车的启动过程涉及到的图象有:图象、图象(为发动机的牵引力)、图象(为发动机功率)、图象、图象等。 .和图象: 从图象可以看出,汽车在做初速度为零的匀加速运动,在做加速度减小的变加速运动,后做匀速运动。汽车做匀加速运动的最大速度,而最终做匀速运动的速度,从图象可以看出,汽车的额定功率。由得汽车受到的阻力: 由题意分析可知,汽车在匀加速运动过程中受到的牵引力最大,当匀加速运动过程的速度为时功率恰好达到,所以最大牵引力:

:; 。解得汽车的质量 在内为,则, 。解得: .图象和图象: 为,随着机车速度的不断增加,、、三个物理量随之发生变化。下面就机车以恒定加速度启动为例来 ①图甲是图象,图象以、作为纵横坐标,直接反应了与之间的关系,段图象表示机车做匀加速直线运动,牵引力为恒力,随着速度的增加,机车功率逐渐增加,到达点时机车功率达到额定值,段图象表示 图象为双曲线的一支。 由于图象的段为双曲线的一支, ②图乙是图象,由于图象的横轴为,所以分析图象时应该沿着横轴从右向左分析。图象的段表示随着速度的增加,牵引力恒定不变,此过程为匀加速直线运动。图象的段表示随着速度的增加,牵引力逐渐减小,机车发动机功率不变,此过程为变加速直线运动,点时机车速度达到最大,机车开始匀速直线运动。段图象的斜率 ③图丙是图象,图象的段表示匀加速直线运动,段表示变加速直线运动。 在检测某种汽车性能的实验中,质量为㎏的汽车由静止开始沿平直公路行驶,达到的最大速度为 —图象(图象

软件看门狗和硬件看门狗

看门狗分硬件看门狗和软件看门狗。硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称“喂狗”),因此程序正常工作时,定时器总不能溢出,也就不能产生复位信号。如果程序出现故障,不在定时周期内复位看门狗,就使得看门狗定时器溢出产生复位信号并重启系统。软件看门狗原理上一样,只是将硬件电路上的定时器用处理器的内部定时器代替,这样可以简化硬件电路设计,但在可靠性方面不如硬件定时器,比如系统内部定时器自身发生故障就无法检测到。当然也有通过双定时器相互监视,这不仅加大系统开销,也不能解决全部问题,比如中断系统故障导致定时器中断失效。 看门狗本身不是用来解决系统出现的问题,在调试过程中发现的故障应该要查改设计本身的错误。加入看门狗目的是对一些程序潜在错误和恶劣环境干扰等因素导致系统死机而在无人干预情况下自动恢复系统正常工作状态。看门狗也不能完全避免故障造成的损失,毕竟从发现故障到系统复位恢复正常这段时间内怠工。同时一些系统也需要复位前保护现场数据,重启后恢复现场数据,这可能也需要一笔软硬件的开销。 图1:(a) 多任务系统看门狗示意图;(b) 相应的看门狗复位逻辑图。 在单任务系统中看门狗工作原理如上所述,容易实现。在多任务系统中情况稍为复杂。假如每个任务都像单任务系统那么做,如图1(a)所示,只要有一个任务正常工作并定期“喂狗”,看门狗定时器就不会溢出。除非所有的任务都故障,才能使得看门狗定时器溢出而复位,如图1(b)。 而往往我们需要的是只要有一个任务故障,系统就要求复位。或者选择几个关键的任务接受监视,只要一个任务出问题系统就要求复位,如图2(a)所示,相应的看门狗复位逻辑如图2(b)所示。 在多任务系统中通过创建一个监视任务TaskMonitor,它的优先级高于被监视的任务群Task1、Task2...Taskn。TaskMonitor在Task1~Taskn正常工作情况下,一定时间内对硬件看门狗定时器清零。如果被监视任务群有一个Task_x出现故障,TaskMonitor就不对看门狗定时器清零,也就达到被监视任务出现故障时系统自动重启的目的。另外任务TaskMonitor自身出故障时,也不能及时对看门狗定时器清零,看门狗也能自动复位重启。

电脑启动过程详解!!!

电脑启动过程详解 1.当按下电源开关时,电源就开始向主板和其它设备供电,这时电压还不太稳定,主板上的控制芯片组会向CPU发生并保持一个RESET(重置)信号,让CPU内部自动恢复到初始状态,但CPU在些刻不会马上执行指令,当芯片组检查到电源已经开始稳定供电了(当然从不稳定,到稳定的过程只是一瞬间的事情)它便撤去RESET信号(如果是手工按下电脑面板上的RESET按钮来重启机器,那么松开该按钮时芯片组就会撤去RESET信号)CPU马上从地址FFFF0H处开始执行指令,这个地址实际在系统BIOS的地址范围内, 无论是Award BIOS,还是AMI BIOS,在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。 2.系统BIOS的启动代码首先要做的事情就进行POST(Power-On Self Test,加电后自检),POST的主要任务是检查系统中一些关键设备是否存在和是否正常工作,例如内存和显卡等设备.由于POST是最早进行的检查过程,此时显卡还没有初始化,如果系统BIOS在进行POST的过程中发现了些致命错误,例如没有找到内存或内存有问题 (此时只会检查640KB常规内存),那么系统BIOS就会直接控制嗽叭发生声音来报告错误,声音的长短和次数代表了错误的类型.在正常情况下,POST过程进行的非常快,我们几乎无法感觉到它的存在,POST结束之后就会调用其它代码来进行更完整的硬件检测。 3.接下来系统BIOS将查找显卡的BIOS,前面说过,存放显卡BIOS的ROM芯片的超始地址通常设在 C0000H,系统BIOS在这个地方找到显卡BIOS之后就调用它的初始化代码来初始化显卡,此时多数显卡都在屏幕上显示出一些初始化信息,介绍生产厂商,图形芯片类型等内容,不过这个画面几乎是一闪而过,系统BIOS接着会查找其它设备的BIOS程序,找到之后同样会调用这些BIOS内部的初始化代码来初始化相关的设备。 4.查找完所有其它设备的BIOS之后,系统BIOS将显示出它自己的启动画面,其中包括有系统BISO的类型,序列号和版本号等内容. 5.接着系统BIOS将检查和显示CPU的类型和工作频率,然后开始测试所有RAM,并同时在屏莫显示内存测试的速度,用户可以在CMOS设置中自行决定使用简单耗时少或详细耗时多的测试方式. 6.内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,包括硬盘,CD-ROM,串口,并口,软驱等设备,另外绝大数较新版本的系统BIOS在这一过程中还要自动检测和设置内存的定时参数,硬盘参数和访问模式等. 7.标准设备检查完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系统中安装的的即插即用设备,每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断,DMA通道和I/O端口等资源。 8.到这一步为止,所有硬件都已经检测配置完毕了,多数系统BIOS会重新清屏并在屏幕上方显示出一个表格,其它概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。 9.接下来系统BIOS会更新ESCD(Extended system configuration data,扩展系统配置数据.)ESCD是系统BIOS用来与操作系统交换硬件配置信息的一种手段,这些数据被存放在CMOS之中,通常ESCD数据只在系统配置发生改变后才会更新,所以不是每次启动电脑时都能够看到"updata ESCD … Success"这样的信息, 不过某些主板的系统BIOS在保存ESCD数据时使用了与widnwos 9x不相同的数据格式,于是widnwos 9x在启动过程中会把ESCD数据修改成自己的格式,但在下一次启动时,既使硬件配置没有发生改变,系统BIOS也会把ESCD的数据格式修改回来,如此循环,将会导致在每次启动电脑时,系统BIOS都要更新一遍ESCD,这就是为什么有些机器在每次启动时都会显示出相关信息的原因。 10.ESCD更新完毕后,系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从软件,硬件或光驱启动,以从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的引导记录,而分区引导记录将负责读取并执行 IO.SYS这是DOS和widnows 9x的IO.SYS(或NT的NTLDR)首先要初始化一些重要的系统数据,然后将显示出我们熟悉的蓝天白云,在这幅画面之下,widnwos 将继续进行DOS部分和GUI(图形用户界面)部分的引导和初始化工作. 上面介绍的便是电脑在打开电源开关(或按RESET)进行冷启动时所要完成的各种初始化工作,如果在DOS 下按Ctrl Alt DEL组合键,(或从windows中选择重新启动电脑)来进行热启动,那么POST过程将被跳过去,

项目启动过程组包括如下内容

项目立项管理这一章主要考查以下知识点 1,需求分析的概念, 需求分析是对要解决的问题进行详细的分析,弄清项目发起人及项目其他干系人的要求,待开发的信息系统要解决客户和用户的业务问题以及问题的来龙去脉。可以说,需求分析就是确定待开发的信息系统应该“做什么” 2,需求分析的方法 3,项目建议书的内容 项目建议书主要包括如下内容 1)项目的必要性。 2)项目的市场预测。 3)产品方案或服务的市场预测。 4)项目建设必需的条件。 项目建议书的主要内容 1)项目名称 2)项目建设的必要性和依据 3)项目目的,作用及意义 4)项目的国内外技术发展概况,水平和发展趋势 5)研究开发领域,主要关键技术,研究内容,技术方案和实验地点,规模,进度安排。 6)项目的研究开发情况,现有工作基础和设备条件 7)项目负责人,项目主要技术人员 8)项目起止时间,最终达到的目标,前景及预期考核的技术经济指标。 9)项目经费预算,用途和用款计划 10)其他 4,项目建议书的编制方法 5,项目可行性研究报告的内容 项目可行性研究报告一般应包括如下内容 1)投资必要性 2)技术的可行性 3)财务可行性 4)组织可行性 5)经济可行性 6)社会可行性 7)风险因素及对策 6,项目可行性研究报告的编制方法 7,招投标的主要过程 8,招投标的关键产物 9,立项申请书(项目建议书)的编写,提交和获得批准 10,项目初步可行性研究,详细可行性研究的方法,项目论证评估的过程和方法 项目启动过程组包括如下内容 1)制定项目章程 2)制定初步的项目范围说明书

项目的计划过程组包括如下内容 1)制定项目管理计划 2)编制项目范围管理计划 3)范围定义 1,创建工作分解结构WBS 将主要的项目可交付物和项目工作细分成更小,更易于管理的部分。 2,活动定义确定为了产生不同的项目可交付物所必须执行的特定的活动。 3,活动排序用于明确活动之间的相互依赖关系,并记录 4,活动资源估算用于估算每个活动所需的资源 5,活动历时估算用于估算完成每个活动所需的时间 6,制定进度计划用户分析活动顺序,活动工期以及资源需求,确定每个活动的具体工期安排,制定项目进度7,成本估算用于确定为完成项目所需资源的大致成本 8,成本预算为每项活动按照其工期分配资金与资源,建立项目的成本基线。 9,制订项目的质量管理计划用于明确与项目相关的质量标准,并确定达到标准的方法 10,制订项目人力资源管理计划用于明确项目角色,职责和报告机制,建立项目的人员管理计划 11,制订项目沟通管理计划用于确定项目干系人的信息和沟通要求 12,制订项目风险管理计划用于决定使用何种方法来实施项目的风险管理活动。 13,风险识别用于确定哪些风险可能会影响项目,并且记录他们的特征 14,风险定性分析用于总结风险出现的概率和影响,对风险进行优先级的排序,便于后续的分析 15,风险定量分析用于确定风险对整体项目目标的定量影响 16,制定风险应对计划用于制定风险应对计划以增强对计划的把握,降低风险对项目目标的威胁 17,制定项目采购管理计划用于确定项目采购什么和何时采购 18,编制合同用于记录材料,产品,货物和服务的需求,并识别潜在的供方。 执行过程组包括如下内容 1)指导和管理项目执行按照计划定义的活动执行,收集可交付物的完成状态和工作完成信息,反馈到绩效报告2)执行质量保证执行已计划好的,系统性的质量活动来确保项目满足质量要求的过程。 3)获取项目团队成员招收为完成项目所需的人力资源 4)团队建设培育个人和团队的能力以提升项目绩效 5)信息发布及时向项目干系人提供他们所需的信息 6)询价获取信息,报价,投标文件,出价和提交建议苏 7)供方选择评标和选择潜在供方以及与供方协商并签订合同 8)合同管理管理与卖方之间的关系 监督和控制过程组包括如下内容 1)监督和控制项目工作用于收集,测量,发布绩效信息,评估趋势以及过程改进,绩效报告提供项目在范围,进度,成本和风险上的执行情况。 2)整体变更控制用于控制变更的因素以确保这些变更是有利的或可控的,确定是否已出现变更,管理已批准的变更 3)范围验证用于正式验收项目的阶段成果或项目的最终成果,也叫范围确认 4)范围变更控制用于控制项目范围的变更 5)进度控制用于控制项目进度的变更 6)成本控制用于控制项目预算的变更,对造成成本变化的因素施加影响 7)质量控制用于监督特定的项目结果来确定是否符合相应的质量标准 8)管理项目团队用于跟踪个人和团队的绩效,提供反馈,分析问题和提高项目绩效 9)绩效报告用于收集和发布绩效信息,包括项目的状态报告,进展和预测

计算机启动过程

从打开电源到开始操作,计算机的启动是一个非常复杂的过程。 零、boot 的含义 先问一个问题,"启动"用英语怎么说? 回答是boot。可是,boot 原来的意思是靴子,"启动"与靴子有什么关系呢?原来,这里的boot 是bootstrap(鞋带)的缩写,它来自一句谚语: "pull oneself up by one's bootstraps" 字面意思是"拽着鞋带把自己拉起来",这当然是不可能的事情。最早的时候,工程师们用它来比喻,计算机启动是一个很矛盾的过程:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序! 早期真的是这样,必须想尽各种办法,把一小段程序装进内存,然后计算机才能正常运行。所以,工程师们把这个过程叫做"拉鞋带",久而久之就简称为boot 了。 计算机的整个启动过程分成四个阶段。 一、第一阶段:BIOS 上个世纪70 年代初,"只读内存"(read-only memory,缩写为ROM)发明,开机程序被刷入ROM 芯片,计算机通电后,第一件事就是读取它。 这块芯片里的程序叫做"基本輸出輸入系統"(Basic 无效/Output System),简称为BIOS。1. 1 硬件自检 BIOS 程序首先检查,计算机硬件能否满足运行的基本条件,这叫做"硬件自检"(Power-On Self-Test),缩写为POST。 如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止。如果没有问题,屏幕就会显示出CPU、内存、硬盘等信息。 1. 2 启动顺序 硬件自检完成后,BIOS 把控制权转交给下一阶段的启动程序。 这时,BIOS 需要知道,"下一阶段的启动程序"具体存放在哪一个设备。也就是说,BIOS 需要有一个外部储存设备的排序,排在前面的设备就是优先转交控制权的设备。这种排序叫做"启动顺序"(Boot Sequence)。 打开BIOS 的操作界面,里面有一项就是"设定启动顺序"。 二、第二阶段:主引导记录 BIOS 按照"启动顺序",把控制权转交给排在第一位的储存设备。 这时,计算机读取该设备的第一个扇区,也就是读取最前面的512 个字节。如果这512 个字节的最后两个字节是0x55 和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给"启动顺序"中的下一个设备。 这最前面的512 个字节,就叫做"主引导记录"(Master boot record,缩写为MBR)。 2. 1 主引导记录的结构 "主引导记录"只有512 个字节,放不了太多东西。它的主要作用是,告诉计算机到硬盘的哪一个位置去找操作系统。 主引导记录由三个部分组成: (1)第1-446 字节:调用操作系统的机器码。 (2)第447-510 字节:分区表(Partition table)。 (3)第511-512 字节:主引导记录签名(0x55 和0xAA)。 其中,第二部分"分区表"的作用,是将硬盘分成若干个区。 2. 2 分区表 硬盘分区有很多好处。考虑到每个区可以安装不同的操作系统,"主引导记录"因此必须知道将控制权转交给哪个区。

STM32窗口看门狗程序

STM32窗口看门狗程序 窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位(WWDG->;CR的第六位)变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口配置寄存器(WWDG->;CFR)数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新,那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。

图 3.6.1.1中,T[6:0]就是WWDG_CR的低七位,W[6:0]即是WWDG->;CFR的低七位。T[6:0]就是窗口看门狗的计数器,而W[6:0]则是窗口看门狗的上窗口,下窗口值是固定的(0X40)。当窗口看门狗的计数器在上窗口值之外被刷新,或者低于下窗口值都会产生复位。 上窗口值(W[6:0])是由用户自己设定的,根据实际要求来设计窗口值,但是一定要确保窗口值大于0X40,否则窗口就不存在了。 窗口看门狗的超时公式如下: Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1; 其中: Twwdg:WWDG超时时间(单位为ms) Fpclk1:APB1的时钟频率(单位为Khz) WDGTB:WWDG的预分频系数 T[5:0]:窗口看门狗的计数器低6位 窗口看门狗寄存器介绍:

如何使用窗口看门狗: 1)使能WWDG时钟 2)设置WWDG_CFR和WWDG_CR两个寄存器 在时钟使能完后,我们设置WWDG的CFR和CR两个寄存器,对WWDG进行配置。包括使能窗口看门狗、开启中断、设置计数器的初始值、设置窗口值并设置分频数WDGTB 3)开启WWDG中断并分组 4)编写中断服务函数 软件例程: //---------------------------wdg.c----------------------- #include "wdg.h" #include "led.h" u8 wwdg_cnt=0x7f; //窗口看门狗计数器初值 void wwdg_init(u8 tr,u8 wr,u8 fprer) { RCC->;APB1ENR|=1;CFR|=fprer;CFR|=1;CFR&=0xff80; //窗口值清零 WWDG->;CFR|=wr; //设定窗口值 WWDG->;CR|=(wwdg_cnt|1;CR|=(cnt&0x7f); //喂狗值 } void WWDG_IRQHandler(void)

项目启动计划书格式流程

项目启动计划书

一、公司简介 1.1公司基本信息 公司名称大同市天涯拓展有限责任公司 项目名称天涯素质拓展训练培训机构 项目创始人王磊 地址亲水湾 企业性质有限责任公司 注册日期 注册资本100万元人民币 公司网址 天涯拓展有限公司成立于2017年3月13日,作为一家素质拓展公司,就是要把大同市中、小学,各大小教育机构中3到16岁之间的青少年素质拓展项目进行整合,通过营销策划,为相关培训机构提供素质拓展、课外活动的服务;从而把大中小型课外培训机构、企事业单位、民间团体商家结合起来,推动素质拓展活动的联盟,达到资源整合、互惠互利的目的。 1.2公司使命 打造大同市素质拓展活动联盟第一品牌 1.3公司服务范畴 涵盖了幼小衔接亲子营、3到16岁青少年课外素质拓展、企事业单位团体

员工管理培训等多个方面。 二、项目综述 2.1项目简介 素质拓展训练是一种以提高心理素质为主要目的,兼具体能和实践的综合素质教育,它以运动为依托,以培训为方式,以感悟为目的。它与传统的知识培训和技能培训相比,少了一些说教和灌输,多了一些运动中的体验和感悟。拓展训练能使青少年学生激发个人潜能,培养乐观的心态和坚强的意志,提高沟通交流的主动性和技巧性,树立相互配合、相互支持的团队精神,极大增强合作意识,从而达到提高学生心理素质的目的。因此,这种培训方式成为学生学习生活经验、体验社会教育、形成正确的人际、情感和社会性价值观等教育目标的一个重要途径,是青少年学生素质教育中不可缺少的一项。本项目就是要把素质拓展作为一项服务,为社会团体,特别是广大青少年提供一个专业、安全、有价值的培训平台。 2.2项目精髓 实现广大青少年及各大小培训机构素质拓展方面专业性的指导,联合大同市教育商圈,做专业级平台,帮助大同市教育联盟打造一套完整的户外素质拓展活动流程。 2.3关键概念释义 大同市教育培训联盟,是一种创新的商业运营模式,整合同一商圈、同一行业、不同商家资源,为形成必要的规模效应、商业信息网络、增强商家的经济活力及收益,通过联盟的方式组成的利益共同体。项目以整合互动营销为核心,通过资源整合、资源共享,实现多方共赢。 做专业级平台,是本项目的核心概念,以素质拓展活动为开端,不断吸收经验,在稳步发展中吸纳一些教育资源,达到联合其他学校、其他机构,一起做活动的目的。在活动规模、活动专业度来说,做到行业最高标准。 吸引更多的机构一起参与、一起合作,达到资源共享,利益最大化。 2.4具体做法

看门狗电路及原理

看门狗电路。在单片机中,为了能使得程序能够正常的运行。设定的及时根据程序所返回的值检测程序运行情况的定时电路。 在主程序中设定一定的值,把这个值在看门狗定时电路数值益处之前定时赋给看门狗赋给定时电路,让看门狗定时器复位。主程序的赋值周期要小于看门狗定时电路的运行周期。 看门狗 百科名片 单片机"看门狗" 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"(watchdog) 目录[隐藏] 应用 基本原理 看门狗使用注意 看门狗运用 设计思路 [编辑本段]应用 看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,

即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。 [编辑本段]基本原理 看门狗,又叫watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就会给出一个复位信号到MCU,使MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。所以在使用有看门狗的芯片时要注意清看门狗。硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位如果出现死循环,或者说PC指针不能回来。那么定时时间到后就会使单片机复位。常用的WDT芯片如MAX813 ,5045, IMP 813等,价格4~10元不等. 软件看门狗技术的原理和这差不多,只不过是用软件的方法实现,我们还是以51系列来讲,我们知道在51单片机中有两个定时器,我们就可以用这两个定时器来对主程序的运行进行监控。我们可以对T0设定一定的定时时间,当产生定时中断的时候对一个变量进行赋值,而这个变量在主程序运行的开始已经有了一个初值,在这里我们要设定的定时值要小于主程序的运行时间,这样在主程序的尾部对变量的值进行判断,如果值发生了预期的变化,就说明T0中断正常,如果没有发生变化则使程序复位。对于T1我们用来监控主程序的运行,我们给T1设定一定的定时时间,在主程序中对其进行复位,如果不能在一定的时间里对其进行复位,T1 的定时中断就会使单片机复位。在这里T1的定时时间要设的大于主程序的运行时间,给主程序留有一定的的裕量。而T1的中断正常与否我们再由T0定时中断子程序来监视。这样就够成了一个循环,T0监视T1,T1监视主程序,主程序又来监视T0,从而保证系统的稳定运行。51 系列有专门的看门狗定时器,对系统频率进行分频计数,定时器溢出时,将引起复位.看门狗可设定溢出率,也可单独用来作为定时器使用。凌阳61的看门狗比较单一,一个是时间单一,第二是功能在实际的使用中只需在循环当中加入清狗的指令就OK了。AVR系列中,avr-libc 提供三个API 支持对器件内部Watchdog 的操作,它们分别是:wdt_reset() // Watchdog 复位wdt_enable(timeout) // Watchdog 使能wdt_disable() // Watchdog 禁止C8051Fxxx单片机内部也有一个21位的使用系统时钟的定时器,该定时器检测对其控制寄存器的两次特定写操作的时间间隔。如果这个时间间隔超过了编程的极限值,将产生一个WDT复位。-------------------------------------------------------------------------------- [编辑本段]看门狗使用注意

Windows启动过程详解

Windows启动过程详解 我们每天都在和Windows打交道,很多人可能每天都要面对多次W indows的启动过程,可是您知道在Windows的启动过程背后,隐藏着什么秘密吗?在这一系列过程中都用到了哪些重要的系统文件?系统的启动分为几个步骤?在这些步骤中计算机中发生了什么事情?这些就是本文试图告诉您的。 本文的适用范围 随着技术的发展,我们能够见到的计算机硬件种类越来越多。以计算机上最重要的组件CPU来说,目前就有很多选择。当然,这里的选择并不是说AMD或者Intel这种产品品牌,而是指其内部的体系结构。目前常见的CPU体系结构主要基于复杂指令集(Complex I nstruction Set Computing,CISC)或者精简指令集(Reduced Ins truction Set Computing,RISC),我们常用的Intel的Pentium、C eleron系列以及AMD的Athlon、Sempron系列都是基于复杂指令集的,而这些基于复杂指令集的CPU还有32位和64位的寄存器数据带宽区别。关于这些指令集以及寄存器数据带宽之间的区别等内容比较繁杂,而且不是本文的重点,感兴趣的朋友可以自己在网上搜索相关内容。因为CPU种类的不同,在不同CPU的系统中运行的Wind ows的启动过程也有一些小的不同。本文将会以目前来说最普遍的,在x86架构的系统上安装的32位Windows XP Professional为例向

您介绍。 基本上,操作系统的引导过程是从计算机通电自检完成之后开始进行的,而这一过程又可以细分为预引导、引导、载入内核、初始化内核,以及登录这五个阶段。 在继续阅读之前,首先请注意图1,这是Windows XP的操作系统结构,其中包括了一些在后台工作的组件以及经常和我们打交道的程序。在了解Windows XP的启动过程之前,对系统结构有一个初步概念是很重要的。

C51单片机看门狗电路及程序设计方案

C51单片机看门狗电路及 程序设计案 院系:信息工程学院 年级:2010级 电子一班禹豪 电子一班训虎 电子二班邓启新 一、引言 在由单片机构成的微型计算机系统中,程序的正常运行常常会因为来自外界的电磁场干扰等原因而被打断,从而造成程序的跑飞,而陷入死循环。由此导致单片机控制的系统无法继续工作,造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片或程序,俗称"看门狗"(watchdog) (1)看门狗电路基本原理 看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连**,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。 *此处设计原理实际上为下文中硬件看门狗设计思路。

(2)看门狗电路一般设计式 “看门狗”电路一般分为硬件看门狗与软件看门狗两种设计式。 硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位。如果出现死循环,或者说PC指针不能回来,那么定时时间到后就会使单片机复位。常用的WDT芯片如MAX813,5045,IMP 813等,价格4~10元不等. 软件看门狗技术的原理和硬件看门狗类似,只不过是用软件的法实现(即利用单片机部定时器资源,通过编程模拟硬件看门狗工作式),以51系列为例:因在51单片机中有两个定时器,在利用部定时器资源来对主程序的运行进行监控时。可以对T1(或T0)设定一定的定时时间(设定的定时值要小于主程序的运行时间),当产生定时中断的时候对一个变量进行赋值(此变量在主程序运行的开始已有一个初值)。当主程序运行至最后时对此变量的值进行判断,如果值发生了预期的变化,就说明T0中断正常,如果没有发生变化则使程序复位。 考虑到设计要求,本设计采用软件看门狗设计思路。 二、看门狗电路整体设计思路 根据设计要求,本设计利用C51单片机部自带的定时器1进行编程,并配合少量电路实现“看门狗“电路功能。整个设计分为软件部分与硬件部分,如下: (1)软件部分设计原理: 软件设计分为三部分:“看门狗“定时器设置程序、溢出中断服务程序和喂狗代码。 1.1设计思路: 1)在主程序开头,“看门狗“定时器设置程序设置定时器1计时50ms。 2)当定时达50ms时,定时器1产生溢出中断,溢出中断服务程序开始工作,将看门狗标志num加1。当num的值等于100时,说明看门狗定时器已经计时5s,此时,单片机I/O端口P1.0输出高电平,对程序进行复位。 3)在此过程中,喂狗代码将被穿插于程序中循环体末尾。当循环体结束时,喂狗代码执行,关闭定时器1、清空num并重新初始化定时器设置。若循环体进入死循环,喂狗代码无法执行,num将一直累加至100,此时程序复位。 注:喂狗代码放置位置可根据num预计数值进行调整:当num门限值较小,即看门狗计数时间较短时,喂狗代码可放于程序中各循环体之后或均匀分布于整个主程序中。当num门限值较大,即看门狗计数时间较长时,喂狗代码可放于程序主循环体末尾。但是需注意看门狗计数时间必须长于正常工作时间,以免非正常复位。 1.2软件设计流程图:

linux内核启动 Android系统启动过程详解

linux内核启动+Android系统启动过程详解 第一部分:汇编部分 Linux启动之 linux-rk3288-tchip/kernel/arch/arm/boot/compressed/ head.S分析这段代码是linux boot后执行的第一个程序,完成的主要工作是解压内核,然后跳转到相关执行地址。这部分代码在做驱动开发时不需要改动,但分析其执行流程对是理解android的第一步 开头有一段宏定义这是gnu arm汇编的宏定义。关于GUN 的汇编和其他编译器,在指令语法上有很大差别,具体可查询相关GUN汇编语法了解 另外此段代码必须不能包括重定位部分。因为这时一开始必须要立即运行的。所谓重定位,比如当编译时某个文件用到外部符号是用动态链接库的方式,那么该文件生成的目标文件将包含重定位信息,在加载时需要重定位该符号,否则执行时将因找不到地址而出错 #ifdef DEBUG//开始是调试用,主要是一些打印输出函数,不用关心 #if defined(CONFIG_DEBUG_ICEDCC)

……具体代码略 #endif 宏定义结束之后定义了一个段, .section ".start", #alloc, #execinstr 这个段的段名是 .start,#alloc表示Section contains allocated data, #execinstr表示Section contains executable instructions. 生成最终映像时,这段代码会放在最开头 .align start: .type start,#function /*.type指定start这个符号是函数类型*/ .rept 8 mov r0, r0 //将此命令重复8次,相当于nop,这里是为中断向量保存空间 .endr b 1f .word 0x016f2818 @ Magic numbers to help the loader

相关文档
最新文档