DSP2812学习笔记-Flash固化操作

DSPFlashLED以CCS3.3版本为例,介绍下关于DSP2812固化烧写的过程。

1.保证工程在RAM中调试完成;

2.配置好Flash.cmd文件,并加入工程;(CMD文件编写参考 ,Flash.cmd代码见附录1)

3.加入起始代码asm文件DSP281x_CodeStartBranch.asm;

4.配置C文件,并将初始化FLASH中的代码拷贝到RAM中运行;(C文件配置见附录2)

5.重新编译工程;

6.选择工具栏 Tools--F28xx On--Chip Flash Programmer,打开烧写工具,设置相关配置。

  (1)首先设置 Clock configuration ,输入30,意思是晶振频率为30M,PLLCR 根据工程内的实际配置进行选择,一般为10,系统时钟SYSCLKOUT此时为150M;

  (2)单击Flash Programmer Settings.选择设备 F2812,Selectversion to flash API 选择 FlashAPI-Interface2812V2_10.out.配置完成单机OK。

7.单击Execute Operation 开始烧写,烧写成功,断开仿真器,断电重启测试。

注意事项:

1. 一定要拔除仿真器(JTAG端),给电路板重新上电,方能实现FLASH启动。
2. 注意MP/MC引脚的电压。0为方式MC来作为计算机模式启动,3.3V为方式MP作为微处理器模式启动。
3. 由于GPIO引脚的F4F12F3F2决定了DSP2812的启动顺序,而从FLASH必须要在F4(SCITXDA)为1,而F12F3F2随意的状态下启动。请大家启动前确认F4引脚电压。

附录1:

