文档库 最新最全的文档下载
当前位置:文档库 › SimpleAPP详解

SimpleAPP详解

SimpleAPP详解
SimpleAPP详解

SimpleAPP分析

SimpleApp分析

程序总是从helloword开始的,如果能找到一个例子开始,那么是最好不多的了,还好Ti为我们提供了很多的机会,让我们开始看一下simpleapp吧【Texas

Instruments\ZStack-1.4.3-1.2.1\Projects\zstack\Samples\SimpleApp】

SimpleApp里面有两个应用,一个是收集传感器的值,其中有一个传感器设备和一个收集设备;另一个应用时智能开关,有一个控制节点和一个灯节点。这里主要展示了如何网络建立,绑定和解绑定的演示以及开发一个自己的应用。

双击打开\Texas

Instruments\ZStack-1.4.3-1.2.1\Projects\zstack\Samples\SimpleApp\CC2430DB\SimpleApp.eww工程,既然是51的内核那只能用C了,一个地球人都知道的原理就是C程序是从main()开始的,而且整个程序就是一个main()函数,那么好办了,我们找到main()然后分析它就可以看清楚整个程序的结构了。

在工作空间中有8种项目配置,因为TI提供了两种开发板,所以实际上4种项目配置,分别配置成应用中4种设备。

我们直接看智能灯的应用,跟这个应用相关的配置是(以DB开发板为原型):SimpleSwitchDB和SimpleControllerDB。SimpleSwitchDB是终端设备(我的理解是这里是灯的开关),SimpleControllerDB是控制设备是协调器或者路由器。这里之所以把和灯相连的设备作为协调器或者是路由器我认为是为了和家庭或者是场景中的其他设备进行交互所需要的。因为灯的状态还必须被其他的设备知道,就必须通知其他设备当前的状态!

演示效果:控制设备-SW1:以协调器启动,SW2:以路由器启动

启动控制设备将进入允许绑定状态,此时在10S内按动终端设备上的S1将发送绑定请求,成功绑定后LED1将点亮(如果打开节能选项,将是闪烁状态);按动终端设备上的S2将发送切换命令,将导致控制设备上的LED1开关状态的切换,按S3将此设备接绑定。效果清楚了接下来就是看看程序怎样了。

找到ZMain.c,看看函数的描述Description: Startup and shutdown code for ZStack(启动和关闭Z-Stack)看来来对地方了哈。

第一个宏:MINIMIZE_ROOT(line 126)

如果定义这个宏那么ZMAIN中的API函数将被在ROOT段外实现以为用户提供更多的空间来定义自己的常量,默认这个编译选项是不定义的。所谓的ZMAIN API函数定义在line138-line144。在line152终于看到了期待的main()

ZSEG int main( void )

{

// Turn off interrupts

osal_int_disable( INTS_ALL );

// Initialize HAL

//处理器运行时钟,LED IO口设置

HAL_BOARD_INIT();

// Make sure supply voltage is high enough to run

zmain_vdd_check();

// Initialize stack memory

zmain_ram_init();

// Initialize board I/O

InitBoard( OB_COLD );

// Initialze HAL drivers

HalDriverInit();

// Initialize NV System

osal_nv_init( NULL );

// Determine the extended address

zmain_ext_addr();

// Initialize basic NV items

zgInit();

// Initialize the MAC

ZMacInit();

#ifndef NONWK

// Since the AF isn't a task, call it's initialization routine afInit();

#endif

// Initialize the operating system

osal_init_system();

// Allow interrupts

osal_int_enable( INTS_ALL );

// Final board initialization

InitBoard( OB_READY );

// Display information about this device

zmain_dev_info();

/* Display the device info on the LCD */

#ifdef LCD_SUPPORTED

zmain_lcd_init();

#endif

osal_start_system(); // No Return from here

} // main()

2、

osal_int_disable( INTS_ALL );//关中断//【OSAL.C】参数为INTS_ALL则关闭所有中断,否则关闭相应中断

byte osal_int_disable( byte interrupt_id )

{

if ( interrupt_id == INTS_ALL )

{

HAL_DISABLE_INTERRUPTS();

//关闭所有中断响应【hal_mcu.h】

//#define HAL_DISABLE_INTERRUPTS() st( EA = 0; );

//st的定义在【hal_defs.h】,其实就是为了保证宏能够准确的被执行用的

//#define st(x) do { x } while (__LINE__ == -1);

}

else

return ( INVALID_INTERRUPT_ID );

//返回禁止相应的中断【ZComDef.h】

//#define INVALID_INTERRUPT_ID 9

return ( ZSUCCESS );

//执行成功就返回成功标志,其实按程序流程来看这个函数总是会返回成功标志的

//#define ZSUCCESS 0

}

3、HAL_BOARD_INIT();//初始化板子硬件部分

//板子初始化函数其实是一个宏,定义在【hal_board_cfg.h】“\”符号其实是编译环境下面的行中断符,表示这一样没有结束,其实是一个“\”。

#define HAL_BOARD_INIT() { \ uint16 i; \

\ SLEEP &= ~OSC_PD; /* turn on 16MHz RC and 32MHz XOSC */\ //操作SLEEP寄存器,给16MHz高速振荡器和32M外部晶体振荡上电

//【hal_mcu.h】

//#define OSC_PD 0x04

while (!(SLEEP & XOSC_STB)); /* wait for 32MHz XOSC stable */\

asm("NOP"); /* chip bug workaround */\ for (i=0; i<504; i++) asm("NOP"); /* Require 63us delay for all revs */\

// SLEEP寄存器中XOSC_STB位设置后还需要等待额外的64us,手册上是这么说

的呵

CLKCON = (0x00 | OSC_32KHZ); /* 32MHz XOSC */\

//设置32M和外部32.768K时钟为源

while (CLKCON != (0x00 | OSC_32KHZ)); \

//等待时钟稳定

SLEEP |= OSC_PD; /* turn off 16MHz RC */\

//关闭没有用到的时钟源

//上面这段用来设置系统时钟,步骤为:所有时钟源上电;等待时钟稳定;延时64us 等待确切的稳定;设置系统时钟和32K时钟的时钟源;等待设置完成,关闭没有用到的时钟源。

\

/* set direction for GPIO outputs */ \

LED1_DDR |= LED1_BV; \ //【hal_board_cfg.h】

//#define LED1_DDR P1DIR

//#define LED1_BV BV(0)

//【hal_defs.h】

//#define BV(n) (1 << (n));//这是将某位置位的宏

LED2_DDR |= LED2_BV; \ //【hal_board_cfg.h】

//#define LED2_DDR P1DIR

//#define LED2_BV BV(1)

//上面是对板上LED的初始化,完成的操作时将P1_0,P1_1设为输出(因为这两个IO口具有20ma 的电流输出能力)!这里是跟硬件紧密相关的,需要根据自己硬件的具体情况来设。我的开发板上加上液晶指示的LED才两个,真是捉襟见肘啊,液晶背光灯接P2_0,调试LED接P1_0。设计的都不是很合理呢。看来在我的开发板上要完全的屏蔽掉LED2呢呵呵。进行相应更改:(这些更改都在文件

hal_board_cfg.h中越在line94~100)

#define LED1_POLARITY ACTIVE_HIGH

#define LED2_BV BV(0)

#define LED2_SBIT P2_0

#define LED2_DDR P2DIR

\ /* configure tristates */ \

P2INP |= PUSH2_BV; \ //这是对Joystick的配置,在【hal_board_cfg.h】

//#define PUSH2_BV BV(0);这里将Joystick的中心按键的IO设为三态

状态,我的板子上没有这个东东哦,所以把Joystick也给屏蔽了,注释掉

【hal_board_cfg.h】中约line120的东东

\ /* configure software controlled peripheral VDD */ \ //配置软件控制的外设VDD

VDD_SW_DDR |= VDD_SW_BV;

\

VDD_SW_SBIT = 0; \ //【hal_board_cfg.h】,这里实际上是将P1_2配置为输出,然后输出一个低电平//貌似我的板子上也用不到这个东西,屏蔽掉

//#define VDD_SW_BV BV(2)

//#define VDD_SW_SBIT P1_2

//#define VDD_SW_DDR P1DIR

}

//好了,以上就是硬件底层的一些初始化工作,主要是配置时钟和一些端口的状态。

4、

zmain_vdd_check();//确认VDD是否达到运行处理器的要求,如果没有达到就会闪烁LED //【ZMain.c】line210左右

//重复检测VDD的状态,直到成功检测的次数达到规定过的要求为止。估计是等电源稳定吧,呵呵

static ZSEG void zmain_vdd_check( void )

