亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vivi的代碼問題.txt

?? linux的啟動程序vivi的代碼問題
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
請問linux的啟動程序vivi的代碼問題。  
 


1. 
/include/headware.h裡面有如下的定義 

#ifndef __ASSEMBLY__ 

#define __REG(x) (*(volatile unsigned long *)(x)) 
#define __REGl(x) (*(volatile unsigned long *)(x)) 
#define __REGw(x) (*(volatile unsigned short *)(x)) 
#define __REGb(x) (*(volatile unsigned char *)(x)) 

#else 

#define __REG(x) (x) 
#define __REGl(x) (x) 
#define __REGw(x) (x) 
#define __REGb(x) (x) 
請問__REG(x) 的定義是對x進行二級指針運算嘛?如果不是,那是什麼意思? 
2、 
/arch/s3c2410/head.S的彙編格式是遵循什麼格式的,是Intel還是AT&T格式的,怎麼看起來都不像。滿多東西看不明白,哪位大俠給點指導。謝謝了。 


 
  Re: 請問linux的啟動程序vivi的代碼問題。  
 


1。 不是二級指針。 

x中放的是一個常量,比如你的sdram contoler某個寄存器的物理地址是0xa0000000,那麼我就可以這樣用了: 

#define SDRAM_CTRL_REG __REG(0xa0000000) 

然後我以後要對這個寄存器進行訪問,就可以這樣: 

寫: 
SDRAM_CTRL_REG = 0xffff; 

讀: 
if (SDRAM_CTRL_REG != 0x3f4e) 

順便說一下,那個#if #lese的意思是這樣的: 
由於頭文件中定義的宏有時用在c源碼中,有時用在.S彙編源碼中,這樣對一個宏的定義就需要兩種形式,顯然:像#define __REG(x) (*(volatile unsigned long *)(x)) 這樣的宏,彙編程序不可能認得,所以kernel中引用了__ASSEMBLY__這個宏,如果定義了該宏,說明該塊代碼可以被.S包含;如果沒定義,說明可以被.c包含,不知道我說明白沒有 

2.那個。。。話說arm得彙編就不會是intel語法了吧。。。Intel還是AT&T格式的問題只在x86體系下談才有意義。。。。不過可以這樣說,他的操作書順序和市面上的書中介紹的arm彙編的順序是完全一致的。絕大多說指令都是左邊是目的操作數,右邊是源操作數(和第二操作數,如果有的話),除了少數指令,比如str 




 
  Re: 請問linux的啟動程序vivi的代碼問題。  
 


謝謝growlanser,令我茅塞頓開。 

另外,這裡的地址一定是要絕對地址嗎?如果想用相對地址,用這種方法是不是可以一樣這樣實現? 


 
  Re: 請問linux的啟動程序vivi的代碼問題。  
 


呵呵,解釋的非常清楚:-) 
在嵌入系統的底層軟件裡面這樣的寫法非常的多。。。 


 
  Re: 請問linux的啟動程序vivi的代碼問題。  
 


單從__REG這個宏上可以看出他是不能用相對地址的。建議你使用這些宏,因為使用vivi提供的這些宏在編程的書寫風格上非常一致,看起來也很舒服^^ 
不過你可以自己定義自己的宏,比如(我沒做過vivi的編程,所以說不定vivi上有呢): 


#define __REG2(x, y) __REG((x) + (y)) 

其中x是基地址(絕對地址),y是相對地址(或者說是寄存器索引)。 

最簡單的就是: 

read_reg(__REG(x + y)); 

x是基地址;y是寄存器偏移值(相對地址,寄存器索引,隨你怎麼叫吧^^) 



在保持代碼風格的同時可以發揮自己的想像去修改你的代碼。希望對你有所幫助。 





 
  Re: 請問linux的啟動程序vivi的代碼問題。  
 