Flash_Link.cmd

  1 /*------------------------------------------*/
  2 /*描述:通过MEMORY伪指令来指示存储空间       */
  3 /*------------------------------------------*/
  4
  5 MEMORY      /* Program Memory */
  6 {
  7 PAGE 0 :
  8    FLASH      : origin = 0x3D8000, length = 0x01FF80 /* on-chip FLASH */
  9    BEGIN      : origin = 0x3F7FF6, length = 0x000002
 10    ROM        : origin = 0x3FF000, length = 0x000FC0
 11    RESET      : origin = 0x3FFFC0, length = 0x000002
 12
 13    VECTORS    : origin = 0x3FFFC2, length = 0x00003E /* part of Boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */
 14    RAML0      : origin = 0x008000, length = 0x001000
 15
 16 PAGE 1 :
 17    RAMM0      : origin = 0x000000, length = 0x000400     /* on-chip RAM block M0 */
 18    RAMM1      : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
 19    RAML1      : origin = 0x009000, length = 0x001000     /* on-chip RAM block L1 */
 20    RAMH0      : origin = 0x3F8000, length = 0x002000     /* on-chip RAM block H0 */
 21
 22    DEV_EMU    : origin = 0x000880, length = 0x000180     /* device emulation registers */
 23    PIE_VECT   : origin = 0x000D00, length = 0x000100     /* PIE Vector Table */
 24    FLASH_REGS : origin = 0x000A80, length = 0x000060     /* FLASH registers */
 25    CSM        : origin = 0x000AE0, length = 0x000010     /* code security module registers */
 26    XINTF      : origin = 0x000B20, length = 0x000020     /* external interface registers */
 27    CPU_TIMER0 : origin = 0x000C00, length = 0x000008     /* CPU Timer0 registers */
 28    CPU_TIMER1 : origin = 0x000C08, length = 0x000008     /* CPU Timer1 registers */
 29    CPU_TIMER2 : origin = 0x000C10, length = 0x000008     /* CPU Timer2 registers */
 30    PIE_CTRL   : origin = 0x000CE0, length = 0x000020     /* PIE control registers */
 31    ECANA      : origin = 0x006000, length = 0x000040     /* eCAN control and status registers */
 32    ECANA_LAM  : origin = 0x006040, length = 0x000040     /* eCAN local acceptance masks */
 33    ECANA_MOTS : origin = 0x006080, length = 0x000040     /* eCAN message object time stamps */
 34    ECANA_MOTO : origin = 0x0060C0, length = 0x000040     /* eCAN object time-out registers */
 35    ECANA_MBOX : origin = 0x006100, length = 0x000100     /* eCAN mailboxes */
 36    SYSTEM     : origin = 0x007010, length = 0x000020     /* System control registers */
 37    SPIA       : origin = 0x007040, length = 0x000010     /* SPI registers */
 38    SCIA       : origin = 0x007050, length = 0x000010     /* SCI-A registers */
 39    XINTRUPT   : origin = 0x007070, length = 0x000010     /* external interrupt registers */
 40    GPIOMUX    : origin = 0x0070C0, length = 0x000020     /* GPIO mux registers */
 41    GPIODAT    : origin = 0x0070E0, length = 0x000020     /* GPIO data registers */
 42    ADC        : origin = 0x007100, length = 0x000020     /* ADC registers */
 43    EVA        : origin = 0x007400, length = 0x000040     /* Event Manager A registers */
 44    EVB        : origin = 0x007500, length = 0x000040     /* Event Manager B registers */
 45    SCIB       : origin = 0x007750, length = 0x000010     /* SCI-B registers */
 46    MCBSPA     : origin = 0x007800, length = 0x000040     /* McBSP registers */
 47    CSM_PWL    : origin = 0x3F7FF8, length = 0x000008     /* Part of FLASHA.  CSM password locations. */
 48 }
 49
 50 /*------------------------------------------*/
 51 /*描述:设置堆栈值                            */
 52 /*------------------------------------------*/
 53 -stack 400
 54
 55 /*------------------------------------------*/
 56 /*描述:通过SECTION伪指令来分配段到存储空间  */
 57 /*------------------------------------------*/
 58
 59 SECTIONS
 60 {
 61    .reset           : >  RESET,     PAGE = 0, TYPE = DSECT
 62    vectors            : >  VECTORS,   PAGE = 0, TYPE = DSECT
 63    .cinit           : >  FLASH,     PAGE = 0
 64    .text            : >  FLASH,     PAGE = 0
 65    codestart        : >  BEGIN,     PAGE = 0
 66
 67    ramfuncs: LOAD=FLASH, PAGE=0
 68                 RUN=RAML0,PAGE=0
 69              LOAD_START(_RamfuncsLoadStart),
 70              LOAD_END(_RamfuncsLoadEnd),
 71              RUN_START(_RamfuncsRunStart)
 72
 73    .const           : > FLASH,       PAGE = 0
 74    .econst          : > FLASH,       PAGE = 0
 75
 76    .data2             : > RAMM1,         PAGE = 1
 77    .stack           : > RAMM0,       PAGE = 1
 78    .bss                : > RAML1,       PAGE = 1
 79    .ebss            : > RAML1,       PAGE = 1
 80    .sysmem            : > RAMH0,       PAGE = 1
 81    .esysmem         : > RAMH0,       PAGE = 1
 82
 83    /* Allocate IQ math areas: */
 84    IQmath           : > FLASH,       PAGE = 0                /* Math Code */
 85    IQmathTables     : > ROM,         PAGE = 0, TYPE = NOLOAD /* Math Tables In ROM */
 86
 87
 88    PieVectTableFile : > PIE_VECT,   PAGE = 1
 89
 90 /*** Peripheral Frame 0 Register Structures ***/
 91    DevEmuRegsFile   : > DEV_EMU,     PAGE = 1
 92    FlashRegsFile    : > FLASH_REGS,  PAGE = 1
 93    CsmRegsFile      : > CSM,         PAGE = 1
 94    XintfRegsFile    : > XINTF,       PAGE = 1
 95    CpuTimer0RegsFile: > CPU_TIMER0,  PAGE = 1
 96    CpuTimer1RegsFile: > CPU_TIMER1,  PAGE = 1
 97    CpuTimer2RegsFile: > CPU_TIMER2,  PAGE = 1
 98    PieCtrlRegsFile  : > PIE_CTRL,    PAGE = 1
 99
100 /*** Peripheral Frame 1 Register Structures ***/
101    ECanaRegsFile    : > ECANA,       PAGE = 1
102    ECanaLAMRegsFile : > ECANA_LAM    PAGE = 1
103    ECanaMboxesFile  : > ECANA_MBOX   PAGE = 1
104    ECanaMOTSRegsFile: > ECANA_MOTS   PAGE = 1
105    ECanaMOTORegsFile: > ECANA_MOTO   PAGE = 1
106
107 /*** Peripheral Frame 2 Register Structures ***/
108    SysCtrlRegsFile  : > SYSTEM,      PAGE = 1
109    SpiaRegsFile     : > SPIA,        PAGE = 1
110    SciaRegsFile     : > SCIA,        PAGE = 1
111    XIntruptRegsFile : > XINTRUPT,    PAGE = 1
112    GpioMuxRegsFile  : > GPIOMUX,     PAGE = 1
113    GpioDataRegsFile : > GPIODAT      PAGE = 1
114    AdcRegsFile      : > ADC,         PAGE = 1
115    EvaRegsFile      : > EVA,         PAGE = 1
116    EvbRegsFile      : > EVB,         PAGE = 1
117    ScibRegsFile     : > SCIB,        PAGE = 1
118    McbspaRegsFile   : > MCBSPA,      PAGE = 1
119
120 /*** Code Security Module Register Structures ***/
121    CsmPwlFile       : > CSM_PWL,     PAGE = 1
122
123 }