{

uint8 vdd_passed_count = 0;

bool toggle = 0;

while ( vdd_passed_count < MAX_VDD_SAMPLES )

//#define MAX_VDD_SAMPLES 3; 【ZMain.c】

//循环检测3次

{

if ( HalAdcCheckVdd (ZMAIN_VDD_LIMIT) )

//【ZMain.c】

//#define ZMAIN_VDD_LIMIT HAL_ADC_VDD_LIMIT_4

//【hal_adc.h】

//#define HAL_ADC_VDD_LIMIT_4 0x04

{

vdd_passed_count++; // Keep track # times Vdd passes in a row MicroWait (10000); // 延时10毫秒

//微秒级延时函数【OnBoard.h】

//#define MicroWait(t) Onboard_wait(t)

//void Onboard_wait( uint16 timeout )

{

while (timeout--)

{

asm("NOP");

asm("NOP");

asm("NOP");

}

}

}

else

{

vdd_passed_count = 0; // Reset passed counter

MicroWait (50000); // Wait 50ms

MicroWait (50000); // Wait another 50ms to try again

}

// HalAdcCheckVdd ()【hal_adc.c】函数用来检查VDD是否大于或等于最小的要求

bool HalAdcCheckVdd (uint8 limit)

{

uint16 value;

//如果芯片修订版本号小于REV_D(0x03)就直接完成电压检测并返回TRUE。CHVER是修订版本号寄存器,此寄存器是只读的。

if (CHVER < REV_D)

//检查芯片版本【hal_mcu.h】

//#define REV_A 0x00

//#define REV_D 0x03

{

return TRUE;

}

//清除ADC中断标志

ADCIF = 0;

//设置新的转换状态

//【hal_adc.c】

//使用内部1.25参考电压

//#define HAL_ADC_REF_125V 0x00

//#define HAL_ADC_DEC_064 0x00 /* Decimate by 64 : 8-bit resolution */8位精度

//#define HAL_ADC_CHN_VDD3 0x0f /* VDD/3 */以AVDD_SOC/3为输入,检测电压

ADCCON3 = (HAL_ADC_REF_125V | HAL_ADC_DEC_064 | HAL_ADC_CHN_VDD3);

//等待转换完成

while ( !ADCIF );

//取得转换值

value = ADCL;

value |= ((uint16) ADCH) << 8;

//检测

return ( value >= HalAdcVddLimit[limit] );

}

// HalAdcVddLimit为一个数组

static __code const uint16 HalAdcVddLimit[] =

{

0x369C, /* VDD Limit - 1.6v */

0x3A06, /* VDD Limit - 1.7v */

0x3D70, /* VDD Limit - 1.8v */

0x40D9, /* VDD Limit - 1.9v */

0x4443, /* VDD Limit - 2.0v */

0x47AD, /* VDD Limit - 2.1v */

0x4B17, /* VDD Limit - 2.2v */

0x4E81, /* VDD Limit - 2.3v */

0x51EA, /* VDD Limit - 2.4v */

};

//关于电池电压的测量与计算在文档:Using the ADC to Measure Supply Voltage.pdf中有详细的示例和说明,现在摘录其中一段解说一下:

// Max ADC input voltage = reference voltage =>

// (VDD/3) max = 1.25 V => max VDD = 3.75 V

// 12 bits resolution means that max ADC value = 0x07FF = 2047 (dec)

// (the ADC value is 2’s complement)

// Battery voltage, VDD = adc value * (3.75 / 2047)

//其中有两点很重要:1、最大的ADC输入值=参考电压;2、ADC的值以2的补码形式储存,也就是说12位的精度因为有1位是符号位所以相对于精度为11,即2^11=2048。因为以VDD/3为输入电压,以内部1.25为参考电压,所以VDD/3最大值=1.25,得出最大的VDD=3.75;以12位精度计算,电压值划分为2.47等分,所以测出来的电压值为adc value*(3.75/2047)

//注意这里并没有操作ADCCON1来启动ADC转换。让我们来看看原因:

//数据手册133页ADCCON3中ECH的说明:

// Extra channel select. Selects the channel number of the extra

conversion that is carried out after a conversion sequence has

ended. This bit field must be written for an extra conversion to be

performed. If the ADC is not running, writing to these bits will

trigger an immediate single conversion from the selected extra

channel. The bits are automatically cleared when the extra

conversion has finished.

//这3位是用来选择转换序列完成以后额外的一次转换。其中有一句:If the ADC is not running, writing to these bits will trigger an immediate single conversion from the selected extra channel.(若ADC没有运行,对这几位的写入操作将会立即开始一个对指定通道的转换),这就是关键了,即使ADC没有运行,我们只要往这3位中写入我们希望转换的通道,那么ADC会马上开始运行,当然执行完毕后这几位会被清除。

//切换LED1和LED2

if (vdd_passed_count == 0)

{

if ((toggle = !(toggle)))

HAL_TOGGLE_LED1();

//【hal_board_cfg.h】

//#define HAL_TOGGLE_LED1() st( if (LED1_SBIT) { LED1_SBIT = 0; } else { LED1_SBIT = 1;} )

//这句很明显了,就是切换LED1的状态。这里一直没有改变toggle的值,为什么还要对它做一个判断呢?搞不明白

else

HAL_TOGGLE_LED2();

}

}

//关闭LED

//【hal_board_cfg.h】

//#define HAL_TURN_OFF_LED1() st( LED1_SBIT = LED1_POLARITY (0); )

//#define HAL_TURN_OFF_LED2() st( LED2_SBIT = LED2_POLARITY (0); )

//#define LED1_POLARITY ACTIVE_HIGH

//#define LED2_POLARITY ACTIVE_LOW

//#define ACTIVE_LOW !

//#define ACTIVE_HIGH !! /* double negation forces result to be '1' */

//这里的宏定义真的是太繁琐了,真不晓得TI这样弄有多大的意义,转了两个弯才看明白原来LED1是高电平点亮

HAL_TURN_OFF_LED1();

HAL_TURN_OFF_LED2();

}

5、zmain_ram_init();//初始化堆栈内存空间

//初始化堆栈内存,以“高水位线”为准。这段程序真的是没有看懂,这段程序跟链

接器,程序段在链接文件中的存放,以及IAR C/C++编译器都有莫大的关系,真的没看懂只知道是初始化了调用和返回时要用到的堆栈空间,暂时不管,用吧!

static ZSEG void zmain_ram_init( void )

{

uint8 *end;

uint8 *ptr;

// Initialize the call (parameter) stack

end = (uint8*)CSTK_BEG; // Lower end

ptr = (uint8*)(*( __idata uint16*)(CSTK_PTR)); // Upper end

while ( --ptr > end )

*ptr = STACK_INIT_VALUE;

// Initialize the return (address) stack

ptr = (uint8*)RSTK_END - 1; // Upper end

while ( --ptr > (uint8*)SP )

*(__idata uint8*)ptr = STACK_INIT_VALUE;

}

6、//初始化板上的IO

InitBoard( OB_COLD );

//参数【OnBoard.h】

#define OB_COLD 0

#define OB_WARM 1

#define OB_READY 2

//【OnBoard.c】

void InitBoard( byte level )