謝謝你的解釋,我現在在看vivi的代碼看得我頭暈腦脹得,以前沒怎麼編程。 
現在又得麻煩你了。下面是vivi裡的用彙編編寫的啟動部分的源碼。 

#include "config.h" 
#include "linkage.h" 
#include "machine.h" 

@ Start of executable code 

ENTRY(_start) 
ENTRY(ResetEntryPoint) 

@ 
@ Exception vector table (physical address = 0x00000000) 
@ 

@ 0x00: Reset 
b Reset 

@ 0x04: Undefined instruction exception 
UndefEntryPoint: 
b HandleUndef 

@ 0x08: Software interrupt exception 
SWIEntryPoint: 
b HandleSWI 

@ 0x0c: Prefetch Abort (Instruction Fetch Memory Abort) 
PrefetchAbortEnteryPoint: 
b HandlePrefetchAbort 

@ 0x10: Data Access Memory Abort 
DataAbortEntryPoint: 
b HandleDataAbort 

@ 0x14: Not used 
NotUsedEntryPoint: 
b HandleNotUsed 

@ 0x18: IRQ(Interrupt Request) exception 
IRQEntryPoint: 
b HandleIRQ 

@ 0x1c: FIQ(Fast Interrupt Request) exception 
FIQEntryPoint: 
b HandleFIQ 

@ 
@ VIVI magics 
@ 

@ 0x20: magic number so we can verify that we only put 
.long 0 
@ 0x24: 
.long 0 
@ 0x28: where this vivi was linked, so we can put it in memory in the right place 
.long _start 
@ 0x2C: this contains the platform, cpu and machine id 
.long ARCHITECTURE_MAGIC 
@ 0x30: vivi capabilities 
.long 0 
#ifdef CONFIG_PM 
@ 0x34: 
b SleepRamProc 
#endif 
#ifdef CONFIG_TEST 
@ 0x38: 
b hmi 
#endif 


@ 
@ Start VIVI head 
@ 
Reset: 
@ disable watch dog timer 
mov r1, #0x53000000 
mov r2, #0x0 
str r2, [r1] 