附录2:将初始化Flash代码加载到RAM中运行(如果CSM已加密,则必须冲可加密的RAM块L0和L1中执行初始化Flash代码)

Flash_Link.cmd文件中,加载FLASH到RAM:
 ramfuncs: LOAD=FLASH, PAGE=0
      RUN=RAML0,PAGE=0
      LOAD_START(_RamfuncsLoadStart),
         LOAD_END(_RamfuncsLoadEnd),
                RUN_START(_RamfuncsRunStart)

从FLASH中加载,在RAML0中运行,加载起始地址为_RamfuncsLoadStart,结束地址为_RamfuncsLoadEnd,运行起始地址为_RamfuncsRunStart。

main.c文件中,将初始化FLASH代码复制到RAM:

 1 /*****************头文件********************/
 2 #include "DSP281x_Device.h"
 3 #include "System.h"
 4
 5 /****************端口宏定义*****************/
 6
 7 /****************常量宏定义*****************/
 8
 9 /***************全局变量定义****************/
10
11 /****************函数声明*******************/
12 void DelayMs(int nms)
13 {
14   unsigned int i,j,k;
15   for (i = 0;i < 110;i++)
16     for(j = 0;j < 110;j++)
17       for(k = 0;k < nms;k++)
18       {}
19 }
20
21 /*------------------------------------------*/
22 /*形式参数:void                            */
23 /*返回值:void                                */
24 /*函数描述:主函数                            */
25 /*------------------------------------------*/
26 void main(void)
27 {
28     InitSysCtrl();  // 系统初始化子程序,在DSP28_sysctrl.c中
29     MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);//将初始化Flash代码复制到RAM
30     InitFlash();//初始化Flash
31     EALLOW;
32     GpioMuxRegs.GPADIR.all=0xff;//设置D1对应的DSP引脚为输出
33     GpioMuxRegs.GPBDIR.all=0;//设置D1对应的DSP引脚为输出
34     EDIS;
35     GpioDataRegs.GPADAT.all=0;
36     while(1)
37     {
38 //按键控制LED
39 /*         if(GpioDataRegs.GPBDAT.bit.GPIOB1 == 0)       */
40 /*         {                                             */
41 /*           DelayMs(1);                                 */
42 /*           GpioDataRegs.GPATOGGLE.bit.GPIOA0 = 1;      */
43 /*           while(GpioDataRegs.GPBDAT.bit.GPIOB1 == 0); */
44 /*         }                                             */
45 /*                                                    */
46 /*         if(GpioDataRegs.GPBDAT.bit.GPIOB2 == 0)       */
47 /*         {                                             */
48 /*           DelayMs(1);                                 */
49 /*           GpioDataRegs.GPATOGGLE.bit.GPIOA1 = 1;      */
50 /*           while(GpioDataRegs.GPBDAT.bit.GPIOB2 == 0); */
51 /*         }                                             */
52 /*                                                    */
53 /*         if(GpioDataRegs.GPBDAT.bit.GPIOB3 == 0)       */
54 /*         {                                             */
55 /*           DelayMs(1);                                 */
56 /*           GpioDataRegs.GPATOGGLE.bit.GPIOA2 = 1;      */
57 /*           while(GpioDataRegs.GPBDAT.bit.GPIOB3 == 0); */
58 /*         }                                             */
59 /*                                                    */
60 /*         if(GpioDataRegs.GPBDAT.bit.GPIOB4 == 0)       */
61 /*         {                                             */
62 /*           DelayMs(1);                                 */
63 /*           GpioDataRegs.GPATOGGLE.bit.GPIOA3 = 1;      */
64 /*           while(GpioDataRegs.GPBDAT.bit.GPIOB4 == 0); */
65 /*         }                                              */
66 //流水灯
67             GpioDataRegs.GPADAT.all=0x0001;//D1对应输出低电平,发光二极管点亮
68          DelayMs(100);
69          GpioDataRegs.GPADAT.all=0x0002;//D1对应输出低电平,发光二极管点亮
70          DelayMs(100);
71          GpioDataRegs.GPADAT.all=0x0004;//D1对应输出低电平,发光二极管点亮
72          DelayMs(100);
73          GpioDataRegs.GPADAT.all=0x0008;//D1对应输出低电平,发光二极管点亮
74          DelayMs(100);
75          GpioDataRegs.GPADAT.all=0x0010;//D1对应输出低电平,发光二极管点亮
76          DelayMs(100);
77          GpioDataRegs.GPADAT.all=0x0020;//D1对应输出低电平,发光二极管点亮
78          DelayMs(100);
79          GpioDataRegs.GPADAT.all=0x0040;//D1对应输出低电平,发光二极管点亮
80          DelayMs(100);
81          GpioDataRegs.GPADAT.all=0x0080;//D1对应输出低电平,发光二极管点亮
82          DelayMs(100);
83     }
84 }
85
86
87
88
89  