{

if ( level == OB_COLD )

{

//关中断,最初的时候已经见过了

osal_int_disable( INTS_ALL );

// 关闭所有的LED,调用了LED设置函数

HalLedSet( HAL_LED_ALL, HAL_LED_MODE_OFF );

//【hal_led.h】

//#define HAL_LED_ALL (HAL_LED_1 | HAL_LED_2 | HAL_LED_3 | HAL_LED_4),我这里呢只有两个LED,所以可以屏蔽掉LED3,LED4,或者将后两个LED也映射到前面两个LED(其实就是宏定义啦)

//#define HAL_LED_MODE_OFF 0x00

//#define HAL_LED_MODE_ON 0x01

//#define HAL_LED_MODE_BLINK 0x02

//#define HAL_LED_MODE_FLASH 0x04

//#define HAL_LED_MODE_TOGGLE 0x08

//LED设置函数【hal_led.c】

uint8 HalLedSet (uint8 leds, uint8 mode)

{

#if (defined (BLINK_LEDS)) && (HAL_LED == TRUE)

//前提条件是定义了闪烁LED和LED硬件驱动服务使能;

//HAL_LED定义在【hal_board_cfg.h】

#ifndef HAL_LED

#define HAL_LED TRUE

//当设为FALSE时就不使用LED

#endif

#if (!defined BLINK_LEDS) && (HAL_LED == TRUE)

#define BLINK_LEDS

#endif

uint8 led;

HalLedControl_t *sts;

// LED控制结构体

typedef struct {

uint8 mode; /* 操作模式*/

uint8 todo; /* 剩余的闪烁周期数*/

uint8 onPct; /* 周期中所占的比例*/

uint16 time; /* 开关周期时间(msec) */

uint32 next; /* 下次改变的时间*/

} HalLedControl_t;

switch (mode)

{

case HAL_LED_MODE_BLINK:

HalLedBlink (leds, 1, HAL_LED_DEFAULT_DUTY_CYCLE, HAL_LED_DEFAULT_FLASH_TIME);

//LED设置的一些默认参数【hal_led.h】

#define HAL_LED_DEFAULT_MAX_LEDS 4

#define HAL_LED_DEFAULT_DUTY_CYCLE 5

#define HAL_LED_DEFAULT_FLASH_COUNT 50

#define HAL_LED_DEFAULT_FLASH_TIME 1000

//LED闪烁函数【hal_led.c】

void HalLedBlink (uint8 leds, uint8 numBlinks, uint8 percent, uint16 period)

{

#if (defined (BLINK_LEDS)) && (HAL_LED == TRUE)

//同样先判断是否启用了LED并且使用LED闪烁功能

uint8 led;

HalLedControl_t *sts;

if (leds && percent && period)

//判断参数的有效性,percent参数指明一个周期中LED将开启的时间

{

if (percent < 100)

//如果一个周期中开启时间小于100%

{

led = HAL_LED_1;

leds &= HAL_LED_ALL;

//屏蔽掉不想要操作的LED

sts = HalLedStatusControl.HalLedControlTable;

//HalLedStatusControl是事先定义好的一个结构体

typedef struct

{

HalLedControl_t HalLedControlTable[HAL_LED_DEFAULT_MAX_LEDS];

uint8 sleepActive;

} HalLedStatus_t;

#define HAL_LED_DEFAULT_MAX_LEDS 4

#ifdef BLINK_LEDS

static HalLedStatus_t HalLedStatusControl;

#endif

while (leds)

//这个循环主要是对传进来的每一个LED进行独立的设置,比如传进来的是需要设置LED1和LED2,那么此循环会先设置LED1然后再设置LED2

{

if (leds & led)

//检测当前LED是否是需要设置的

{

preBlinkState |= (led & HalLedState);

//储存目前的额LED状态

//static uint8 preBlinkState;

sts->mode = HAL_LED_MODE_OFF; /*关闭先前的模式*/

sts->time = period; /* Time for one on/off cycle */

sts->onPct = percent; /* % of cycle LED is on */

sts->todo = numBlinks; /* Number of blink cycles */

if (!numBlinks) sts->mode |= HAL_LED_MODE_FLASH;

//如果规定的次数未达到则继续闪烁

sts->next = osal_GetSystemClock(); /* Start now */

//读取当前系统时钟【OSAL_Timers.c】

uint32 osal_GetSystemClock( void )

{

return ( osal_systemClock );

}

//static uint32 osal_systemClock;

//这样看来第一次运行的时候osal_systemClock=0,系统中应该启动了定时器,用来记录系统运行时间。

sts->mode |= HAL_LED_MODE_BLINK; /* Enable blinking */

leds ^= led;

//屏蔽掉已设置好的这个LED

}

led <<= 1;

//检测下一个LED

sts++;

}//真的是高手才能写出的函数啊!自叹,C语言编程能力还差的远啊

osal_set_event (Hal_TaskID, HAL_LED_BLINK_EVENT);

//【hal_drivers.h】

//#define HAL_LED_BLINK_EVENT 0x0002

//extern uint8 Hal_TaskID;

//此函数为用户设置任务标志【OSAL.c】

//第一个参数是任务ID,第二个参数是要设置的事件

byte osal_set_event( byte task_id, UINT16 event_flag )

{

if ( task_id < tasksCnt )

//【sapi.c】

const pTaskEventHandlerFn tasksArr[] = {

macEventLoop,

nwk_event_loop,

Hal_ProcessEvent,

#if defined( MT_TASK )

MT_ProcessEvent,

#endif

APS_event_loop,

ZDApp_event_loop,

SAPI_ProcessEvent

};

//【OSAL_Tasks.h】

//事件处理函数原型:typedef unsigned short (*pTaskEventHandlerFn)( unsigned char task_id, unsigned short event );

//定义事件处理函数的函数指针类型

//tasksArr中任务事件循环中的顺序必须和osalInitTask中任务的初始化顺序一致const uint8 tasksCnt = sizeof( tasksArr ) / sizeof( tasksArr[0] );

//得到任务数

//只有当任务ID小于总任务数时才继续执行,也就是说只有当此为有效任务才执行。

{

halIntState_t intState;

//【hal_mcu.h】其实就是一个无符号字符类型

//typedef unsigned char halIntState_t;

HAL_ENTER_CRITICAL_SECTION(intState); // 维持全局中断状态//【hal_mcu.h】

#define HAL_ENTER_CRITICAL_SECTION(x) st( x = EA;

HAL_DISABLE_INTERRUPTS(); )

//保存当前全局中断状态,然后关闭全局中断

#define HAL_EXIT_CRITICAL_SECTION(x) st( EA = x; )

#define HAL_CRITICAL_STATEMENT(x) st( halIntState_t s;

HAL_ENTER_CRITICAL_SECTION(s); x; HAL_EXIT_CRITICAL_SECTION(s); ) tasksEvents[task_id] |= event_flag; // Stuff the event bit(s) //【sapi.c】

//uint16 *tasksEvents;

HAL_EXIT_CRITICAL_SECTION(intState); // Release interrupts }

else

return ( INVALID_TASK );

//如果任务ID超出返回则返回任务无效

//返回值类型定义在【ZComDef.h】

//#define INVALID_TASK 1

return ( ZSUCCESS );

}

}

Else

//如果点亮时间百分比超过100%也就相当于常亮了,就执行LED常亮的设置

{

HalLedSet (leds, HAL_LED_MODE_ON);

//【hal_led.c】

uint8 HalLedSet (uint8 leds, uint8 mode)

{

#if (defined (BLINK_LEDS)) && (HAL_LED == TRUE)

//一样的前提是开始了LED硬件驱动服务

uint8 led;

HalLedControl_t *sts;

switch (mode)

//检测要切换的LED模式

{

case HAL_LED_MODE_BLINK:

HalLedBlink (leds, 1, HAL_LED_DEFAULT_DUTY_CYCLE,

HAL_LED_DEFAULT_FLASH_TIME);

break;

//如果是闪烁模式,则将指定的LED闪烁一次,点亮时间默认为5%,闪烁周期是1S //【hal_led.h】

#define HAL_LED_DEFAULT_MAX_LEDS 4

#define HAL_LED_DEFAULT_DUTY_CYCLE 5

#define HAL_LED_DEFAULT_FLASH_COUNT 50

#define HAL_LED_DEFAULT_FLASH_TIME 1000

case HAL_LED_MODE_FLASH:

/* Default flash, N times, D% duty cycle */

HalLedBlink (leds, HAL_LED_DEFAULT_FLASH_COUNT,

HAL_LED_DEFAULT_DUTY_CYCLE, HAL_LED_DEFAULT_FLASH_TIME);

break;

//如果是连闪模式,则将指定的LED闪烁50次,点亮时间默认为5%,闪烁周期是1S case HAL_LED_MODE_ON:

case HAL_LED_MODE_OFF:

case HAL_LED_MODE_TOGGLE:

//如果是开、关、切换模式,则分别一个个的操作指定的LED

led = HAL_LED_1;

leds &= HAL_LED_ALL;

sts = HalLedStatusControl.HalLedControlTable;

while (leds)

{

if (leds & led)

{

if (mode != HAL_LED_MODE_TOGGLE)

{

sts->mode = mode; /* ON or OFF */

}

else

{

sts->mode ^= HAL_LED_MODE_ON; /* Toggle */ //开关的切换,利用了和1相异或为取反的特性。到这里为止还只是设置了LED的模式,并没有真正的对LED进行开关的操作,也就是说LED并没有演示出效果。

}

HalLedOnOff (led, sts->mode);

//这个函数是对LED进行开关操作的真正的函数了,这个函数执行完后应该能看到LED状态的变化。列举程序中部分段落(因为其他段落都差不多呵呵)【hal_led.c】if (leds & HAL_LED_1)

//检测是否是LED1

{

if (mode == HAL_LED_MODE_ON)

//检测开关模式

{

HAL_TURN_ON_LED1();

//点亮LED1

}

else

{

HAL_TURN_OFF_LED1();

}

}

…………

if (mode)

{

HalLedState |= leds;

}

else

{

HalLedState &= ~leds;

}

//此用来记住当前操作的LED的状态,如果是点亮的就把HalLedState中相应的位置位,否则清零

leds ^= led;

}

led <<= 1;

sts++;

}

break;

default:

break;

}

#elif (HAL_LED == TRUE)

LedOnOff(leds, mode);

#endif /* BLINK_LEDS && HAL_LED */

return ( HalLedState );

//返回的是操作了的LED的状态,每个LED在此状态中用1位来表示

}

}

}

Else

//如果没有开始LED驱动服务,或者没有开启LED闪烁,就直接关闭LED

{

HalLedSet (leds, HAL_LED_MODE_OFF); /* No on time, turn off */ }

#elif (HAL_LED == TRUE)

//如果没有定义闪烁,则只对LED进行单次的一次转换状态操作

percent = (leds & HalLedState) ? HAL_LED_MODE_OFF :

HAL_LED_MODE_ON;

HalLedOnOff (leds, percent); /* Toggle */ #endif /* BLINK_LEDS && HAL_LED */

}

break;

case HAL_LED_MODE_FLASH:

/* Default flash, N times, D% duty cycle */

HalLedBlink (leds, HAL_LED_DEFAULT_FLASH_COUNT,

HAL_LED_DEFAULT_DUTY_CYCLE,

HAL_LED_DEFAULT_FLASH_TIME);

break;

case HAL_LED_MODE_ON:

case HAL_LED_MODE_OFF:

case HAL_LED_MODE_TOGGLE:

led = HAL_LED_1;

leds &= HAL_LED_ALL;

sts = HalLedStatusControl.HalLedControlTable;

while (leds)

{

if (leds & led)

{

if (mode != HAL_LED_MODE_TOGGLE)

{

超大卫星地图制作教程

超大卫星地图制作教程 前文没耐心的人可以直接略过,以下是我实测可行的方法,并且在别的机器上也尝试了,win7、xp都稳定可运行,并且不需要安装Google Earth程序。以雅典为例,介绍操作流程。 Step1.下载安装谷歌地图下载器 提供V11学习版,稍稍收点U币。 支持正版软件请去https://www.wendangku.net/doc/f87582834.html,/sggs/够买。 谷歌卫星地图下载器.rar(3.39 MB, 下载次数: 209, 售价: 5 U 币) Step2.在地图浏览窗口找到雅典

Step3.框选需要的范围,调整选框大小 Step4.双击选框,新建下载任务 如果需要道路名称等标注,则选标签选项,个人认为有标签的比较好看。在下面的层级选项中,选择10M-100M的比较好,小了不清晰,大了图片文件可能不方便使用,譬如才开始使用这软件时,我贪心花了很长时间下了一个19级的巴黎全市地图(此处的任务显示大小是232M),最终的一个TIF格式文件达到2.3G(这么惊人的偏差可能跟格式、叠加了标签层等等有关),看图软件都

不能打开,压缩软件也不能运行,只能去photoshop里切割了几份再压缩,最后还是因为使用不便丢弃了。18级的巴黎全市地图则是704M(此处的任务显示大小是59M),再使用压缩软件就压成了一个80M的JPG格式文件,方便收藏和使用。 Step5.观察下载映射区块 鼠标滚轮选择层级,我之前选择的是19级、20级,图上所示的是20级的情况。绿色的小方块表示下载完成,黄色表示正在下载,如出现红色不要紧张,表示下载失败,全部下载好软件会自动再次尝试下载读取失败的图块。如果是蓝色的话,说明Google Earth的卫星没有收录该层级的地图,一般比较偏僻的地区,层级较高(20级以上)时会出现这种情况。遇到蓝色块的话只能降低一级到清晰度低一点的层级尝试下载。

搏击俱乐部观后感

两个完全不同的男人和一个关键的女人! 首先出现在我们面前的是一个成功的小男人杰克,他有着稳定的收入,体面的工作。生活可以说是无悠无虑,连周围的同事也没几个对他有意见的,他下班之后最大的乐趣是研究该买什么样的手工家具更合适。这样的一个美国中产阶级的代表按照普通人的理解应该是过着与世无争,舒适安逸的生活。可是就是这样的一个过着在当今中国很多人可能做梦都想过的生活的一个白领却极度的郁闷。失眠,焦虑,无所适从、、、、拿他自己的话说“生活好空虚,一些都象在拷贝”以至于到最后必须要参加“癌症社团”见识各种各样的绝望和可怜人才能让自己得到一点充实和真实的感觉,才能“睡得象猪一样” 镜头一转,来看看我们的男二号泰勒,他和杰克恰恰相反,他的职业是卖肥皂,或许能挣点钱但从他住的地方和他的爱好可以看得出是绝对没有卖保险来得钱多,但他却活得萧萧洒洒有滋有味,以至于我们的杰克都会对他印象深刻并且到最后被他所改变。这样的两个男人的组合一看就特别有意思,很容易引起观众的疑问,到底是什么让穷人的泰勒活得那么开心而让小资杰克苦不堪言呢?从这点思考慢慢的就会引出电影对人性的思考对社会思考的主题了,介绍了两个男人回过头来看看两个演员可以看出导演的用心!皮特的风流倜傥狂放的气质,诺顿的忧郁在让两个演技派在电影里面大放光彩,都完美的诠释了角色的性格和特点(不由得让我想起《暗战》里面刘德华和刘青云的双刘组合同样让人眼前一亮) 两个男人真正碰撞在一起以及后面谜底的揭晓直接关系到我下面所说的这样一个关键的女人---玛拉。如果不是玛拉的出现或许杰克就在哭泣中完全治疗好自己的失眠症,而真正存在于失眠症时期的皮特也就可能被扼杀在萌芽阶段,但是这个女人的出现让杰克重新跌入生活的泥潭也让泰勒有机可乘!接下来在杰克和泰勒和平共处阶段也是玛拉的出现打乱了两个人格的平衡,作为杰克人格讨厌玛拉,做作为泰勒人格喜欢玛拉,这样两个极端的情形都发生在一个男人的身上一直到最后真正肯定泰勒和杰克是同一个人的也是出自这个女人之口。想想,同样一个男人两种极端的性格,两种极端的喜好,以及完全不同的相貌!都可以从这个女人身上找到联系。导演把玩人格分裂的乐趣可谓登峰造极! 说完人物我们来看看作为电影题目的“搏击俱乐部” 搏击俱乐部---------人性在物质中迷失的永恒命题 作为主角第二人格存在的泰勒其存在的目的一开始可以说是对主角内心人性的唤醒!“不要做物质的奴役”不仅是泰勒的说教更重要的是杰克心底的觉醒,以至于到后面杰克的人格逐渐被泰勒人格影响和同化!搏击俱乐部的存在也是一样,一堆在物质生活中迷失了自己的男人们通过打架通过搏斗来找回自己做为人的一面,来找到自己存在的价值这本来就是对物质社会的人性反抗和本性的回归。以至于到后面搏击俱乐部的规模越来越大也就说明这样的“人在物质生活中迷失自我”的社会问题越来越严重!但是打架毕竟是治标不治本的方法,到头来谁该在哪里工作还在哪里工作,该做什么就还做什么。要想真正把人从物质社会解放出来就必须摧毁物质社会,这不仅仅是那一帮子搏击会成员的想法也是主角的想法(很类似现在西方国家的一些尊崇自然反对科技的团体),于是乎一帮人将搏击俱乐部变成了“大计划”

内分泌科考试试题及答案解析

内分泌科出科临床考试试题(一) 姓名毕业学校分数 一、单选题:每题2分 1.糖尿病是一组病因不明的内分泌代谢病,其共同主要标志是() A 多饮、多尿、多食 B 乏力 C 消瘦 D 高血糖 E 尿糖阳性 2.下述哪一项符合淡漠型甲亢() A.突眼征明显 B.心悸、多食、多汗、无力明显 C.甲状腺肿大明显 D.T4不增高,而只有T3增高 E.常见于老年人,易发生甲亢危象 3.内分泌系统的反馈调节是指: ( ) A.神经系统对内分泌系统的调节. B.内分泌系统对神经系统的调节 C.免疫系统对内分泌系统的调节; D.免疫系统对神经系统的调节; E.下丘脑一垂体一靶腺之间的相互调节 4.常用于内分泌功能减退的动态功能试验是: ( ) A.兴奋试验 B.抑制试验; C.激发试验 D.拮抗试验; E.负荷试验 5.1型糖尿病与2型糖尿病,最主要的区别在于() A 症状轻重不同 B 发生酮症酸中毒的倾向不同 C 对胰岛素的敏感性不同 D 胰岛素的基础水平与释放曲线不同 E 血糖稳定性不同 6.引起ACTH升高的疾病是: ( ) A.Sheehan综合征 B.肾上腺皮质腺瘤 C.Addison病 D.原发性醛固酮增多症 E.PRI 瘤 7.血中直接调节胰岛素分泌而且经常起调节作用的重要因素是 A 游离脂肪酸 B 血糖浓度 C 肾上腺素 D 胃肠道激素 E 血酮体浓度 8.Sheehan综合征患者各靶腺功能减退替代治疗应先补充: ( ) A.性激素 B.甲状腺激素 C.糖皮质激素 D.ACTH E.GnRH 9.对于慢性淋巴细胞性甲状腺炎的描述,以下哪项是错误的() A.可合并恶性贫血 B.多见于中年妇女 C.可伴有甲状腺功能亢进 D.可合并1型糖尿病 E.诊断明确,宜手术治疗 10.糖尿病性血管病变,最具有特征性的是()

四大波谱基本概念以及解析综述

四大谱图基本原理及图谱解析 一.质谱 1.基本原理: 用来测量质谱的仪器称为质谱仪,可以分成三个部分:离子化器、质量分析器与侦测器。其基本原理是使试样中的成分在离子化器中发生电离,生成不同荷质比的带正电荷离子,经加速电场的作用,形成离子束,进入质量分析器。在质量分析器中,再利用电场或磁场使不同质荷比的离子在空间上或时间上分离,或是透过过滤的方式,将它们分别聚焦到侦测器而得到质谱图,从而获得质量与浓度(或分压)相关的图谱。 在质谱计的离子源中有机化合物的分子被离子化。丢失一个电子形成带一个正电荷的奇电子离子(M+·)叫分子离子。它还会发生一些化学键的断裂生成各种 碎片离子。带正电荷离子的运动轨迹:经整理可写成: 式中:m/e为质荷比是离子质量与所带电荷数之比;近年来常用m/z表示质荷比;z表示带一个至多个电荷。由于大多数离子只带一个电荷,故m/z就可以看作离子的质量数。 质谱的基本公式表明: (1)当磁场强度(H)和加速电压(V)一定时,离子的质荷比与其在磁场中运动半径的平方成正比(m/z ∝r2m),质荷比(m/z)越大的离子在磁场中运动的轨道半径(rm)也越大。这就是磁场的重要作用,即对不同质荷比离子的色散作用。 (2)当加速电压(V)一定以及离子运动的轨道半径(即收集器的位置)一定时,离子的质荷比(m/z)与磁场强度的平方成正比(m/z∝H2)改变H即所谓的磁场扫描,磁场由小到大改变,则由小质荷比到大质荷比的离子依次通过收集狭缝,分别被收集、检出和记录下来。 (3)若磁场强度(H)和离子的轨道半径(rm)一定时,离子的质荷比(m/z)与加速电压(V)成反比(m/z∝1/V),表明加速电压越高,仪器所能测量的质量范

搏击俱乐部观后感1000字

搏击俱乐部观后感1000字 沙龙11月28日安排观研《搏击俱乐部》,TOP250 排名第10,IMDb评分 8.9分,也就是说这部影片得到了全球影人和影迷的追捧。下面是小编为大家带来搏击俱乐部观后感的。搏击俱乐部观后感1你得先放弃一切,你必须没有恐惧,面对你总有一天会死的事实。只有抛弃一切,才能获得自由。---题记大卫芬奇的电影总是给我不一样的启发,每次走进他的电影王国,就好像自己就是生存在此间一样,导演很少用自然光呈现他的电影,这样做是为了让看者能拥有和主角拍戏时一样的体会和心情,一种不安的情愫或者说有些偏执狂的意味。正是这样带有偏执意味的电影,正如《搏击俱乐部》里面所宣扬的自由主义以及精神至上,让我们现代人不禁质问:我到底是谁?电影有两个主人公,但两个主人公却是一个人。在心理学上叫做人格分裂,这两个主人公分别由诺顿和皮特饰演。杰克(诺顿饰)是一个大汽车公司的职员,追求物质上的享受,可对周围的一切感到厌倦,他患上了严重的失眠症。失眠症让他感到一切如同虚幻,每天都是做着拷贝的事情。为了治疗他的失眠症,他不停地去参加绝症患者的聚会,再那里他跟每一个绝症患者拥抱,淹没在他们的怀抱当中,不顾一切,感到黑暗,沉默和完整。他找到了自由,抛开所有希望就是自由。每次参加完这种聚会,他都可以熟睡在任何地方,家里、机场、办公室,他

都可以像新生婴儿般睡着,直到他遇到玛拉。玛拉也和他一样去参加这种聚会,当杰克发现玛拉穿梭于不同的绝症聚会时就如同自己的谎言被揭穿,赤裸裸的站在世人面前一样,他的失眠症又开始作祟了。一次偶然的机会,杰克在飞机上“遇到了”泰勒,并从此变成了好朋友,并且成立了搏击俱乐部。如果看过这部电影第二次的人会知悉,其实泰勒是有杰克分裂出来的一个人格,可是杰克并不知道,其实在他熟睡的时候,正是杰克苏醒的开始。为什么杰克会人格分裂出一个跟他性格如此大相径庭的泰勒?泰勒是一个不喜欢被任何环境亦或是人束缚着自由自在的人,这是杰克在现实生活中所不能做到的,他被上司束缚着,被金钱羁绊着,被物质驱使着,他或者并不是为了自己,他被物质奴役了。而泰勒则是他内心渴望自由的一面。“工作不能代表你,银行存款并不能代表你,你开的车也不能代表你,皮夹里的东西不能代表你,衣服也不能代表你,你只是平凡众生中的其中一个。。”我是谁?这个哲学问题在西方一直被争论者,可在我们这个上下五千年的文明历史当中强调的是集体主义思想,个人主义的领域很少触碰,而这部电影正启发了我们去关注自己。我把这部电影定义为人文主义电影也算是名副其实的.。杰克映射的就是我们处于现代社会上的人,快节奏、追求物质的现代生活方式打造了一批又一批麻木而又无意义的人,每天都循环往复机械的做事。人处在这样的环境当

历史卫星影像图购买选择-1960年至今

购买卫星影像-选择北京揽宇方圆北京揽宇方圆信息技术有限公司,随着遥感卫星技术的普及与开放,各种遥感影像在城市和区域研究中得到了越来越广泛的应用。北京揽宇方圆国家遥感行业的高新技术企业,帮助我们低成本获取高质量卫星影像图提供了一条捷径。 选择卫星数据源 一、卫星类型 (1)光学卫星:worldview1、worldview2、worldview3、worldview4、quickbird、geoeye、ikonos、pleiades、deimos、spot1、kompsat系例、spot2、spot3、spot4、spot5、spot6、spot7、landsat5(tm)、Sentinel-卫星、landsat(etm)、rapideye、alos、kompsat系例卫星、planet卫星、北京二号、高景一号、资源三号、高分一号、高分二号、高分六号、环境卫星。 (2)雷达卫星:terrasar-x、radarsat-2、alos雷达卫星、高分三号卫星、哨兵卫星 (3)侦查卫星:美国锁眼卫星全系例(1960-1980) (4)高光谱类卫星:高分五号、环境小卫星、ASTER卫星、EO-1卫星 二、卫星分辨率 (1)0.3米:worldview3、worldview4 (2)0.4米:worldview3、worldview2、geoeye、kompsat-3A

(3)0.5米:worldview3、worldview2、geoeye、worldview1、pleiades、高景一号 (4)0.6米:quickbird、锁眼卫星 (5)1米:ikonos、高分二号、kompsat、deimos、北京二号 (6)1.5米:spot6、spot7、锁眼卫星 (7)2.5米:spot5、alos、资源三号、高分一号(4颗)、高分六号、锁眼卫星 (8)5米:spot5、rapideye、锁眼卫星、planet卫星4米 (9)10米:spot5、spot4、spot3、spot2、spot1、Sentinel-卫星 (10)15米:landsat5(tm)、landsat(etm)、landsat8、高分一号16米 三、卫星国籍 (1)美国:worldview1、worldview2、worldview3、quickbird、geoeye、ikonos、landsat5(tm)、landsat(etm)、锁眼卫星、planet卫星 (2)法国:pleiades、spot1、spot2、spot3、spot4、spot5、spot6 (3)中国:资源三号、高分一号、高分二号、高分六号、高景卫星、北京二号等 (4)德国:terrasar-x、rapideye (5)加拿大:radarsat-2 四、卫星发射年份 (1)1960-1980年:锁眼卫星(0.6米分辨率至10米) (2)1980-1990年:landsat5(tm)、spot1

内分泌系统讲解

内分泌系统 概述 内分泌系统endocrine system 是神经系统以外主导支配人体的另一套调节系统,由内分泌腺和内分泌组织构成。主要功能是与神经系统一起共同调节人体的新陈代谢、生长发育和生殖过程等生理功能的活动,以保持机体内环境的平衡与稳定。 内分泌腺属于无管腺,分泌物称激素hormone,直接进入血液或淋巴,随血循环运输至全身各处,调节各器官的活动。内分泌腺还有丰富的血液供应和植物神经分布,其结构和功能活动有显著的年龄变化。体内主要内分泌腺有脑垂体、松果体、甲状腺、甲状旁腺、肾上腺、性腺等。内分泌腺的体积和重量都很小,最大的甲状腺仅几十克;有的内分泌组织是一些细胞团,分散于某些器官内,如:胰岛、卵泡、黄体等。一种类型的激素只作用于特定的器官、组织或细胞,又称为靶器官、靶组织或靶细胞。 内分泌激素在通过细胞膜时,因细胞膜能感受细胞表面刺激作用,在穿越细胞膜过程中,激素同样以二种方式进行,一种方式被限制在蛋白质性质通道中(每一通道只允许一种分子或离子通过,如葡萄糖、氨基酸、钾、钠、钙、氯等受扩散梯度影响的被动运输以及依靠能耗的主动运输)经通道开关被穿膜运输;另一种方式是脂溶性物质如甾体激素等,直接穿越膜的脂类部分,不必通过蛋白质通道进入细胞内,靠细胞膜内陷形成的液泡“内吞泡”又叫胞吞泡方式进入细胞和“外排泡”又叫胞吐泡方式将内涵物释放到细胞外。细胞膜上带有多种多样的受体分子,只对某种刺激发生反应,如胰岛素、乙酰胆碱和低密度脂蛋白的受体;另一些受体则可被普通因子所激活,如与其它细胞或无机物表面接触,细胞表面受到刺激可造成跨膜电位的改变。激素在运动员生理代谢过程中为保证最大限度地动员体能、控制能量代谢、运动后体能恢复等均具有极大作用。血液中激素应维持正常水平,过多过少均会导致机体功能紊乱,甚至产生严重后果。各种激素分泌水平还受血液中代谢产物含量或其它激素浓度的影响与调节。 一、甲状腺 甲状腺thyroid gland是人体内最大的内分泌腺。位于第5颈椎至第1胸椎水平,既甲状软骨的中部和气管上段前面和两侧,分左、右两个侧叶,中间以峡部相连,呈粉红色“H”形,重约20—40克。少数人甲状腺峡缺如,半数人自峡部向上伸出一个细长的锥体叶,可延伸至舌骨处。 甲状腺富含血管,外包颈深筋膜,深入腺内将甲状腺实质分若干大小不同的团块或小叶。甲状腺实质有两类细胞组成,一类细胞为大小、形状不规则的甲状腺滤泡,滤泡表面围以单层立方上皮,每一滤泡中央为胶体(被伊红染成粉红色,含碘化球蛋白),即甲状腺球蛋白储存地。甲状腺滤泡位于细蜜的结缔组织之间,内含丰富的毛细血管和毛细淋巴管和交感神经纤维。甲状腺滤泡上皮细胞通过吐胞作用,入滤泡腔后形成甲状腺球蛋白,以此构成甲状腺激素三碘甲腺原氨酸(T3)和四碘甲腺原氨酸(T4)的前体。甲状腺滤泡细胞具有合成和胞吐甲状腺球蛋白(入滤泡腔)并释放甲状腺素(T3和T4)入毛细血管的作用。另一类细胞为滤泡旁细胞,靠近滤泡细胞外缘,比滤泡细胞大,形似卵圆或多边形,单个或小群分散出现在滤泡细胞之间,但不入滤泡腔。根据免疫化学研究泡内可能储存有甲状腺降钙素,用以调节血钙代谢。控制甲状腺降钙素释放的主要因子是血清钙浓度,血钙浓度升高可刺激降钙素的分泌,而低钙血症可抑制其分泌。 甲状腺的主要功能具有增进机体物质代谢,维持人体正常生长发育,尤其对骨骼和神经系统正常发育起着重要作用。甲状腺素分泌过旺,可引起功能亢进,造成眼突眼性甲状腺肿,简称为“甲亢”。表现为心跳加速、神经过敏、体重减轻、眼球突出等。儿童甲状腺素分泌不足

四大图谱综合解析

2013/12/2四大图谱综合解析[解] 从分子式CHO,求得不饱和度为零,故未知物应为512饱和脂肪族化合物。 1 某未知物分子式为CHO,它的质谱、红外光谱以及核磁共振谱如图,512未知物的红外光谱是在CCl溶液中测定的,样品的CCl稀溶液它的紫外吸收光谱在200 nm以上没有吸收,试确定该化合物结构。44-1的红外光谱在3640cm处有1尖峰,这是游离O H基的特征吸收峰。样品的CCl4浓溶液在3360cm-1处有1宽峰,但当溶液稀释后复又消失,说明存在着分子间氢键。未知物核磁共振谱中δ4. 1处的宽峰,经重水交换后消失。上述事实确定,未知物分子中存在着羟基。未知物核磁共振谱中δ0.9处的单峰,积分值相当3个质子,可看成是连在同一碳原子上的3个甲基。δ3.2处的单峰,积分值相当2个质子,对应1个亚甲基,看来该次甲基在分子中位于特丁基和羟基之间。质谱中从分子离子峰失去质量31(-CHOH)部分而形成基2峰m/e57的事实为上述看法提供了证据,因此,未知物的结构CH是3CCl稀溶液的红外光谱, CCl浓溶液44 CHOH C HC在3360cm-1处有1宽峰23 CH3 2. 某未知物,它的质谱、红外光谱以及核磁共振谱如图,它的根据这一结构式,未知物质谱中的主要碎片离子得到了如下紫外吸收光谱在210nm以上没有吸收,确定此未知物。解释。CH CH3+3.+ +C CH HCOH CHOH C HC3223 m/e31CH CH33 m/e88m/e57-2H -CH-H-CH33m/e29 CH m/e73CHC23+ m/e41 [解] 在未知物的质谱图中最高质荷比131处有1个丰度很小的峰,应从分子量减去这一部分,剩下的质量数是44,仅足以组为分子离子峰,即未知物的分子量为131。由于分子量为奇数,所以未成1个最简单的叔胺基。知物分子含奇数个氮原子。根据未知物的光谱数据中无伯或仲胺、腈、CH3N酞胺、硝基化合物或杂芳环化合物的特征,可假定氮原子以叔胺形式存CH3在。红外光谱中在1748 cm-1处有一强羰基吸收带,在1235 cm-1附近有1典型正好核磁共振谱中δ2. 20处的单峰(6H ),相当于2个连到氮原子上的宽强C-O-C伸缩振动吸收带,可见未知物分子中含有酯基。1040 的甲基。因此,未知物的结构为:-1cm处的吸收带则进一步指出未知物可能是伯醇乙酸酯。O核磁共振谱中δ1.95处的单峰(3H),相当1个甲基。从它的化学位移来CH3N看,很可能与羰基相邻。对于这一点,质谱中,m/e43的碎片离子CHCHCHOC223CH(CHC=O)提供了有力的证据。在核磁共振谱中有2个等面积(2H)的三重33峰,并且它们的裂距相等,相当于AA’XX'系统。有理由认为它们是2个此外,质谱中的基峰m /e 58是胺的特征碎片离子峰,它是由氮原子相连的亚甲-CH-CH,其中去屏蔽较大的亚甲基与酯基上的氧原子22的β位上的碳碳键断裂而生成的。结合其它光谱信息,可定出这个相连。碎片为至此,可知未知物具有下述的部分结构:CHO3NCH2CHCHCHOCCH32231 2013/12/23.某未知物CH的UV、IR、1H NMR、MS谱图及13C NMR数据如下,推[解] 1. 从分子式CH,计算不饱和度Ω=4;11161116导未知物结构。 2. 结构式推导未知物碳谱数据UV:240~275 nm 吸收带具有精细结构,表明化合物为芳烃;序号δc序号δc碳原子碳原子IR ::695、740 cm-1 表明分子中含有单取代苯环;(ppm)个数(ppm)个数MS :m/z 148为分子离子峰,其合理丢失一个碎片,得到m/z 91的苄基离子;1143.01632.01 313C NMR:在(40~10)ppm 的高场区有5个sp杂化碳原子;2128.52731.51 1H NMR:积分高度比表明分子中有1个CH和4个-CH-,其中(1.4~1.2)3128.02822.5132 ppm为2个CH的重叠峰;4125.51910.012因此,此化合物应含有一个苯环和一个CH的烷基。511536.01 1H NMR 谱中各峰裂分情况分析,取代基为正戊基,即化合物的结构为:23

卫星遥感影像解译服务一、项目内容

xx遥感影像解译服务一、项目内容 本项目包括两部分内 容,一是对 xx遥感影像解译服务 一、项目内容 本项目包括两部分内容,一是对广州市2M高分辨率多光谱原始数据进行相关技术处理,包括正射校正、融合、匀色、镶嵌、裁切等,最终得出DOM成果;二是在上述2M高分辨率影像数据处理成果基础上,勾画广州市土地利用类型图斑,并利用专业GIS软件进一步处理,形成广州市土地利用现状类型图成果。 二、关键技术指标要求 1)影像分辨率2米,波段组合色彩为自然真彩色; 2)影像时间:2015年1月以后拍摄的影像数据,少部分遥感影像未拍到的地方,可用2014年12月以前的数据填补,但所占面积比例不能超过广州市区域面积的10%,色彩要与相邻区域一致。为使影像色彩一致,原则上要求采用同一卫星的影像数据; 3)数据制作精度满足1:1万比例尺要求; 4)分幅方式按广州市1:1万比例尺地形图分幅编号法分幅; 5)影像和土地利用现状图坐标:WGS84; 6)影像数据格式TIF和SID,土地利用现状图数据格式: shape格式;7)数据要求色彩清晰、层次丰富、反差适中、彩色色彩柔和鲜艳、色彩均匀,相同地物的色彩基调基本一致。正射影像接边重叠带不允许出现明显的模糊和重影,相邻数字正射影像要严格接边,精度满足规范要求。 三、xx影像数据制作加工要求

