1. 程式人生 > >S3C2440記憶體控制詳解

S3C2440記憶體控制詳解

轉載理由:文中特大號字型部分有利於理解韋東山老師所給的sdram實驗中的十三個暫存器的值的理解。

特點:

軟體可程式設計的大小端模式;

地址空間:每個BANK可定址128MB(總共8BANK 1GB空間);

可程式設計的訪問位寬:BANK01632位,其他BANK81632位;

       8個儲存器BANK,其中6個用於ROM或者SRAM2個用於ROMSRAM或者SDRAM

       BANK0~BANK6的起始地址固定;

       BANK7的起始地址和大小可程式設計;

所有儲存器BANK的訪問週期可程式設計;

外部wait訊號可延長匯流排週期;

支援SDRAM的自重新整理和掉電模式。


       BANK0匯流排寬度由OM[1:0]引腳決定,當OM[1:0]=01時,booting ROM datawidth16位,當[1:0]=10時,booting ROM datawidth32位,當OM[1:0]=00時,從NAND FLASH啟動。在友善之臂S3C2440開發板上,OM1引腳直接接地。


依據這張表,可以查詢到SDRAMBANK選擇引腳連線方式,比如,我們使用的SDRAM2HYNIXHY57V561620(L)T,它的規格是4*4M*16bit(使用兩片是為了配置成32位的匯流排寬度),BANK大小是4M*16=64MB,匯流排寬度是32位,器件大小是4*BANK大小

=256Mb,暫存器配置就是(4M*16*4B*2,根據上面的表格,SDRAM上的BANK地址引腳(BA[1:0])與S3C2440A[25:24]相連。


上表是暫存器控制地址匯流排連線方式,我們使用2SDRAM配置成32位的匯流排寬度,所以SDRAM上的A[12:0]接到S3C2440A[14:2]引腳。

具體的S3C2440與兩片SDRAM接線方式如下圖所示:

       SDRAM的工作時序作為ARM工程師瞭解即可,具體的讀寫控制由CPU自帶的控制暫存器完成而作為FPGA工程師則需要詳細瞭解SDRAM工作原理與時序,在此不再贅述。作為ARM工程師,最重要的是準確配置與SDRAM相關的暫存器。

在系統使用SDRAM之前,需要對S3C2440的儲存器控制器進行初始化。其中對與SDRAMBank6)相關的暫存器進行了特殊的設定,以使SDRAM能夠正常工作。由於C語言程式使用的資料空間和堆疊空間都定位在SDRAM上,因此,如果沒有對SDRAMBank6)的正確初始化,系統就無法正確啟動。下面介紹與SDRAM相關的暫存器設定。

