国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 5562|回復: 9
打印 上一主題 下一主題

怎么看待啟動程序

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2009-8-10 14:04:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
關鍵詞: 程序
我剛接觸ARM,發(fā)現(xiàn)它還有一個叫啟動程序的東西,我想問問怎么來看待這個,如果換芯片以后是不是要自己來寫?
沙發(fā)
發(fā)表于 2009-8-10 15:25:09 | 只看該作者
不需要自己寫,原廠或第三方會做,你要分析理解它
板凳
 樓主| 發(fā)表于 2009-8-11 08:16:30 | 只看該作者
通過看什么可以理解它?是不是應用不同的功能,要修改或添加相應的啟動程序?它與boot有什么區(qū)別?
地板
發(fā)表于 2009-8-11 09:02:39 | 只看該作者
一步步分析源代碼。通常指的boot是一個完整功能的應用程序,通常是用來裝載或引導操作系統(tǒng)(或其它應用程序的),而啟動代碼是任何一個應用程序,當然也包括boot的一部分,他的目的是上電之后初始化處理器硬件,使其它后續(xù)的程序能夠正常運行。
地下室
 樓主| 發(fā)表于 2009-8-11 15:05:31 | 只看該作者
哦,原來是這樣,但是我想知道讀懂或者說分析啟動程序的基礎是什么,或者說必須要先看懂什么,才能讀懂啟動代碼?還有就是這么知道哪些需要有,哪些可以不寫(我理解是沒有用到的功能可以不寫)。總之就一句話,讀懂啟動代碼的基礎是什么呢?
6
發(fā)表于 2009-8-12 13:29:44 | 只看該作者
摸著石頭過河
7
發(fā)表于 2009-8-12 14:15:00 | 只看該作者
發(fā)一個winarm編譯器的lpc2000啟動文件,感覺寫的非常清晰.  

      .global main                    // int main(void)

        .global _etext                  // -> .data initial values in ROM
        .global _data                   // -> .data area in RAM
        .global _edata                  // end of .data area
        .global __bss_start             // -> .bss area in RAM
        .global __bss_end__             // end of .bss area
        .global _stack                  // top of stack

// Stack Sizes
        .set  UND_STACK_SIZE, 0x00000004
        .set  ABT_STACK_SIZE, 0x00000004
        .set  FIQ_STACK_SIZE, 0x00000004
        .set  IRQ_STACK_SIZE, 0X00000080
        .set  SVC_STACK_SIZE, 0x00000004

// Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs
        .set  MODE_USR, 0x10            // User Mode
        .set  MODE_FIQ, 0x11            // FIQ Mode
        .set  MODE_IRQ, 0x12            // IRQ Mode
        .set  MODE_SVC, 0x13            // Supervisor Mode
        .set  MODE_ABT, 0x17            // Abort Mode
        .set  MODE_UND, 0x1B            // Undefined Mode
        .set  MODE_SYS, 0x1F            // System Mode

        .equ  I_BIT, 0x80               // when I bit is set, IRQ is disabled
        .equ  F_BIT, 0x40               // when F bit is set, FIQ is disabled

        .text
        .code 32
        .align 2

        .global _boot
        .func   _boot
_boot:

// Runtime Interrupt Vectors
// -------------------------
Vectors:
        b     _start                    // reset - _start
        ldr   pc,_undf                  // undefined - _undf
        ldr   pc,_swi                   // SWI - _swi
        ldr   pc,_pabt                  // program abort - _pabt
        ldr   pc,_dabt                  // data abort - _dabt
        nop                             // reserved
        ldr   pc,[pc,#-0xFF0]           // IRQ - read the VIC
        ldr   pc,_fiq                   // FIQ - _fiq

#if 0
// Use this group for production
_undf:  .word _reset                    // undefined - _reset
_swi:   .word _reset                    // SWI - _reset
_pabt:  .word _reset                    // program abort - _reset
_dabt:  .word _reset                    // data abort - _reset
_irq:   .word _reset                    // IRQ - _reset
_fiq:   .word _reset                    // FIQ - _reset

#else
// Use this group for development
_undf:  .word __undf                    // undefined
_swi:   .word __swi                     // SWI
_pabt:  .word __pabt                    // program abort
_dabt:  .word __dabt                    // data abort
_irq:   .word __irq                     // IRQ
_fiq:   .word __fiq                     // FIQ

__undf: b     .                         // undefined
__swi:  b     .                         // SWI
__pabt: b     .                         // program abort
__dabt: b     .                         // data abort
__irq:  b     .                         // IRQ
__fiq:  b     .                         // FIQ
#endif
        .size _boot, . - _boot
        .endfunc


// Setup the operating mode & stack.
// ---------------------------------
        .global _start, start, _mainCRTStartup
        .func   _start

_start:
start:
_mainCRTStartup:

// Initialize Interrupt System
// - Set stack location for each mode
// - Leave in System Mode with Interrupts Disabled
// -----------------------------------------------
        ldr   r0,=_stack
        msr   CPSR_c,#MODE_UND|I_BIT|F_BIT // Undefined Instruction Mode
        mov   sp,r0
        sub   r0,r0,#UND_STACK_SIZE
        msr   CPSR_c,#MODE_ABT|I_BIT|F_BIT // Abort Mode
        mov   sp,r0
        sub   r0,r0,#ABT_STACK_SIZE
        msr   CPSR_c,#MODE_FIQ|I_BIT|F_BIT // FIQ Mode
        mov   sp,r0
        sub   r0,r0,#FIQ_STACK_SIZE
        msr   CPSR_c,#MODE_IRQ|I_BIT|F_BIT // IRQ Mode
        mov   sp,r0
        sub   r0,r0,#IRQ_STACK_SIZE
        msr   CPSR_c,#MODE_SVC|I_BIT|F_BIT // Supervisor Mode
        mov   sp,r0
        sub   r0,r0,#SVC_STACK_SIZE
        msr   CPSR_c,#MODE_SYS|I_BIT|F_BIT // System Mode
        mov   sp,r0

// Copy initialized data to its execution address in RAM
// -----------------------------------------------------
#ifdef ROM_RUN
        ldr   r1,=_etext                // -> ROM data start
        ldr   r2,=_data                 // -> data start
        ldr   r3,=_edata                // -> end of data
1:      cmp   r2,r3                     // check if data to move
        ldrlo r0,[r1],#4                // copy it
        strlo r0,[r2],#4
        blo   1b                        // loop until done
#endif
// Clear .bss
// ----------
        mov   r0,#0                     // get a zero
        ldr   r1,=__bss_start           // -> bss start
        ldr   r2,=__bss_end__           // -> bss end
2:      cmp   r1,r2                     // check if data to clear
        strlo r0,[r1],#4                // clear 4 bytes
        blo   2b                        // loop until done

// Call main program: main(0)
// --------------------------
        mov   r0,#0                     // no arguments (argc = 0)
        mov   r1,r0
        mov   r2,r0
        mov   fp,r0                     // null frame pointer
        mov   r7,r0                     // null frame pointer for thumb
        ldr   r10,=main
        mov   lr,pc
        bx    r10                       // enter main()

        .size   _start, . - _start
        .endfunc

        .global _reset, reset, exit, abort
        .func   _reset
_reset:
reset:
exit:
abort:
#if 0
// Disable interrupts, then force a hardware reset by driving P23 low
// -------------------------------------------------------------------
        mrs   r0,cpsr                   // get PSR
        orr   r0,r0,#I_BIT|F_BIT        // disable IRQ and FIQ
        msr   cpsr,r0                   // set up status register

        ldr   r1,=(PS_BASE)             // PS Base Address
        ldr   r0,=(PS_PIO)              // PIO Module
        str   r0,[r1,#PS_PCER_OFF]      // enable its clock
        ldr   r1,=(PIO_BASE)            // PIO Base Address
        ldr   r0,=(1<<23)               // P23
        str   r0,[r1,#PIO_PER_OFF]      // make sure pin is contolled by PIO
        str   r0,[r1,#PIO_CODR_OFF]     // set the pin low
        str   r0,[r1,#PIO_OER_OFF]      // make it an output
#endif
        b     .                         // loop until reset

        .size _reset, . - _reset
        .endfunc

        .end
8
發(fā)表于 2009-8-12 14:19:28 | 只看該作者
本帖最后由 machunshui 于 2009-8-12 14:26 編輯

就干了幾件事:

1.填寫中斷向量表
2.為使用C語言設置各種模式下的堆棧
3.拷貝已經(jīng)初始化的全局變量數(shù)據(jù)到RAM,清零未初始化數(shù)據(jù)
4.跳轉到C語言下的MAIN()函數(shù)
9
發(fā)表于 2009-8-12 14:21:26 | 只看該作者
能讀懂啟動文件的基礎是能理解arm指令,
了解常見的偽指令,
理解啟動文件做哪些事情
10
發(fā)表于 2010-10-23 23:02:30 | 只看該作者
呵呵,還是有點不懂
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国内精品一区视频在线播放 | 综合 欧美 亚洲日本 | 成人黄页网站免费观看大全 | 麻豆va在线精品免费播放 | 在线国产二区 | 一级毛片在线观看视频 | 性夜影院爽黄a爽免费视 | xvideos国产在线视频 | 国产午夜精品不卡观看 | 天天操好逼 | 午夜在线视频网站 | 国产精品视频网 | 四虎网站最新网址 | 香蕉久久网站 | 国产精品东北一极毛片 | 久久看视频 | 一区二区在线不卡 | 又粗又硬女人免费视频 | 色婷婷精品免费视频 | 91av国产在线 | 91高清免费国产自产 | 高清国产在线播放成人 | 91大片淫黄大片.在线天堂 | 久久2| 永久精品免费影院在线观看网站 | 一级做a爱片 | 香蕉久久精品 | 91香蕉视频色 | 成人伊人青草久久综合网 | 四虎地址 | 欧美在线视频 一区二区 | 亚洲欧美一区二区三区国产精品 | 黄色片免费在线观看视频 | 香蕉视频在线网址 | 久久精品伊人网 | 手机免费看黄在线高清视频 | 国产高清视频免费在线观看 | 亚洲天堂影视 | 久草视 | 91麻豆最新在线人成免费观看 | 五月天婷婷伊人 |