1.制图须符合国家有关技术标准和规范。 2.投标人提供的影像成果须经正射纠正,航空影像正射纠正技术流程要详细,有正射纠正的原理和具体方法,有正射纠正的工艺流程图。 3.投标人有专业遥感影像处理软件,可用软件提供的正射纠正模块进行纠正。逐张卫片处理,生成具有坐标系统和投影信息的正射影像,检验图像校正的结果是否满足要求,直至满足要求。 4.对遥感数据制作数字正射影像地图,采用满足成图比例尺精度要求的控制资料,基于适宜分辨率的数字高程模型(DEM),对卫星影像进行正射纠正、配准、融合、镶嵌,建立覆盖广州全市域范围的数字正射影像;按相应比例尺分幅整饰,制作成遥感数字正射影像图(DOM)。 5.利用成像的卫星轨道参数、传感器参数及DEM,对影像进行严密的物理 模型纠正。要求控制点均匀分布、控制整景影像,平原地区布设4个控制点,高山地控制点个数不应少于12个。对于没有影像卫星轨道参数、传感器参数地区,可采用多项式变换几何模型进行纠正。6.图幅整饰:在标准分幅的数字正射影像上分层叠加内外图廓线及公里格 网、注记、境界等要素,进行图幅整饰。其中,图廓整饰包括图名、图号、图幅行政区划注记、公里格网、图幅结合表、比例尺、左下角的出版说明注记等;行政境界包括镇级以上行政境界;注记包括居民点自然村注记、主要河流水系、大型山脉等其它地理名称。 7.对数字正射影像成果的检查包括:作业过程是否满足控制点、配准点、检查点残差和中误差的精度要求;DOM影像是否色调均匀、反差适中、色彩自然;相邻景/块之间接边差是否在控制点残差的两倍以内,是否存在扭曲变形现象;外业检测DOM精度是否符合要求;整饰内容是否准确、完整;图面要素表达是否符合规定;元数据文件各项内容填写是否完备、准确;文件命名、文件组织与数据格式是否符合规范;上交成果内容是否完备、数据的一致性、完整性及其是否可读。 四、广州市土地利用现状分布图制作处理要求