1匯流排寬度&等待控制暫存器(BWSCON0x48000000

在這個暫存器中,可以配置BANK1~BANK7DWWSSTDW決定了資料匯流排寬度;WS是等待狀態是否使能,如果此位為1WAIT訊號可以用於延長nOE訊號的有效時間ST決定是否使用UB/LB(SRAM相關)此暫存器還可以讀取(注意對Bank0只能讀取不能寫)BANK0的資料匯流排寬度。

對於SDRAM,只需要設定BANK6BANK7DW相關位,此處設定為32位。

BWSCON(0x48000000)=0x22xxxxxx,後面的24位設定和FLASH有關,一個例子是設定為0x22111120

2BANK控制暫存器(BANKCONN

BANK0~BANK5的控制暫存器相同,復位值均為0x0700。

包括對Tacs(nGCSn前的地址建立時間)Tcos(nOE訊號有效前的片選建立時間)Tacc(訪問週期,當WAIT使能時,Tacc必須大於等於4個時鐘週期)Tcoh(nOE後的片選保持時間)Tcah(nGCSn後的地址保持時間)Tacp(Page模式下的訪問週期)PMC(Page模式配置)

BANK6BANK7的控制暫存器相同。如果儲存器型別為ROM或者SRAM,情況與BANK0~BANK5類似如果儲存器型別為SDRAM,則需要設定Trcd(RASCAS的延時)SCAN(列地址位數)

根據我們使用的SDRAM以及S3C2440的HCLK(SDRAM時鐘由系統的HCLK提供)時鐘情況,Trcd取3個時鐘,列地址位數是9,則BANKCON6(0x4800001C)=0x00018005,

BANKCON7(0x48000020)=0x00018005。

3SDRAM重新整理控制暫存器(REFRESH)

包括REFEN(重新整理使能位),此位一般設定為1TREFMD位(SDRAM重新整理模式),初始值為0TrpSDRAM RAS預充電時間),此位需要根據時鐘HCLK與選用的SDRAM晶片決定,一般設定為23個時鐘;Tsrc位(SDRAM半行週期時間),由Trc-Trp得到,TrcTrp的值由時鐘和SDRAM晶片決定;REFRESH COUNTER位(SDRAM重新整理計數值),重新整理計數值=2^11+1-HCLK*SDRAM重新整理時間(重新整理時間參考S3C2440SDRAM技術手冊)。

4BANK SIZE暫存器(BANKSIZE

BURST_EN位是ARM核突發模式使能位,設為01均可,為了提高效率,此處可以設為1SCKE_ENSDRAM掉電模式使能控制,設為1SCLK_EN,設為1SCLK僅在訪問週期才被啟用;BK76MAPBANK6BANK7的記憶體對映,我們使用24B*4M*16bitSDRAM組成32256MB儲存器,而且BANK6BANK7大小要相等,所以此處設為2,即128MB/128MBBANKSIZE(0x48000028)=0x000000B2

5SDRAM模式暫存器集合暫存器(MRSR

WBL位,突發寫長度,一般設為0,突發寫長度固定;TM位,測試模式,一般設為00,模式暫存器集合(固定);CL位,CAS延時,根據SDRAM晶片和HCLK時鐘計算;BT位,突發型別,一般設為0,連續的(固定);BL位,突發長度,一般設為000(固定的)。MRSR(0x4800002C)=0x00000030(0x48000030)=0x00000030

ARM9(S3C2440)13個儲存控制暫存器

2009-04-29 21:45

記憶體控制器地址,摘自三星技術手冊:

BWSCON   0x48000000           R/W Bus Width & Wait Status Control
BANKCON0 0x48000004         Boot ROM Control
BANKCON1 0x48000008         BANK1 Control
BANKCON2 0x4800000C         BANK2 Control
BANKCON3 0x48000010         BANK3 Control
BANKCON4 0x48000014         BANK4 Control
BANKCON5 0x48000018         BANK5 Control
BANKCON6 0x4800001C         BANK6 Control
BANKCON7 0x48000020         BANK7 Control
REFRESH 0x48000024           DRAM/SDRAM Refresh Control
BANKSIZE 0x48000028           Flexible Bank Size
MRSRB6   0x4800002C           Mode register set for SDRAM BANK6
MRSRB7   0x48000030           Mode register set for SDRAM BANK7

BWSCON,共32位:

31~28
:BANK7
27~24
:BANK6
。。。。。
3~0:BANK0

BANK7~BANK1設定一致

四位分別代表:
STx:和樹上說的不一樣,手冊說表示 SRAM for using UB/LB ,0不使用,1使用,一般接0
WSx :是否插入等待訊號,0否,1是,一般選0
DWx(2位):00 8位,01 16位,10 32位,11 保留。這個每一個BANK可以根據書上 P91頁表格看BANK的寬度。

BANK0比較特殊,
3:保留,寫0
2~1(只讀):取00,由硬體決定,因為你寫不進去東西。。
0:保留,取0
總之BANK0就是0000(2進位制)就對了

由此就得來了,這塊板子上,0x22011110

BANKCON0~5(對應BANK 0~5,每個暫存器32位):保留值,寫入0x00000700即可。

BANKCON6
~7(對應BANK 6~7,每個暫存器32位)


31
~17位,設為0

16~15,11表示BANKx接了SDRAM,00 SRAM,我的開發板BANK6接的是SRAM當然是11了

如果是SRAM就按照上面的000700就好了,如果是SDRAM,只需要設定3~0

3~2:CAS用幾個週期,推薦為3個週期,01
1~0:列訊號有幾根線。。
mini2440的SDRAM晶片是HY57V561620(L)T,
光盤裡的pdf手冊顯示瞭如下內容:Column Address : CA0 ~ CA8,因此是9根,所以取01
綜上,BANKCON6~7的取值為 0x00018005

REFRESH(32位,用於設定SDRAM的重新整理):

23
:是否開啟SDRAM重新整理,自然選1開啟
22:SDRAM重新整理模式,選0
21~20:取00或者10,RAS的change時間
19~18:行時間,取11
17~11:0

10~0:就是重新整理頻率了~~

計算公式,R_CNT=2^11+1-SDRAM時鐘頻率(Mhz)*SDRAM重新整理週期(uS)

HY那個手冊上寫到:8192個重新整理週期用64ms,因此重新整理週期=64000/8192=7.8125
時鐘頻率有好多種啊,先實驗為100Mhz的吧。。

因此計算出來就是1267.75,四捨五入1268->0x04f4

因此這個REFRESH取值是 0x008c04f4,簡單計算方法就是0x008c0000 + 04f4

BANKSIZE(32為暫存器):

支援核突發,使用SCKE,僅在SDRAM期間發出SCLK,地址空間64Mb
因此BANKSIZE為 0x000000B1

MRSRB6~7(SDRAM模式設定)

3
個時鐘週期,0x30

The S3C2410X has 117 multi-functionalinput/output port pins. The ports are:
— Port A (GPA): 23-output port
— Port B (GPB): 11-input/output port
— Port C (GPC): 16-input/output port
— Port D (GPD): 16-input/output port
— Port E (GPE): 16-input/output port
— Port F (GPF): 8-input/output port
— Port G (GPG): 16-input/output port
— Port H (GPH): 11-input/output port

---PORT A 23-output

GPACON 0x56000000 
GPADAT 0x56000004

---PORT B 11-input/output

GPBCON 0x56000010 
GPBDAT 0x56000014 
GPBUP 0x56000018

---PORT C 16-input/output

GPCCON 0x56000020 
GPCDAT 0x56000024 
GPCUP 0x56000028

---PORT D 16-input/output

GPDCON 0x56000030 
GPDDAT 0x56000034 
GPDUP 0x56000038

---PORT E 16-input/output

GPECON 0x56000040
GPEDAT 0x56000044 
GPEUP 0x56000048

---PORT F 8-input/output

GPFCON 0x56000050 
GPFDAT 0x56000054
GPFUP 0x56000058

---PORT G 16-input/output

GPGCON 0x56000060 
GPGDAT 0x56000064 
GPGUP 0x56000068

---PORT H 11-input/output

GPHCON 0x56000070 
GPHDAT 0x56000074 
GPHUP 0x56000078

NAND 暫存器

2009-05-24 13:02

NFCONF 0x4E000000 R/W NAND Flash configuration

[15]       Enable/Disable   After auto-boot, this bit is cleared to 0 automatically.
                                       For the access to the NAND flash memoty, this bit must be set.
[14:13] Reserbed
[12]         Initialize ECC
[11]        NAND Flash Memory chip enable 0:nFCE=L(active), 1:nFCE=H
[10:8]     TACLS
[7]
[6:4]        TWRPH0
[3]
[2:0]        TWRPH1

NFCMD 0x4E000004 R/W NAND flash command set register
[7:0]   CMD NAND Flash memory command value

NFADDR 0x4E000008 R/W NAND flash address set register
[7:0]   Address NAND flash memory address value

NFDATA 0x4E00000C R/W NAND flash data register
[7:0]   Data       Nand flsh read/program data value

NFSTAT 0x4E000010 R NAND Flash operation status
[0]     RnB    0:NAND Flash memory busy 1:NAND Flash memory ready to operate

NFECC 0x4E000014 R NAND Flash ECC (Error Correction Code) register
[23:16]   Error Correction Code #2
[15:8]     #1
[7:0]       #0

PWM Timer 暫存器

2009-05-24 16:59

PWM TIMER

TCFG0 0x51000000 R/W Configures the two 8-bit prescalers
TCFG1 0x51000004 R/W 5-MUX & DMA mode selecton register
TCON 0x51000008 R/W Timer control register
TCNTB0 0x5100000C R/W Timer 0 count buffer register 
TCMPB0 0x51000010 R/W Timer 0 compare buffer register
TCNTO0 0x51000014 R Timer 0 count observation register
TCNTB1 0x51000018 R/W Timer 1 count buffer register 
TCMPB1 0x5100001C R/W Timer 1 compare buffer register
TCNTO1 0x51000020 R Timer 1 count observation register
TCNTB2 0x51000024 R/W Timer 2 count buffer register 
TCMPB2 0x51000028 R/W Timer 2 compare buffer register
TCNTO2 0x5100002C R Timer 2 count observation register
TCNTB3 0x51000030 R/W Timer 3 count buffer register 
TCMPB3 0x51000034 R/W Timer 3 compare buffer register
TCNTO3 0x51000038 R Timer 3 count observation register
TCNTB4 0x5100003C R/W Timer 4 count buffer register
TCNTO4 0x51000040 R Timer 4 count observation register

TCFG0 0x51000000 R/W Configures the two 8-bit prescalers
[23:16] Dead zone length 
[15: 8] Prescaler 1 These 8 bits determine prescaler value for Timer 2, 3 and 4.
[ 7: 0] Prescaler 1   for Timer 1 and 0.

TCFG1 0x51000004 R/W 5-MUX & DMA mode selecton register
[23:20]
DMA mode Select DMA: 0000=NoSelect; 0001=Timer0; 0010=Timer1; 0011=Timer2; 0100=Timer3; 0101=Timer4; 0110=Reserved
[19:16] MUX4 Select MUX input for PWM Timer4:0000=1/2;0001=1/4;0010=1/8; 0011=1/16; 01xx=External TCLK1
[15:12] MUX3 for Timer3
[11: 8] MUX2 for Timer2
[ 7: 4] MUX1 for Timer1
[ 3: 0] MUX0 for Timer0

TCON 0x51000008 R/W Timer control register
[22] Timer 4 auto reload on/off 0=One-shot   1=Interval mode(auto reload)
[21] Timer 4 manual update       0=No operation 1=Update TCNTB4
[20] Timer 4 start/stop                0=Stop 1=Strat for Timer 4
[19] Timer 3 auto reload on/off
[18] Timer 3 output inverter on off 0=Inverter off    1=Inverter on for TOUT3
[17] Timer 3 manual update
[16] Timer 3 start/stop
[15]
[14]
[13]
[12]
[11]
[10]
[9]
[8]   Timer 1 start/stop
[7:5]   Reserved
[4]    Dead zone enable
[3]    Timer 0 auto reload on/off
[2]     Timer 0 output inverter on/off
[1]    Timer 0 manual update
[0]     Timer 0 start/stop

TCNTB0 0x5100000C R/W Timer 0 count buffer register 
[15:0] Timer 0 count buffer register
TCMPB0 0x51000010 R/W Timer 0 compare buffer register
[15:0] Timer 0 compare buffer register
TCNTO0 0x51000014 R Timer 0 count observation register
[15:0] Timer 0 observation register (
計數觀察暫存器)

TCNTB1 0x51000018 R/W Timer 1 count buffer register 
TCMPB1 0x5100001C R/W Timer 1 compare buffer register
TCNTO1 0x51000020 R Timer 1 count observation register

TCNTB2 0x51000024 R/W Timer 2 count buffer register 
TCMPB2 0x51000028 R/W Timer 2 compare buffer register
TCNTO2 0x5100002C R Timer 2 count observation register

TCNTB3 0x51000030 R/W Timer 3 count buffer register 
TCMPB3 0x51000034 R/W Timer 3 compare buffer register
TCNTO3 0x51000038 R Timer 3 count observation register

TCNTB4 0x5100003C R/W Timer 4 count buffer register
TCNTO4 0x51000040 R Timer 4 count observation register

WATCHDOG TIMER

2009-05-24 18:35

WATCHDOG TIMER

OVERVIEW
The S3C2440A watchdog timer is used to resume the controller operation whenever it is disturbed by malfunctions
such as noise and system errors. It can be used as a normal 16-bit interval timer to request interrupt service. The
watchdog timer generates the reset signal for 128 PCLK cycles.

t_watchdog = 1/[ PCLK / (Prescaler value + 1) / Division_factor ]

Once the watchdog timer is enabled, the value of watchdog timer data (WTDAT) register cannot be automatically reloaded into the timer counter (WTCNT). In this reason, an initial value must be written to the watchdog timer count (WTCNT) register, before the watchdog timer starts.

When the S3C2440A is in debug mode using Embedded ICE, the watchdog timer must not operate.

The WTCON register allows the user to enable/disable the watchdog timer, select the clock signal from 4 different sources, enable/disable interrupts, and enable/disable the watchdog timer output. The Watchdog timer is used to resume the S3C2440A restart on mal-function after its power on; if controller restart is not desired, the Watchdog timer should be disabled.
If the user wants to use the normal timer provided by the Watchdog timer, enable the interrupt and disable the Watchdog timer.

WTCON 0x53000000 R/W Watchdog timer control register 0x8021
[15:8] Prescaler value 0--255
[5]       Watchdog timer. Enable or disable bit of Watchdog timer.
[4:3]    Clock select. Determine the clock division factor. 00=16;01=32;10=64;11=128
[2]       Interrupt generation. Enable or disable bit of the interrupt. 0=Disable;1=Enable
[0]       Reset enable/disable. Enable or disable bit of watchdog timer output for reset signal.
            1=Assert reset signal of the S3C2440A at watchdog time-out
           0=Disable the reset function of the watchdog timer.

WTDAT 0x53000004 R/W Watchdog timer data register 0x8000
[15:0] Count reload value

WTCNT 0x53000008 R/W Watchdog timer count register 0x8000
[15:0] Count value

S3C2440 IO口暫存器地址

2009-05-10 00:26

S3C2440 IO口暫存器地址

GPACON:0x56000000,預設7FFFFF
GPADAT:0x56000004
GPA0:ADDR0
GPA1~GPA11:ADDR16~ADDR26
GPA12~GPA16: nGCS1~nGCS5
GPA17 CLE
GPA18 ALE
GPA19 nFWE
GPA20 nFRE
GPA21 nRSTOUT
GPA22 nFCE

GPBCON:0x56000010,預設0x0
GPBDAT:0x56000014,
GPBUP:0x56000018,預設0x0
GPB0~GPB3:TOUT0~TOUT3
GPB4 TCLK0
GPB5 nXBACK
GPB6 nXBREQ
GPB7 nXDACK1
GPB8 nXDREQ1
GPB9 nXDACK0
GPB10 nXDREQ0

GPCCON 0x56000020
GPCDAT 0x56000024
GPCUP 0x56000028
GPC0 LEND
GPC1 VCLK
GPC2 VLINE
GPC3 VFRAME
GPC4 VM
GPC5 LCDVF0
GPC6 LCDVF1
GPC7 LCDVF2
GPC8~GPC15 VD0~VD7

GPFCON 0x56000050
GPFDAT 0x56000054
GPFUP 0x56000058
GPB0~GPB7 EINT0~EINT7

相關推薦

S3C2440記憶體控制

轉載理由:文中特大號字型部分有利於理解韋東山老師所給的sdram實驗中的十三個暫存器的值的理解。 特點: 軟體可程式設計的大小端模式; 地址空間:每個BANK可定址128MB(總共8個BANK 1GB空間); 可程式設計的訪問位寬:BANK0為16或32位,其他BANK為

Nginx的兩種訪問控制

添加文件 san 技術 匹配 htm 主配置文件 proc -o term nginx訪問控制的兩種方法,一種是基於Basic Auth認證,另一種是基於IP的訪問控制 Basic Auth認證基於用戶授權的訪問控制:當客戶端想要訪問相應的網站或者目錄,要求用戶輸入用戶名

Java程式碼執行記憶體溢位及解決方案

記憶體溢位與資料庫鎖表的問題,可以說是開發人員的噩夢,一般的程式異常,總是可以知道在什麼時候或是在什麼操作步驟上出現了異常,而且根據堆疊資訊也很容易定位到程式中是某處出現了問題。記憶體溢位與鎖表則不然,一般現象是操作一般時間後系統越來越慢,直到宕機,但並不能明確是在什麼操作上出現的,發生的時間

程式設計師面試寶典隨筆記(一)--記憶體管理

  記憶體管理是C++最令人切齒痛恨的問題,也是C++最有爭議的問題,C++高手從中獲得了更好的效能,更大的自由,C++菜鳥的收穫則是一遍一遍的檢查程式碼和對C++的痛恨,但記憶體管理在C++中無處不在,記憶體洩漏幾乎在每個C++程式中都會發生,因此要想成為C++高手,記

Float 記憶體儲存

轉自http://www.cnblogs.com/yewsky/articles/1864934.html和http://blog.csdn.net/soft200816/article/details/7569722 為何浮點數可能丟失精度浮點十進位制值通常沒有完全相同的二進位制表示形式

JAVA 記憶體洩露-值得收藏的好文

非常好的文章, 轉載自:http://blog.csdn.net/anxpp/article/details/51325838     Java的一個重要特性就是通過垃圾收集器(GC)自動管理記憶體的回收,而不需要程式設計師自己來釋放記憶體。理論上Java

java基礎記憶體基礎

堆區:  1.儲存的全部是物件,每個物件都包含一個與之對應的class的資訊。(class的目的是得到操作指令) 2.jvm只有一個堆區(heap)被所有執行緒共享,堆中不存放基本型別和物件引用,只存放物件本身 棧區: 1.每個執行緒包含一個棧區,棧中只儲存基礎資料型

Java虛擬機器:記憶體模型

      我們都知道,當虛擬機器執行Java程式碼的時候,首先要把位元組碼檔案載入到記憶體,那麼這些類的資訊都存放在記憶體中的哪個區域呢?當我們建立一個物件例項的時候,虛擬機器要為物件分配記憶體,Java虛擬機器又是如何配分記憶體的呢?這些都涉及到Java虛擬機器的記

Linux ACL訪問許可權控制

在普通許可權中,Linux使用者對檔案只有三種身份,就是屬主、屬組和其他人;每種使用者身份擁有讀(read)、寫(write)和執行(execute)三種許可權。但是在實際工作中,這三種身份實在是不夠用,我們舉個例子來看看。 圖 1 ACL許可權簡介 圖 1 的根目錄中有一個 /projec

Linux 記憶體引數

【檢視記憶體引數詳解】Linux free -m 詳細說明 free 命令相對於top 提供了更簡潔的檢視系統記憶體使用情況: $ free           &nb

spark調優(二)-Apache Spark 記憶體管理

Apache Spark 記憶體管理詳解 轉載於:https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-apache-spark-memory-management/index.html Spark 作為一個基於記憶體的分散式計算引擎,

[Java]Java類和物件記憶體分配

描述 程式碼說明: 一.當Person p1 = new Person();第一次被呼叫時需要做兩件事: 1.先判斷類載入器是否載入過Person類,如果沒有則載入到Person型別到方法區 2.在堆中開闢記憶體空間,在棧中物件名引用(指向)堆的相應記憶體空間 二. p1.name = '皓皓': 將堆中n

類(繼承)的記憶體分配

1.基類與派生類的記憶體分配 派生類繼承基類       記憶體分配時,是在於基類物件不同的記憶體地址處,按基類的成員變數型別,開闢一個同樣的型別空間,但注意開闢後派生物件的空間,不是複製基類的成員的值,而是僅僅開闢那種成員型別的空間,未初始化時,裡面存在的數是不確定的

JVM記憶體結構

主要內容如下: JVM啟動流程 JVM基本結構 記憶體模型 編譯和解釋執行的概念   一、JVM啟動流程: JVM啟動時,是由java命令/javaw命令來啟動的。 二、JVM基本結構: JVM基本結構圖: 《深入理解Ja

【搞定Java併發程式設計】第7篇:Java記憶體模型

上一篇:ThreadLocal詳解:https://blog.csdn.net/pcwl1206/article/details/84859661 其實在Java虛擬機器的學習中,我們或多或少都已經接觸過了有關Java記憶體模型的相關概念(點選檢視),只不過在Java虛擬機器中講的不夠詳細,因此

DSP2812伺服電機控制

驅動板特性              電機供電電源 5~220VAC/DC 輸入,最大可以驅動1100W電機,最大峰值可以達25A。5VDC的控制電路電源和15VDC的IGBT驅動電源。正常工作時5VDC電流0.4A,15VDC電流0.15A 控制板的電源模組: 幾

Java基礎:由JVM記憶體模型執行緒安全

1.前言 最近在研究JVM記憶體模型和Java基礎知識。主要講的是執行緒共享變數與執行緒私有變數以及如何寫出執行緒安全的程式碼。這裡列出一條規則,“類中的成員變數,也叫例項變數,也叫全域性變數,它是非執行緒安全,是所有執行緒共享的變數,定義在方法中的私有變數是執行緒安全的,是每個執行緒私

Spark2.1 記憶體管理

  本文中闡述的原理基於 Spark 2.1 版本,閱讀本文需要讀者有一定的 Spark 和 Java 基礎,瞭解 RDD、Shuffle、JVM 等相關概念。 在執行 Spark 的應用程式時,Spark 叢集會啟動 Driver 和 Executor 兩種 JVM 程序,前者為

unity中camera攝像頭控制

在Unity的Transform中,rotation屬性對應的就是尤拉角,一共分為3個軸,x、 y和z,而每一個數值對應的是繞對應的軸旋轉的度數。 如上圖所示,表示按照座標順序旋轉,X軸旋轉30°,Y軸旋轉90°,Z軸旋轉 10°。尤拉角的優點:只需使用3個值,即三個座標軸的旋轉角度;缺點:必須 嚴格按

基於JDK8的JVM記憶體模型與GC策略

JVM記憶體模型總覽 首先看一下JVM記憶體模型圖 程式計數器Program Counter Register 程式計數器是一塊較小的記憶體區,可以看做是當前執行緒所執行的位元組碼的行號指示器,如果執行緒正在執行一個JAVA方法,這個計數器記錄的是正在執行