#ifdef CONFIG_S3C2410_MPORT3 
mov r1, #0x56000000 
mov r2, #0x00000005 
str r2, [r1, #0x70] 
mov r2, #0x00000001 
str r2, [r1, #0x78] 
mov r2, #0x00000001 
str r2, [r1, #0x74] 
#endif 

@ disable all interrupts 
mov r1, #INT_CTL_BASE 
mov r2, #0xffffffff 
str r2, [r1, #oINTMSK] 
ldr r2, =0x7ff 
str r2, [r1, #oINTSUBMSK] 

@ initialise system clocks 
mov r1, #CLK_CTL_BASE 
mvn r2, #0xff000000 
str r2, [r1, #oLOCKTIME] 

@ldr r2, mpll_50mhz 
@str r2, [r1, #oMPLLCON] 
#ifndef CONFIG_S3C2410_MPORT1 
@ 1:2:4 
mov r1, #CLK_CTL_BASE 
mov r2, #0x3 
str r2, [r1, #oCLKDIVN] 

mrc p15, 0, r1, c1, c0, 0 @ read ctrl register 
orr r1, r1, #0xc0000000 @ Asynchronous 
mcr p15, 0, r1, c1, c0, 0 @ write ctrl register 
@ now ,usb clock is 48Mhz 
ldr r0, =CLK_CTL_BASE @ Fin=12MHz, Fout=48MHz 
ldr r1,upp_48Mhz 
str r1, [r0,#oUPLLCON] 

nop 
nop 
nop 
nop 
ldr r0, = CLK_CTL_BASE @ Fin=12MHz, Fout=48MHz 
ldr r1,upp_48Mhz 
str r1, [r0,#oUPLLCON] 


@ now, CPU clock is 200 Mhz 
mov r1, #CLK_CTL_BASE 
ldr r2, mpll_200mhz 
str r2, [r1, #oMPLLCON] 
#else 
@ 1:2:2 
mov r1, #CLK_CTL_BASE 
ldr r2, clock_clkdivn 
str r2, [r1, #oCLKDIVN] 

mrc p15, 0, r1, c1, c0, 0 @ read ctrl register 
orr r1, r1, #0xc0000000 @ Asynchronous 
mcr p15, 0, r1, c1, c0, 0 @ write ctrl register 

@ now, CPU clock is 100 Mhz 
mov r1, #CLK_CTL_BASE 
ldr r2, mpll_100mhz 
str r2, [r1, #oMPLLCON] 
#endif 
bl memsetup 

#ifdef CONFIG_PM 
@ Check if this is a wake-up from sleep 
ldr r1, PMST_ADDR 
ldr r0, [r1] 
tst r0, #(PMST_SMR) 
bne WakeupStart 
#endif 


#ifdef CONFIG_S3C2410_SMDK 
@ All LED on 
mov r1, #GPIO_CTL_BASE 
add r1, r1, #oGPIO_F 
ldr r2,=0x55aa 
str r2, [r1, #oGPIO_CON] 
mov r2, #0xff 
str r2, [r1, #oGPIO_UP] 
mov r2, #0x00 
str r2, [r1, #oGPIO_DAT] 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久久久久人人人人传媒 | 国产欧美一区二区在线| 日本va欧美va瓶| 欧美一区二区三区视频免费| 美日韩黄色大片| 精品国产乱码久久| 国产.欧美.日韩| 中文字幕一区二区三区蜜月| 色婷婷综合久久久久中文 | 91成人免费电影| 亚洲国产欧美另类丝袜| 欧美日韩在线免费视频| 日韩精品国产欧美| 精品美女在线播放| 成人午夜激情视频| 亚洲午夜av在线| 日韩一级成人av| 国产91精品一区二区| 伊人色综合久久天天| 欧美巨大另类极品videosbest | 亚洲乱码国产乱码精品精小说| 色综合久久久久综合体桃花网| 亚洲成人免费看| 欧美本精品男人aⅴ天堂| 国产高清成人在线| 一区二区三区精品视频| 欧美一区二区三区视频免费| 国产99久久久国产精品潘金网站| 中文字幕亚洲一区二区va在线| 欧美日韩一区二区三区不卡| 国产在线不卡视频| 亚洲最大成人综合| 精品国产电影一区二区| 色综合色狠狠综合色| 六月丁香综合在线视频| 亚洲天堂网中文字| 日韩视频一区在线观看| 91在线观看免费视频| 秋霞电影一区二区| 亚洲婷婷国产精品电影人久久| 欧美一区二区在线观看| 99久久精品国产网站| 免费成人结看片| 亚洲另类中文字| 国产亚洲欧美日韩日本| 欧美日韩国产色站一区二区三区| 懂色一区二区三区免费观看| 日韩经典一区二区| 亚洲免费在线播放| 久久五月婷婷丁香社区| 欧美日本一道本在线视频| 不卡的电影网站| 国产麻豆一精品一av一免费| 无吗不卡中文字幕| 亚洲精品欧美专区| 日本一二三不卡| 精品成人一区二区| 在线成人小视频| 欧美性极品少妇| 91视频国产资源| 丁香激情综合五月| 国产在线不卡一区| 精品一区二区三区视频| 视频一区中文字幕| 亚洲国产va精品久久久不卡综合| 国产精品免费观看视频| 久久久亚洲精品石原莉奈 | 麻豆高清免费国产一区| 五月天亚洲婷婷| 亚洲一区视频在线| 亚洲欧美另类小说视频| 国产精品理伦片| 国产精品久久久久久久久免费桃花 | 日日夜夜免费精品视频| 亚洲一本大道在线| 亚洲永久精品国产| 亚洲综合激情网| 亚洲最新视频在线观看| 亚洲免费在线视频一区 二区| 1000部国产精品成人观看| 国产精品高潮呻吟| 亚洲欧洲制服丝袜| 亚洲一区在线观看免费观看电影高清| 亚洲欧洲另类国产综合| 日韩美女精品在线| 亚洲综合激情另类小说区| 亚洲午夜久久久久| 午夜精品久久久久久久久久| 日韩国产一区二| 另类小说视频一区二区| 国内精品视频666| 国产露脸91国语对白| 国产盗摄一区二区| 91美女蜜桃在线| 欧美视频在线不卡| 欧美一卡2卡3卡4卡| 精品成人一区二区| 国产精品久久久久久亚洲伦| 亚洲另类在线视频| 亚洲成人免费视| 精品在线观看视频| 成人美女视频在线观看| 色哟哟国产精品| 91麻豆精品国产91久久久资源速度| 日韩视频一区在线观看| 国产片一区二区| 夜夜精品视频一区二区| 丝袜美腿亚洲一区二区图片| 久久激情综合网| 国产精品一级在线| 91精品福利视频| 91精品国产一区二区| 国产亚洲精久久久久久| 亚洲三级在线免费观看| 五月激情综合色| 国产精品456露脸| 在线观看日韩精品| 精品美女在线观看| 亚洲精品视频免费看| 老司机午夜精品| 波多野结衣亚洲一区| 51精品久久久久久久蜜臀| 国产日韩欧美精品综合| 亚洲一区二区三区视频在线播放 | 久久99久久99小草精品免视看| 国产成人av在线影院| 欧美在线观看18| 国产日韩欧美精品在线| 亚洲尤物在线视频观看| 国产不卡一区视频| 在线成人高清不卡| 亚洲视频精选在线| 狠狠狠色丁香婷婷综合激情| 在线观看免费亚洲| 久久久久国产精品免费免费搜索| 一区二区三区精品视频| 成人免费精品视频| 欧美mv和日韩mv的网站| 亚洲一区二区在线观看视频| 国产风韵犹存在线视精品| 日韩欧美一级精品久久| 亚洲小说欧美激情另类| 不卡一区在线观看| 26uuu另类欧美亚洲曰本| 香蕉影视欧美成人| 日本精品视频一区二区| 国产精品狼人久久影院观看方式| 久久精品国产免费看久久精品| 欧美性生活影院| 亚洲少妇30p| 国产999精品久久久久久绿帽| 日韩女优毛片在线| 午夜精品福利一区二区三区av | 欧美性生活久久| 国产精品素人一区二区| 国产一区二区视频在线| 欧美一二三四在线| 亚洲bt欧美bt精品777| 91电影在线观看| 中文字幕视频一区二区三区久| 国产精品一区二区在线观看不卡| 精品久久免费看| 老司机免费视频一区二区 | 色综合欧美在线| 亚洲男人天堂av网| 91性感美女视频| 成人欧美一区二区三区黑人麻豆| 丁香婷婷综合色啪| 国产精品免费视频观看| 成人午夜av影视| 日韩一区中文字幕| 色八戒一区二区三区| 亚洲日本在线a| 91成人免费在线视频| 亚洲一区视频在线观看视频| 精品视频一区二区不卡| 亚洲va欧美va人人爽午夜 | 欧美成人aa大片| 久久99精品久久只有精品| 精品日韩一区二区| 国产麻豆精品theporn| 久久精品一区蜜桃臀影院| 国产激情一区二区三区桃花岛亚洲| 国产亚洲精品久| 91色.com| 爽好久久久欧美精品| 欧美sm美女调教| 粉嫩欧美一区二区三区高清影视| 国产精品三级av| 色美美综合视频| 奇米一区二区三区| 久久久久久97三级| 不卡一二三区首页| 亚洲午夜电影网| 精品国产三级电影在线观看| 成人免费视频一区二区| 尤物av一区二区| 日韩三区在线观看| 成人午夜精品在线| 亚洲一区二区三区四区不卡|