《小丑》观后感最新范文

《小丑》观后感最新范文 大家有没有观看过神秘世界历险记,会不会写关于神秘的世界的观后感。以下是小编 整理的5篇观后感范文,希望可以分享给大家借鉴和参考。 在电影的结尾,哥潭市民带上小丑面具上街暴动,整个城市火光冲天,戾气逼人,完 全就是一场民粹主义狂欢。 我看现实世界也好不到哪里去,只不过美国民众暂时还没有上街杀人,只是选出了一 个特朗普总统而已。 世界为何变成这样?小丑在富兰克林的节目上说的很清楚。因为富人从不站在穷人的 角度上看问题,他们一点也不想知道一个像小丑这样的失败者生活如何、心情如何、脑子 里在想什么。韦恩只把小丑当作凶手、失败者、精神病、变态;他说所有无所建树的失败者都是小丑、都是笑话;至于他自己,从蝙蝠侠系列里我们知道他是个大慈善家,他(还有他 儿子,也就是蝙蝠侠)一定觉得自己光辉伟大,无懈可击。 可韦恩们都不懂《了不起的盖茨比》里的那句话:“每当你想批评别人的时候,要记住,这世上并不是所有人都有你拥有的那些优势。” 小丑也想活得不那么像个笑话,如果不能是正剧的英雄,至少做个悲剧的角色。可他 没有那个资本,他做不到。 小丑不是没有努力过。他曾经如此驯顺:按时吃药,按时去医生那里报道,保持微笑,随生携带“我有病,对不起打扰你们了”的卡片。他信奉着韦恩的逻辑,梦想是把欢笑带给 世界。 美国铁锈地带的失业蓝领工人恐怕也有和小丑类似的心路历程。因为技术创新和全球贸易,他们没有了工作,经济地位和社会地位一路下滑。可是精英阶级只会说:你们失去工作是因为你们学历低,能力差,为什么不去多受教育、转型再就业?我猜那些失业的工 人一开始也和小丑一样,每天背负着“是我的错,对不起给他家添麻烦了”的标签。可是, 如果等不来帮他们脱困的帮助,他们不可能永远无休无止地对不起下去。 小丑看到生活中的希望一个个破灭:丢掉工作,成为最不好笑的脱口秀艺人,他不是 富翁的私生子,邻居女子并不如他所想。然后他看到韦恩们是多么冷酷无情,毫不关心他 的死活:社会救助项目被砍掉,费尽心机见到韦恩只得到一记老拳,然后韦恩却在电视上 一直宣传他的慈善晚宴和竞选计划。失业工人看到的也是希望的破灭:制造业的工作越来 越少,整个本地社区越来越衰败。有人建议他们重回学校提高教育程度,但是对于一个高 中毕业、离开校园几十年的人,那是难于登天的事情;何况学费很贵,他们根本负担不起。然后他们看到造成金融危机的大银行拿到政府的大笔救助,他们看到华尔街的人谁也没进

