久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

memcpy((unsigned char *)0x0,(unsigned char *)0x30000000,0x1000);

作者:佚名   來源:本站原創   點擊數:  更新時間:2014年08月16日   【字體:

前些時候一直不明白"memcpy((unsigned char *)0x0,(unsigned char *)0x30000000,0x1000);"的用途,今天算是了解了,就是將異常向量表放到0地址處、發生異常的時候CPU總是跳轉到這里取指執行。

 

如果這里沒有異常向量表、異常就得不到處理、而且CPU還無法從這個區域返回到跳轉之前的地方。

先貼圖

圖中左邊是反匯編代碼、可以看到機器碼。

而且由于映像文件的入口地址Image entry point設為0x30000000、也就是使用調試器調試,

所以圖中的代碼是從0x30000000開始存放(標號'ResetEntry'在0x30000000地址處)。

注意每條語句的機器碼(方括號'[XXX]'里面的數據)。

右邊是打開的用來下載.bin文件、里面就是機器碼。

它和反匯編里面的機器碼一樣、注意是little endian模式。

運行 memcpy((unsigned char *)0x0,(unsigned char *)0x30000000,0x1000);語句之前、0地址處的值都是FF。

運行完畢之后、0地址處的值如下圖


這條語句是從0x30000000處開始、復制4K代碼到0地址處。

上圖中從0地址開始的代碼和.bin文件里面的代碼一樣、而且只是前4K一樣。

就我的板子TX-2440來說 :

如果是Norflash啟動、那么0地址在Norflash,就是復制到Norflash。

如果是Nandflash啟動、那么0地址在BootRAM,就是復制到BootRAM。

語句這樣做的目的是將異常向量表復制到0地址處、因為發生異常的時候、CPU自動跳轉到0地址處讀取指令。

要是0地址處沒有這個異常向量表、那么就無法處理異常,中斷就無法執行,含有中斷的程序就會出錯,

CPU無法返回到跳轉之前的地方。 

沒有這條復制語句、那么0x0~0x30000000之間的內存里絕大多數是FF、少數是00 :

 

關閉窗口

相關文章

主站蜘蛛池模板: 亚洲成人一区 | 成人免费黄视频 | 韩国主播午夜大尺度福利 | 欧美综合一区二区三区 | 一区二区高清 | 日韩在线免费看 | 国产日韩欧美一区 | av天天澡天天爽天天av | 亚洲性人人天天夜夜摸 | 精品欧美一区二区三区精品久久 | 国产乱人伦精品一区二区 | 欧美精品91 | 亚洲人免费视频 | 日韩h | 网站黄色在线 | 国产精品高清一区二区三区 | 欧美影院久久 | 国产真实乱全部视频 | 亚洲精品久久嫩草网站秘色 | 18性欧美 | 日韩精品一二三区 | 欧美国产一区二区 | 国产精品不卡视频 | 五月天婷婷丁香 | 国产欧美一区二区三区在线看 | 日韩在线免费视频 | 一区视频 | 免费观看一级特黄欧美大片 | 日韩av在线播 | 日日夜夜草 | 亚洲美女在线一区 | 久久99精品久久久久久青青日本 | 久久综合激情 | 亚洲在线 | 91久久久久久久久 | 久久久久国产精品一区二区 | 天天综合干| 久久久免费观看视频 | 在线播放国产一区二区三区 | 国产精品久久久久久久久久久新郎 | 欧美一区永久视频免费观看 |