main.c

InitSysCtrl();  // 系统初始化子程序,在DSP28_sysctrl.c中
 MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);//将初始化Flash代码复制到RAM
 InitFlash();//初始化Flash

MemCopy将RamfuncsLoadStart作为源地址起始地址,RamfuncsLoadEnd作为源地址结束地址,将源地址数据复制到目的地址RamfuncsRunStart,从而实现将Flash代码复制到RAM中。

其中MemCopy函数在rts2800_ml.lib C支持库中定义。

DSP281x_GlobalPrototypes.h文件中定义所用变量:

DSP281x_GlobalPrototypes.h

 1  #ifndef _System_H_
 2 #define _System_H_
 3
 4 #ifdef __cplusplus
 5 extern "C" {
 6 #endif
 7
 8 //系统初始化相关函数声明
 9 extern void InitSysCtrl(void);
10 extern void InitPieCtrl(void);
11 extern void InitPieVectTable(void);
12 extern void EnableInterrupts(void);
13 extern void InitSysCtrl(void);
14 extern void InitPll(Uint16 val);
15 extern void InitPeripheralClocks(void);
16 extern void KickDog(void);
17 extern void DisableDog(void);
18 extern Uint16 CsmUnlock(void);
19 extern void InitFlash(void);
20
21 extern void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr);
22
23 //声明外部变量,下面三个变量是链接器产生的全局变量
24 extern Uint16 RamfuncsLoadStart;
25 extern Uint16 RamfuncsLoadEnd;
26 extern Uint16 RamfuncsRunStart;
27
28 #ifdef __cplusplus
29 }
30 #endif
31
32 #endif

extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;

sysctrl.c文件中,flash初始化函数InitFlash()定义、ramfuncs定义。

  1 #include "DSP281x_Device.h"
  2 #include "System.h"
  3
  4 #pragma CODE_SECTION(InitFlash, "ramfuncs");
  5
  6 /*------------------------------------------*/
  7 /*形式参数:void                            */
  8 /*返回值:void                                */
  9 /*函数描述:初始化系统                       */
 10 /*------------------------------------------*/
 11 void InitSysCtrl(void)
 12 {
 13    DisableDog();//禁止看门狗
 14    InitPll(0x8);//设置系统时钟=XCLKIN*8/2
 15    InitPeripheralClocks();    //设置外设时钟
 16    DINT;                        // 关闭总中断
 17    IER = 0x0000;               // 关闭外设中断
 18    IFR = 0x0000;               // 清中断标志
 19    InitPieCtrl();            //初始化PIE控制寄存器
 20    InitPieVectTable();        //使能PIE向量表
 21 }
 22
 23 /*------------------------------------------*/
 24 /*形式参数:void                            */
 25 /*返回值:void                                */
 26 /*函数描述:禁止看门狗                       */
 27 /*------------------------------------------*/
 28 void DisableDog(void)
 29 {
 30     EALLOW;
 31     SysCtrlRegs.WDCR= 0x0068;
 32     EDIS;
 33 }
 34 /*------------------------------------------*/
 35 /*形式参数:void                            */
 36 /*返回值:void                                */
 37 /*函数描述:喂看门狗                         */
 38 /*------------------------------------------*/
 39 void KickDog(void)
 40 {
 41     EALLOW;
 42     SysCtrlRegs.WDKEY = 0x0055;
 43     SysCtrlRegs.WDKEY = 0x00AA;
 44     EDIS;
 45 }
 46 /*------------------------------------------*/
 47 /*形式参数:void                            */
 48 /*返回值:void                                */
 49 /*函数描述:设置锁相环倍频系数               */
 50 /*------------------------------------------*/
 51 void InitPll(Uint16 val)
 52 {
 53    volatile Uint16 iVol;
 54
 55    if (SysCtrlRegs.PLLCR.bit.DIV != val)
 56    {
 57
 58       EALLOW;
 59       SysCtrlRegs.PLLCR.bit.DIV = val;
 60       EDIS;
 61
 62       for(iVol= 0; iVol<4096; iVol++);
 63    }
 64 }
 65
 66 /*------------------------------------------*/
 67 /*形式参数:void                            */
 68 /*返回值:void                                */
 69 /*函数描述:初始化外设时钟                   */
 70 /*------------------------------------------*/
 71 void InitPeripheralClocks(void)
 72 {
 73    EALLOW;
 74
 75    SysCtrlRegs.HISPCP.all = 0x0001;//设置高速时钟 2分频
 76    SysCtrlRegs.LOSPCP.all = 0x0002;//设置低速时钟 4分频
 77
 78    //使能外围模块时钟
 79    SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;
 80    SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;
 81    SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1;
 82    SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1;
 83    SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=1;
 84    SysCtrlRegs.PCLKCR.bit.SPIENCLK=1;
 85    SysCtrlRegs.PCLKCR.bit.ECANENCLK=1;
 86    SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;
 87    EDIS;
 88 }
 89 /*------------------------------------------*/
 90 /*形式参数:void                            */
 91 /*返回值:void                                */
 92 /*函数描述:初始化Flash                        */
 93 /*------------------------------------------*/
 94 void InitFlash(void)
 95 {
 96    EALLOW;
 97    FlashRegs.FPWR.bit.PWR = 3;    //设置Flash为正常工作状态
 98    FlashRegs.FBANKWAIT.bit.RANDWAIT = 5;//设置随机存取等待时间
 99    FlashRegs.FBANKWAIT.bit.PAGEWAIT = 5;//设置页面存取等待时间
100    FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF;        //设置从睡眠到等待的转换时间
101    FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF;    //设置从等待到激活的转换时间
102    FlashRegs.FOPT.bit.ENPIPE = 1;        //使能流水线模式
103    EDIS;
104    asm(" RPT #7 || NOP");//软件延时,等待流水线刷新
105 }
106
107 /*------------------------------------------*/
108 /*形式参数:void                            */
109 /*返回值:状态值                                */
110 /*函数描述:unlocks the CSM                  */
111 /*------------------------------------------*/
112 #define STATUS_FAIL          0
113 #define STATUS_SUCCESS       1
114
115 Uint16 CsmUnlock()
116 {
117     volatile Uint16 temp;
118
119     // 写入密钥,应将0xFFFF替换成密钥值
120     EALLOW;
121     CsmRegs.KEY0 = 0xFFFF;
122     CsmRegs.KEY1 = 0xFFFF;
123     CsmRegs.KEY2 = 0xFFFF;
124     CsmRegs.KEY3 = 0xFFFF;
125     CsmRegs.KEY4 = 0xFFFF;
126     CsmRegs.KEY5 = 0xFFFF;
127     CsmRegs.KEY6 = 0xFFFF;
128     CsmRegs.KEY7 = 0xFFFF;
129     EDIS;
130
131     /// 执行空读
132     temp = CsmPwl.PSWD0;
133     temp = CsmPwl.PSWD1;
134     temp = CsmPwl.PSWD2;
135     temp = CsmPwl.PSWD3;
136     temp = CsmPwl.PSWD4;
137     temp = CsmPwl.PSWD5;
138     temp = CsmPwl.PSWD6;
139     temp = CsmPwl.PSWD7;
140
141     if (CsmRegs.CSMSCR.bit.SECURE == 0)
142         return STATUS_SUCCESS;
143     else
144         return STATUS_FAIL;
145 } 