高中生物知识点解析:内分泌系统

2019年高中生物知识点解析:内分泌系统【】2019年高中生物知识点解析:内分泌系统是查字典生物网为您整理的最新学习资料,请您详细阅读! 1、甲状腺: 位于咽下方。可分泌甲状腺激素。 2、肾上腺: 分皮质和髓质。皮质可分泌激素约50种,都属于固醇类物质,大体可为三类: ①糖皮质激素如可的松、皮质酮、氢化可的松等。他们的作用是使蛋白质和氨基酸转化为葡萄糖;使肝脏将氨基酸转化为糖原;并使血糖增加。此外还有抗感染和加强免疫功能的作用。 ②盐皮质激素如醛固酮、脱氧皮质酮等。此类激素的作用是促进肾小管对钠的重吸收,抑制对钾的重吸收,因而也促进对钠和水的重吸收。 ③髓质可分泌两种激素即肾上腺素和甲肾上腺素,两者都是氨基酸的衍生物,功能也相似,主要是引起人或动物兴奋、激动,如引起血压上升、心跳加快、代谢率提高,同时抑制消化管蠕动,减少消化管的血流,其作用在于动员全身的潜力应付紧急情况。 3、脑垂体: 分前叶(腺性垂体)和后叶(神经性垂体),后叶与下丘脑相连。前叶可分泌生长激素(191氨基酸)、促激素(促甲状腺激素、促肾上腺皮质激素、促性腺激素)、催乳素(199氨基酸)。后叶的激素有催产素(OXT)

