国产毛片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
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久AV麻豆| 亚洲高清在线mv| 天天天做天天天天爱天天想| 欧美在线色视频| 天天射影院| 双性总裁被调教1v1| 一区二区在线免费视频| 办公室日本肉丝OL在线| 久久热r在线视频精品| 亚洲AV成人片色在线观看网站| 欧美操操操| 婷婷九月| 液液酱yye一yye的福利免费| 俄罗斯18xv在线观看| 欧美一区二区三区免费播放| 影音先锋色av男人资源网| 午夜网站在线播放| 无人精品乱码一区二区三区| 天天av天天翘天天综合网| 99国产精品成人免费视频| 久久久久免费视频| 亚洲字幕在线观看| 青青青爽在线视频观看大全| 性生大片一级毛片免费观看| 亚洲国产成人久久综合一| 99久久精品国产高清一区二区| 美女叉腿掰阴大胆艺术照| 亚色中文字幕| 日日cao| 无码日韩精品一区二区免费| 嘟嘟嘟WWW在线观看视频高清| 羲义嫁密着中出交尾gvg794| 日本精品久久久中文字幕| 青娱乐极品视频在线| 四虎影院免费在线| 中国年女人内谢69xxxx| 久久国产精品萌白酱免费| 亚洲青青草| 日韩影院在线观看| 日日干夜夜爱| 亚洲伦理影院|