sysctrl.c

#pragma CODE_SECTION(InitFlash, "ramfuncs");

/*------------------------------------------*/
/*形式参数:void                            */
/*返回值:void                    */
/*函数描述:初始化Flash                  */
/*------------------------------------------*/
void InitFlash(void)
{
   EALLOW;
   FlashRegs.FPWR.bit.PWR = 3; //设置Flash为正常工作状态
   FlashRegs.FBANKWAIT.bit.RANDWAIT = 5;//设置随机存取等待时间
   FlashRegs.FBANKWAIT.bit.PAGEWAIT = 5;//设置页面存取等待时间
   FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF;  //设置从睡眠到等待的转换时间
   FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF; //设置从等待到激活的转换时间
   FlashRegs.FOPT.bit.ENPIPE = 1;  //使能流水线模式
   EDIS;
   asm(" RPT #7 || NOP");//软件延时,等待流水线刷新
}

将InitFlash函数通过#program伪指令产生"ramfuncs"段,通过编译器将段的起始地址、结束地址及运行起始地址复制给RamfuncsLoadStart、RamfuncsLoadEnd、RamfuncsRunStart三个全局变量,在CMD文件指定地址于变量对应起来,在主函数中将Flash代码通过MemCopy函数复制到RAM中。

对于一些对时间敏感的代码也可加载到RAM中运行,以提高代码运行效率,方法可参考初始化Flash代码加载到RAM的操作。

时间: 2024-10-09 15:32:39

DSP2812学习笔记-Flash固化操作的相关文章

jQuery学习笔记--JqGrid相关操作 方法列表(上)