和抗利尿激素(ADH)(升压素)(都为含9个氨基酸的短肽),是由下丘脑分泌后运至垂体后叶的。 4、下丘脑: 是机体内分泌系统的总枢纽。可分泌激素如促肾上腺皮质激素释放因子、促甲状腺激素释放激素、促性腺激素释放激素、生长激素释放激素、生长激素释放抑制激素、催乳素释放因子、催乳素释放制因子等。 5、性腺: 主要是精巢和卵巢。可分泌雄性激素、雌性激素、孕酮(黄体酮)。6、胰岛: a细胞可分泌胰高血糖素(29个氨基酸的短肽), b细胞可分泌胰岛素(51个氨基酸的蛋白质),两者相互拮抗。 7、胸腺: 分泌胸腺素,有促进淋巴细胞的生长与成熟的作用,因而和机体的免疫功能有关。 查字典生物网的编辑为大家带来的2019年高中生物知识点解析:内分泌系统,希望能为大家提供帮助。

NMR,VU,IR,MS四大图谱解析解析

13C-NMR谱图解析 13C-NMR谱图解析流程 1.分于式的确定 2.由宽带去偶语的谱线数L与分子式中破原子数m比较,判断分子的对称性. 若L=m,每一个碳原子的化学位移都不相同,表示分子没有对称性;若L

基团类型Qc/ppm 烷0-60 炔60-90 烯,芳香环90-160 羰基160 4.组合可能的结构式 在谱线归属明确的基础上,列出所有的结构单元,并合理地组合成一个或几个可能的工作结构。 5.确定结构式 用全部光谱材料和化学位移经验计算公式验证并确定惟一的或

可能性最大的结构式,或与标准谱图和数据表进行核对。经常使用的标准谱图和数据表有: 经验计算参数 1.烷烃及其衍生物的化学位移 一般烷烃灸值可用Lindeman-Adams经验公式近似地计算: ∑ Qc5.2 =nA - + 式中:一2.5为甲烷碳的化学位移九值;A为附加位移参数,列于下表,为具有某同一附加参数的碳原子数。 表2 注:1(3).1(4)为分别与三级碳、四级碳相连的一级碳;2(3)为与三级碳相连的二级碳,依此类推。 取代烷烃的Qc为烷烃的取代基效应位移参数的加和。表4一6给出各种取代基的位移参数

卫星遥感数据的正射影像图的制作

卫星遥感数据的正射影像图的制作 【摘要】卫星遥感是一种采用人们通过航空技术发射在地球外层空间的人造卫星对地球地面、地面以上的空间以及外层太空天体进行综合性观测的技术。而卫星遥感所得数据在正射影像图的制作上应用价值广泛,本文通过阐述卫星遥感数据以及卫星影响图的来源以及所具有的特征,并分析了卫星遥感数据用于制作正射影图过程中出现的纠错、配准以及最后统一融合的方法及原理,简要介绍了正射影像图的构型、调色以及去重叠等数据信息处理的方式和过程。 【关键词】卫星遥感技术;数据;信息;正射影像图;制作 引言 21世纪信息科技时代的到来,卫星遥感技术也在不断的更新、完善之中。目前的卫星遥感技术在用于制作正射影像图方面效果显著,并且成图的精准度越来越高,远远超过比例尺地形图的精准度。卫星遥感技术在城市建设、城市规划以及了解环境状况和资源状况方面具有强大的支撑作用。采用卫星遥感技术制作的城市影像图具有目标辨认难度小、内容清晰、比例尺大以及转释较容易的优势,这项技术已经广泛应用于社会生产和发展的各个层面。该项技术还有助于治理生态环境、搜集专业信息、监测工程项目以及防止各种自然灾害等工作的开展。 1.国内外普遍流行的卫星影像图收集方式 随着新科技革命的不断深入,卫星遥感技术日新月异,目前国际上较为早期出现的卫星遥感技术是来自美国的Earth watch 卫星数据资源库的QuickBird卫星影像,这款卫星影像的地面全色分辨率达到0.61m,成像款幅度达到16.5×16.5/km2,随后美国相继推出了Space imaging Ikonos和Land sat TM卫星遥感影像,这宽两款卫星遥感较Earth watch的QuickBird的影像效果以及成像款幅度都有所提升。俄罗斯生产了一款Spin-2卫星影像,这款卫星影像在地面分辨率方面虽然不及美国的Land sat TM卫星遥感,但是其成像款幅度可以达到200×300/km2却与美国的三种卫星影响有明显的优势。 2.卫星影像图的纠错、配准以及统一融合 2.1 数字纠错 光学纠错仪是一款用于将航拍模拟摄影片转化为平面图的工具,主要适用于传统的框架模幅式的航拍摄像画面的数字影像[1]。现阶段出现了许多新鲜的卫星数字遥感技术,这些技术的影响数据采用传统的光学纠错仪就不能很好地转化。因此,数字微分纠错技术由此诞生。这是一项通过地面的有效参数以及数字地面的基本雏形,在设置适当的构想公式,并依据适当的数学模型控制范围和控制点将航拍摄像画面的数字影像转化为正射影像图的。这种技术不仅简单、方便,而且适用范围较广,已经成为国内外普遍使用的数字纠错技术。

心得体会-搏击俱乐部观后感 精品

搏击俱乐部观后感 搏击俱乐部观后感 相当精彩的一部电影啊,似乎关于精神病题材的电影总是可以特别精彩,之前看的《机械师》,《禁闭岛》和《杀人游戏》,亦是如此。 怎么说呢,虽然是精神病,但是这部电影的精神病只是剧情的一个衔接点,让我印象特别深刻的则是关于信仰的讨论。 不得不说,现代社会过于固定的社会定位,造成大多数的人们都不得不像一部精密机械里的零件一般按部就班的工作,自然也就难以企及自身的梦想,甚至没有生活的意义,仅仅是单纯的生存罢了。 搏击俱乐部里的会员俱是如此,他们没有自己的信仰,故而很容易接受泰勒的观点,成为他忠实的拥护者,额,其实在俱乐部最狂热的那一段情节一直在我脑中回想的一句话就是邪教是怎么形成的。 真的是蛮震撼人心的,大概传销也是几近如此吧,针对泰勒所抨击的现代生活的精神现状,无疑是每个人都或多或少的存在的情形,过于秩序化的社会使得普通大众失去了独特的精神自我,没有信仰的人大多是在精神上比较脆弱和麻木,遗憾的是就我自身而言,尚不能找到自身得以奉行的信仰。 俱乐部的渐渐改变是在逐渐加深泰勒对俱乐部成员的精神影响,等到大破坏行动之时,邪教的精神已经正式形成,泰勒所能做到的也只是顺势引导而非改变了,他朋友被枪杀之后,会员自己竟然通过泰勒的话领悟到死后就能得到属于自己的名字这一荣誉。 这个片段让我心生恐怖,大多数的事件似乎都是因势利导,作为其中的领导者,最大的作用只是带领大家走向大多数人心中能信服的方向,哪怕是错的,在趋势形成之后,哪怕作为创造者和领导这也是无法改变这个趋势。 唉,文笔太差,不能好好评论这部精彩的电影。 至于剧情细节上做了很多铺垫,在杰克寻找泰勒,最终发现真相时的那一个剧情转折点时,前面所有的铺垫的效果登时如同烟花般绽放,这一点上《蝴蝶效应》与它颇有异曲同工之效。 尤其是在警察局被他的几个会员差点惩罚的那一段情节,他的所有脱身之计都被另一个人格泰勒想到,实在是妙不可言。

四大图谱综合解析

2013/12/2
四大图谱综合解析
1 某未知物分子式为C5 H12 O,它的质谱、红外光谱以及核磁共振谱如图,
它的紫外吸收光谱在200 nm以上没有吸收,试确定该化合物结构。
CCl4稀溶液的红外光谱, CCl4浓溶液 在3360cm-1处有1宽峰
[解] 从分子式C5H12O,求得不饱和度为零,故未知物应为 饱和脂肪族化合物。 未知物的红外光谱是在CCl4溶液中测定的,样品的CCl4稀溶液 的红外光谱在3640cm-1处有 1尖峰,这是游离 O H基的特征吸收 峰。样品的CCl4浓溶液在 3360cm-1处有 1宽峰,但当溶液稀释 后复又消失,说明存在着分子间氢键。未知物核磁共振谱中δ4. 1处的宽峰,经重水交换后消失。上述事实确定,未知物分子 中存在着羟基。 未知物核磁共振谱中δ0.9处的单峰,积分值相当3个质子,可 看成是连在同一碳原子上的3个甲基。δ3.2处的单峰,积分值 相当2个质子,对应1个亚甲基,看来该次甲基在分子中位于特 丁基和羟基之间。 质谱中从分子离子峰失去质量31(- CH2 OH)部分而形成基 峰m/e57的事实为上述看法提供了证据,因此,未知物的结构 CH3 是
H3C
C
CH3
CH2OH
根据这一结构式,未知物质谱中的主要碎片离子得到了如下 解释。
CH 3
2. 某未知物,它的质谱、红外光谱以及核磁共振谱如图,它的 紫外吸收光谱在210nm以上没有吸收,确定此未知物。
CH2
+ OH m/e31 -2H
+ . CH2OH
H3C
CH3
H3C
C
CH 3
C+
CH3
m/e88 -CH3 m/e29 m/e73
m/e57 -CH3 -H CH 3 C + CH 2
m/e41
[解] 在未知物的质谱图中最高质荷比131处有1个丰度很小的峰,应 为分子离子峰,即未知物的分子量为131。由于分子量为奇数,所以未 知物分子含奇数个氮原子。根据未知物的光谱数据中无伯或仲胺、腈、 酞胺、硝基化合物或杂芳环化合物的特征,可假定氮原子以叔胺形式存 在。 红外光谱中在1748 cm-1处有一强羰基吸收带,在1235 cm-1附近有1典型 的宽强C-O-C伸缩振动吸收带,可见未知物分子中含有酯基。1040 cm-1处的吸收带则进一步指出未知物可能是伯醇乙酸酯。 核磁共振谱中δ1.95处的单峰(3H),相当1个甲基。从它的化学位移来 看,很可能与羰基相邻。对于这一点,质谱中,m/e43的碎片离子 (CH3C=O)提供了有力的证据。在核磁共振谱中有2个等面积(2H)的三重 峰,并且它们的裂距相等,相当于AA’XX'系统。有理由认为它们是2个 相连的亚甲-CH2-CH2,其中去屏蔽较大的亚甲基与酯基上的氧原子 相连。 至此,可知未知物具有下述的部分结构:
O CH 2 CH 2 O C CH 3
从分子量减去这一部分,剩下的质量数是 44,仅足以组 成1个最简单的叔胺基。
CH 3 CH3 N
正好核磁共振谱中δ2. 20处的单峰(6H ),相当于2个连到氮原子上 的甲基。因此,未知物的结构为:
CH3 CH3 O N CH2 CH2 O C CH3
此外,质谱中的基峰m /e 58是胺的特征碎片离子峰,它是由氮原子 的β位上的碳碳键断裂而生成的。结合其它光谱信息,可定出这个 碎片为
CH3 CH3 N CH 2
1

遥感卫星影像正射影像图制作技术总结

遥感卫星影像正射影像图制作技术总结 二〇一八年九月十二日

目录 1. 项目概述 (1) 1.1 目的 (1) 1.2 围和任务量 (1) 2. 技术路线 (1) 3. 影像处理 (1) 3.1 基础资料检查及处理 (1) 3.2 影像融合 (1) 3.2.1融合方法 (1) 3.2.2融合效果 (1) 3.3 正射纠正 (1) 3.3.1控制点情况 (1) 3.3.2纠正模型 (1) 3.3.3纠正方法 (1) 4.正射影像图制作 (1) 4.1 影像色调调整 (1) 4.2 影像镶嵌 ....................................................................................................... 错误!未定义书签。5.成果整理. (1)

1. 项目概述 1.1 目的 部分地区遥感正射影像图制图项目生产,其主要工作容为以外业实测控制点和1:5万比例尺数据高程模型为基础,利用Pleiades遥感影像为数据源,使用遥感图像处理软件进行正射纠正、配准、融合、镶嵌,制作全区遥感正射影像图。 1.2 围和任务量 作业区为省是妃甸区沿海地区某海岛,工作区包含1景Pleiades 遥感卫星数据源,总面积约88平方公里。作业区具体情况如下: 图1-1 作业区

图1-2 卫星数据分布图 本项目的起止时间为:2018年9月7日至2018年9月8日。为保证本项目的顺利实施,公司安排专人负责,实施生产全过程质量控制,探求新方法、新技术、新工艺来提高生产效率。共投入作业人员一名,DELL T5500工作站1台,Erdas 2014软件1套,PCI Geomatics 2014软件1套,PhotoShop CS6软件1套,ArcMap 10软件1套,Microsoft Office 2007软件1套。 2. 技术路线 依据合同及相关生产技术规定,采用甲方提供的外业实测控制点及1:50000数字高程模型为控制、纠正基础,对作业区的卫星影像进行融合,并对融合后的影像进行正射纠正、镶嵌、调色等,完成遥感正射影像图的制作。其流程为:

社交网络观后感

社交网络观后感 社交网络>观后感(一) The Social Network 1. You're not an asshole,you're just trying so hard to be. 我思考了很久,这句话到底是一个陈述还是一个讽刺。 马克绝不是一个卖友求荣,专门盗取他人创意的混蛋,从头至尾,他只是一个天才的程序员,一个SAT1600满分智商可能高达200总是能很快的发现事物本质的哈佛大学学生。这看起来很酷,但是如果在他这么多优势的后面加一句‘他从来不懂得如何与人沟通’之后,你会发现这将是灾难性的。 于是这个改变世界的Facebook建立的原因竟然是马克的女友的一句'You're an asshole',当然这绝对是一句气话,那时的马克还只是一只人畜无害的正太而已。但是没想到这句话却成为了一个魔咒,就像希腊悲剧《俄狄浦斯王》里面的主人公俄狄浦斯一样,成为了英雄却最后才发现自己弑父娶母。少不更事的马克最后成为了世界上最年轻的亿万富翁却背叛了他最好的朋友而且官司缠身。 但是我还是不认为他是一个混蛋,他只是单纯的想让Facebook变得更好,他选择了SEAN而不是爱德华多是因为SEAN在这方面确实很Awesome.他选择了50万的风投因为在当时的情况来看50万的风投简直就是天上掉馅饼,风投让他迅速成功了,也许爱德华多也能让他成功但是可能会慢点。但是他并不知道风投会带来稀释股份的后果,他只是一个程序员而已,他不懂经济。而恰恰这类事情应该是爱德华多来处理但是他却粗心大意。我们不妨做个假设,假如马克知道这一切,看到了隐藏的陷阱,他还会背叛他的朋友吗?事实是马克一直把爱德华多当成自己最好的朋友,而他说这话的时候却发现爱德华多早已离席并最终换来一句冷冷的'I was your only friend.' 在社会价值方面,马克赚得满腹盆溢,Facebook成为全球最大的sns,注册用户超过5亿,Facebook直接改变了我们的交流习惯,这些东西足以将马克载入史册,但是在个人价值方面,马克却输得一塌糊涂,除了钱还是钱,没有一个朋友。 I have 500 million fans around the world,but the only one who I used to care never add me as a friend. 因此这既是一个陈述也是一个讽刺。 我想这样说这句话可能会更合适。You're not an asshole,you're just trying so hard to make Facebook perfect.

相关文档
相关文档 最新文档