1.获得当前列表行数:$("#gridid").getGridParam("reccount"); 2.获取选中行数据(json):$("#gridid").jqGrid('getRowData', id); 3.刷新列表:$(refreshSelector).jqGrid('setGridParam', { url: ''), postData: ''}).trigger('reloadGrid'); 4.选中行:$("#jqGrid

mongodb 学习笔记 02 -- CURD操作

mongodb 学习笔记 02 – CURD操作 CURD代表创建(Create).更新(Update).读取(Read)和删除(Delete)操作 创建库 直接 use 库名 然后创建collection 就可以创建库 创建collecion db.createCollection("collectionName") 隐式创建collection db.collectionName.insert({xxxxxx}) 删除collection db.collectionName.dro

java学习笔记07--日期操作类

java学习笔记07--日期操作类 一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. [java] view plaincopy public class T { public static void main(String[] args) { Date date  = new Date(); System.out.println("当前日期:"+date); //当前日期:Thu May 16 23:00:57 CST 

学习笔记_SVN常用操作

Subversion安装 subversion软件下载安装 http://subversion.tigris.org 我们使用版本Setup-Subversion-1.6.5.msi 双击安装Setup-Subversion-1.6.5.msi 命令模式: Subversion 组件  服务器组件 (管理员使用)  服务器端命令  svnadmin:用来调整和修正svn档案库的工具  svnserve:一个独立的服务器程序, 可以作为服务器行程执行, 或是被 SSH 启动; 另一个让你的档

Perl语言学习笔记 13 目标操作

1.改变目录 chdir "/etc" or die "can't chdir to '/etc'!\n"; 省略参数会回到用户主目录,与cd效果一样: 2.文件名通配 my @all_files = glob "*"; #不包括以点号开头的文件 my @pm_files = glob "*.pm"; 一次匹配多种模式,用空格隔开:my @files = ".* *"; #可以匹配所有的文件,包括以点号开头

HTML&CSS基础学习笔记6-文本操作标签

文本也许是HTML里最常见的元素了,所以我们有必要对HTML的文本操作标签做下认识. 1. <em>,<i>内的文字呈现为倾斜效果: 2. <strong>,<b>内的文字呈现为加粗效果: 3. <b>,<i>只是单纯的为了让文本具有某种特殊样式,而<strong>,<em>不仅带有特殊样式,而且也表达了某种语义: 4. 在单纯的为了达到某种样式的情况下,建议使用不带有语义的标签. 体验如下:http://ww

Symfony2学习笔记之数据库操作

数据库和Doctrine让我们来面对这个对于任何应用程序来说最为普遍最具挑战性的任务,从数据库中读取和持久化数据信息.幸运的是,Symfony和Doctrine进行了集成,Doctrine类库全部目标就是给你一个强大的工具,让你的工作更加容易. Doctrine是完全解耦与Symfony的,所以并不一定要使用它. 一个简单例子:一个产品,我们首先来配置数据库,创建一个Product对象,持久化它到数据库并把它读回来. 首先我们需要创建一个bundle: $php app/console gene

硬件初始化,nand flash固化操作,系统启动简单流程

2015.3.27星期五 晴 链接脚本定义代码的排放顺序 硬件系统初始化:一:arm核初始化:(里面有指令)初始化ARM核的时候需要看arm核的手册指令:1.异常向量(最起码有个复位异常,初始化模式-svc) ldr r0, =_start mcr p15, 0, r0, c12, c0, 0 2.处理器模式-SVC3.关闭中断 mrs r0, cpsr bic r0, r0, #0x1f orr r0, r0, #0xd3 @1101 0011 //关闭irq,fiq和设置SVC msr cp

DSP2812学习笔记-内部Flash启动过程

2812从内部flash启动的详细流程说明: a) 程序硬件复位或者软件复位 b) 判断mp/mc是否为0,为0则从boot rom启动,否则从外部启动(见附录1) c) 到boot rom的0x3FFFC0处取出复位向量,跳到boot函数 d) 采集IO管脚状态,根据IO状态选择boot方式(见附录2) e) 如果是flash,程序退出boot函数,跳转到0x3F7FF6 f) 取出跳转指令,跳转到自己的指定地址或者C初始化的入口_C_INT00处 g)  在C初始化的入口_C_INT00对一