【歸納】S3C2440A之ARM學習的所有的問題:
目錄:
問題1:關於Nor/Nand啟動判斷的問題:
問題2:程式燒寫到什麼位置啦(即程式的儲存位置)?Norflash/Nandflash?
問題3:Nor啟動,SRAM除了儲存暫存器sp之類,還有別的作用嗎?
問題4:ARM中Makefile的規則、語法、函式及例項
問題5:變數/函式的宣告、定義、初始化的作用和區別?
問題6:UART特殊功能模組的暫存器操作機理和使用疑難的問題
問題7:操作暫存器的規範
問題8:ARM架構晶片(如ARM9-s3c2440a),暫存器都是32位,為什麼?
問題9:S3C2440晶片手冊中,EINT[]; 什麼意思?
問題10:編譯時,反彙編 *.dis 檔案顯示,0X0地址非<_start>,編譯生成的 *.bin 檔案在開發板顯示失敗的原因查詢
問題11:關於標頭檔案包含的問題
問題12:關於使能內部上拉的問題
問題13:關於波特率分頻暫存器UBRDIVn,公式為什麼這樣寫的問題
問題14:檢視賦值操作和位操作時的暫存器的類別情況(
問題15:怎樣提高程式查錯除錯的效率?
正文:
問題1:關於Nor/Nand啟動判斷的問題:
視訊講解是用寫0到[0x0],取出還是0則Nand啟動,視訊例程:mov r1, 0
ldr r0, [r1]
str r1, [r1]
ldr r2, [r1]
cmp r1, r2
//如果r1 != r2, nor啟動
ldr sp, =0x40000000 + 4096
//如果r1 == r2, nand啟動
moveq sp, #4096
streq r0, [r1]
如果:撥碼開關為Nor啟動,Norflash[0x0]地址中資料原本
即為0,Nor啟動不能寫入,但cmp r1, r2時,r1==r2依然
成立,系統是否會判斷為Nand啟動?有沒有影響?怎麼判斷?
答:1>【傳說】hceng(1307410945):不會為0的,因為你的程式碼燒在nor/nand 0地址上,既然有程式碼,就不會為0;
hexdump xx.bin 你會看到 首個數據 不會是0的;
正因為 0地址的資料是有用的,所以才會先儲存到r0,最後再從r0恢復: ldr r0, [r1] -> streq r0, [r1]
nand啟動才會修改,nor不會。 也就是說 nor啟動,下次還能啟動,,先nand啟動就廢了
你試試 去掉streq r0, [r1] 理論上 下次就啟動不了,,我沒試,我是從理論上分析的。。。幫忙試下 告訴結果。。。==2>會 可以改下程式碼先判斷nor中第一個是否和寫入的相同問題2:裸板實驗操作流程:Windows環境下編寫start.S、*.c、Makefile檔案,檔案上傳到Ubuntu環境(即主機)並編譯連線生成*.bin檔案,把.bin檔案通過DOS系統的命令列工具燒寫到開發板Norflash/Nandflash,把開發板啟動開關調至相應的啟動開關,關閉電源拔掉eop燒寫器,重新上電,觀察開發板現象。程式燒寫到什麼位置啦(即程式的儲存位置)?Norflash/Nandflash?晶片有多種啟動方式,而這些啟動方式都可以由配置引腳來選擇。晶片在啟動時讀取這些配置引腳的電平,就可以判斷從那種方式啟動。通常在研發階段的實驗板或者很多學習板(如:JZ2440)通常採用開關或跳線帽等方式來將配置引腳的電平置為高電平或置為低電平。在出廠時, 配置引腳一般通過上下拉電阻來設定電平。
從NOR FLASH啟動:
從NOR FLASH啟動時,由前面的圖1,由nGCS0控制的bank0直接連線了nor flash,而bank0能訪問的地址範圍為:256M(0X00000000----0X08000000),JZ2440開發板使用的nor flash大小為2M(0X00000000----0X00200000),從而S3C2440晶片的實體地址(0X00000000----0X00200000)就由nor flash來佔據。
選擇從NOR FLASH啟動,上電,S3C2440晶片就會去執行nor flash上地址為0x0處的指令。從後面的實驗中,可以清楚的知道,讀nor flash可以像讀記憶體那樣讀,但是要用額外的命令向nor flash寫入資料。如果nor flash像記憶體那樣讀和那樣寫,那nor flash完全可以被記憶體所替代。
(摘錄自:部落格園-韋東山 https://www.cnblogs.com/weidongshan/p/6689728.html)由此可知,(1)DOS環境下命令列工具燒寫設定決定了.bin檔案的燒寫到開發板的儲存位置(即Norflash、Nandflash),因此,不管是Nor/Nand啟動,地址[0x0]一定不為空(即地址[0x0]內的資料一定不為0);(2)S3C2440的啟動方式則由OM0和OM1引腳(開發板具體通過撥碼開關控制)來選擇。因此,當程式燒寫到Norflash而選擇Nandflash啟動開發板不會有現象,Nandflash同理。(3)執行程式時,通過在程式中對已知啟動方式的判斷,來設定棧區地址(個人理解程式開頭對啟動方式進行判斷的作用就是幹這個的)。程式執行是從0x0地址開始:(假設Nand啟動)Nandflash中已經存有程式碼,地址[0]資料不為0,因此,通過【寫0到[0x0],然後取出與0比較:如果r1 != r2, nor啟動;如果r1 == r2, nand啟動;假設r1 == r2】則表示程式儲存在Nandflash(以地址0x0開始)且前4k對映到SRAM,棧區在SRAM頂部,地址為4096; (假設Nor啟動)Norflash中已經存有程式碼,地址[0]的儲存空間不可進行寫操作且資料不為0。Nor啟動,則程式直接在Norflash啟動,棧區地址也在SRAM頂部,地址為(0x40000000+4096)。因此,杜絕了Nand/Nor啟動時地址[0x0]的空間未被賦值0時原本資料為0的可能性。(此即問題1的答案)問題3:Nor啟動,SRAM除了儲存暫存器sp之類,還有別的作用嗎?
問題4:ARM中Makefile的規則、語法、函式及例項
1.Makefile的說明:
1)功能【gcc -Werror -Iinclude -c -o c.o c.c -MD -MF .c.o.d】來自gcc,和Makefile本身無關
2)當工程中檔案(包括 .c/ .h/ .s ...)路徑發生變化後,需要【make distclean】一次,再重新make(為什麼?)
3)當工程檔案(包括 .c/ .h/ .s ...)只執行了內容修改,直接make即可重新編譯生成 .o檔案,原來的依賴可直接用(?)
2. arm-led工程:include/s3c2440_soc.h、led.c、Makefile、start.S四個檔案
實現功能:單燈流水、雙燈流水、三燈流水,迴圈
實驗結果:完全實現預定功能,可參考成功arm-Makefile例程如下:
問題5:變數/函式的宣告、定義、初始化的作用和區別?
(1)變數:宣告是告訴編譯器有這麼個變數,但並不實現。定義就是實現這個變數,真正在內存(堆或棧中)為此變數分配空間
宣告簡單的說就是 定義變數型別但不為其分配空間。
定義就是指定變數型別,然後分配空間併為其初始化。
(2)函式:宣告嘛表示有這麼個函數了,定義就是具體實現了,舉個例子:
函式宣告:
int fun(int a, int b); //a,b為形參
函式定義:
int fun(int a,int b)
{ int c;
c=a+b;
return c; }
函式呼叫(即函式初始化):
fun(3, 5); //3, 5為實參
宣告就象是定義的頭部,比較簡略,函式是用來呼叫的,如果函式定義部寫到呼叫的位置後面,執行到呼叫位置,後面根本沒執行就找不到了,當然報錯了,就要在前面加宣告,表示有這個函式,反之先寫函式體,後呼叫宣告就用不了,不在同一原始檔,道理也是如此
//宣告在函式外,聲明後面的函式(無論main還是其他函式)都可以呼叫 //宣告在函式內部,只能在本函式內,聲明後面的區域可以呼叫
問題6:UART特殊功能模組的暫存器操作機理和使用疑難的問題
6.1 配置UART的幾個暫存器:
UBRDIVn暫存器:設定波特率,S3C2440 UART的時鐘源有兩種選擇:PCLK、UEXTCLK、FCLK/n,其中n的值通過UCON0-UCON2聯合設定
ULCONn暫存器:設定傳輸格式
UCONn暫存器:它用於選擇UART時鐘源、設定UART中斷方式
UFCONn暫存器、UFSTATn暫存器,UFCONn暫存器:用於設定是否使用FIFO,設定各FIFO的觸發闕值,即傳送FIFO中有多少個數據時產生中斷、接收
FIFO中有多少個數據時產生中斷。並可以通過設定UFCONn暫存器來複位各個FIFO。讀取UFSTATn暫存器可以知道各個FIFO是否已經滿,其中有多少個數據。
UMCONn暫存器、UMSTATn暫存器:這兩類暫存器用於流量控制,具體看資料手冊UTRSTATn暫存器:它用來表明資料是否已經發送完畢、是否已經接收到資料
UERSTATn暫存器:用來表示各種錯誤是否發生
UTXHn暫存器:CPU將資料寫入這個暫存器,UART即會將它儲存到緩衝區中,並自動傳送出去
URXHn暫存器:當UART接收到資料時,CPU讀取這個暫存器,即可獲得資料。
6.2
問一個關於串列埠的問題:
int puts(const char *s)
{
while(*s)
{
putchar(*s);
s++;
}
}
當字串結束,*s=0,跳出while()迴圈
問:為什麼字串結束後, *s一定等於0?
答:對於字串,程式是當做字元陣列處理的,在陣列的結尾,程式會自動加一位元素'\0'作為結束標誌,因此,*s = ‘\0’,即為空,為假,跳出迴圈
6.3 UART0作除錯列印功能時,輸入之後再PC機串列埠工具回顯輸出亂碼的問題
答:可能的原因有 種,
01:波特率設定不對,導致此的可能原因有:
a)UBRDIV0設定或計算錯誤;
b)UCON0 位[11 : 10]時鐘選擇錯誤:
UCON0 位[11 : 10],選擇 PCLK,UEXTCLK 或 FCLK/n 給 UART 波特率。
UBRDIVn = (int)(被選時鐘 / (波特率 × 16) ) – 1; 00 = PCLK 10 = PCLK 01 = UEXTCLK 11 = FCLK/n
(如果希望選擇 FCLK/n,應該在選擇或取消選擇 FCLK/n 後加上“NOTE”的程式碼。)
void uart0_init(void)
{
//設定UART0輸出輸入引腳
GPHCON &= ~((3<<4)|(3<<6));
GPHCON |= ((2<<4)|(2<<6));
//GPHUP &= ~((1<<2)|(1<<3)); //該句遮蔽不影響串列埠的操作,為什麼要寫?操作GPF4,5,6時問什麼不需要設定?
//設定波特率
UCON0 = 0x00000005; //若UCON0 = 0x00000003,則PC機串列埠工具無輸出顯示
UBRDIV0 = 26;
//設定資料格式
ULCON0 = 0x00000003; //8n1
}
c)時鐘分頻暫存器CLKDIVN = 0b101 = 5,設定錯誤
/*設定時鐘分頻暫存器CLKDIVN = 0b101 = 5*/
ldr r0, = 0x4c000014
mov r1, #5 //若#5改為 #3 ,則PC機串列埠工具輸出亂碼
str r1, [r0]
/*如果 HDIVN 不為 0,CPU 匯流排模式應該使用以下指令使其從快匯流排模式改變為非同步匯流排模式(S3C2440
*不支援同步匯流排模式)
*/
MRC p15, 0, r0, c1, c0, 0
ORR r0, r0, #0xc0000000
MCR p15, 0, r0, c1, c0, 0
/*設定多層鎖相環控制暫存器MPLL,使得MPLL = 400MHz*/
ldr r0, = 0x4c000004
ldr r1, = ((92<<12) | (1<<4) | (1<<0))
str r1, [r0]
02:資料格式不對?問題7:操作暫存器的規範
改變暫存器的話。讀 改 寫 三步。別影響其他位。
對某個暫存器進行操作時,先對該暫存器清零,再賦值。
詳細:見【歸納】C語言程式碼編寫規範——ARM
問題8:ARM架構晶片(如ARM9-s3c2440a),暫存器都是32位,為什麼?
答:暫存器的本質是記憶體,且ARM架構下固定的32 bits 操作碼(opcode)長度,降低編碼數量所產生的耗費,減輕解碼和流水線化的負擔。大多均為一個CPU週期執行。組成操作碼欄位的位數一般取決於計算機指令系統的規模。
問題9:S3C2440晶片手冊中,EINT[]; 什麼意思?
_EINT();是開啟全域性中斷,跟51中EA=1;效果相似
_DINT();是關閉全域性中斷,跟51中EA=0;效果相似
_EINT();是開啟全域性中斷,跟51中EA=1;效果相似_DINT();是關閉全域性中斷,跟51中EA=0;效果相似
問題10:編譯時,反彙編 *.dis 檔案顯示,0X0地址非<_start>,編譯生成的 *.bin 檔案在開發板顯示失敗的原因查詢
Makefile:
arm-linux-ld -Ttext 0 start.o led.o uart.o init.o main.o -o uart.elf
該步完成連結功能,把彙編好的OBJ(機器碼)檔案、庫檔案連結起來,最終形成可以在特定平臺執行的可執行檔案,用到的工具為arm-linux-gcc。
連結順序從 arm-linux-ld -Ttext 0 之後,從0X0地址開始,依次存放start.o led.o uart.o init.o main.o檔案,順序一定要注意,start檔案在第一位,main檔案在最後位
具體原理不是很清楚,不過大概是連結器從左到右依次解析輸入檔案,判斷是否是目標檔案與存檔檔案
問題11:關於標頭檔案包含的問題
11.1 對標頭檔案的包含的問題:
1)使用檔案和標頭檔案在同一個目錄,用法:#include "s3c2440_soc.h"
2)使用檔案和標頭檔案不在同一個目錄,用法:#include <s3c2440_soc.h>
需要注意的是,方法2有時候對不再同一個目錄的標頭檔案包含時會出錯,原因未知
例如:下面main()中使用標頭檔案:
1.#include <s3c2440_soc.h> #include <uart.h>
Makefile1可以順利編譯,Makefile2不可
現有工程檔案E:\Linux-ARM程式設計\一期ARM裸板程式\記憶體控制器\NorFlash
start.S, Makefile, main.c, led.c 資料夾:include
標頭檔案夾include:s3c2440_soc.h, uart.h
Makefile:
objs = main.o led.o start.o
dep_files := $(patsubst %, .%.d, $(objs))
dep_files := $(wildcard $(dep_files))
CFLAGS = -Werror -Iinclude
all: $(objs)
arm-linux-ld -Ttext 0 start.o led.o main.o -o led.elf
arm-linux-objcopy -O binary -S led.elf led.bin
arm-linux-objdump -D led.elf > led.dis
ifneq ($(dep_files), )
include $(dep_files)
endif
%.o: %.c
arm-linux-gcc $(CFLAGS) -c -o [email protected] $< -MD -MF [email protected]
%.o: %.S
arm-linux-gcc $(CFLAGS) -c -o [email protected] $<
clean:
rm *.o *.dis *.elf *.bin
distclean:
rm $(dep_files)
.PHONY:
clean
Makefile2:
all:
arm-linux-gcc -c -o led.o led.c
arm-linux-gcc -c -o uart.o uart.c
arm-linux-gcc -c -o init.o init.c
arm-linux-gcc -c -o main.o main.c
arm-linux-gcc -c -o start.o start.S
arm-linux-ld -Ttext 0 start.o led.o uart.o init.o main.o -o uart.elf
arm-linux-objcopy -O binary -S uart.elf uart.bin
arm-linux-objdump -D uart.elf > uart.dis
clean:
rm *.bin *.o *.elf *.dis
11.2 標頭檔案的製作
例程:
#ifndef _MY_PRINTF_H
#define _MY_PRINTF_H
int printf(const char * fmt, ...);
int my_printf_test(void);
#endif
參考連結
http://topic.csdn.net/u/20101125/22/15af528d-d417-4f6b-8fa9-565e3d980eb2.htmlhttp://blog.csdn.net/zlwzlwzlw/archive/2009/12/07/4955560.aspx
http://hi.baidu.com/paladin1893/blog/item/8dab19510325586b843524e1.html
https://blog.csdn.net/duan19920101/article/details/50991794
問題12:關於特殊功能暫存器使能內部上拉的問題
控制LED燈的暫存器GPF4,5,6使能內部上拉沒有專門寫到程式,而控制UART0的輸出輸入引腳的GPH2,3程式專門寫了使能內部上拉
已知:晶片重啟時,GP_UP端初始狀態[0x00],0:預設使能附加上拉功能到相應埠引腳
問1:UART0的輸出輸入引腳的GPH2,3為什麼還寫內部上拉?為了程式嚴謹嗎?
問2:控制LED燈的暫存器GPF4,5,6使能內部上拉為什麼不寫?不擔心內部電平過低(當GPF4,5,6的使能端被改動時)?
問題13:關於波特率分頻暫存器UBRDIVn,設定公式為什麼這樣寫的問題
UBRDIVn: UART baud rate divisor registers → UARTUART 波特率分頻暫存器
baud英 [bɔːd] 美 [bɔd] n. 波特(資訊傳輸速率的單位)n. (Baud)人名;(英)鮑德;(法)博
rate英 [reɪt] 美 [ret] n. 比率,率;速度;價格;等級 vt. 認為;估價;責罵 vi. 責罵;被評價
divisor英 [dɪ'vaɪzə]美 [dɪ'vaɪzɚ]n. 除數;因子
波特率發生
每個UART 的波特率發生器為傳送器和接受器提供序列時鐘。波特率發生器的源時鐘可以選擇 S3C2440A 的內部系統時鐘或 UEXTCLK。換句話說,分頻由設定 UCONn 的時鐘選項選擇。波特率時鐘是通過 16 和由 UART波特率分頻暫存器(UBRDIVn)指定的 16 位分頻係數來分頻源時鐘(PCLK,FCLK/n 或 UEXTCLK)產生的。UBRDIVn 由下列表達式決定:
UBRDIVn = (int)( UART 時鐘 / ( 波特率 × 16) ) - 1
(UART 時鐘:PCLK,FCLK/n 或 UEXTCLK)
當然,UBRDIVn 應該是從 1 至(2 16 -1),只有在使用小於 PCLK 的 UEXTCLK 時設定為 0(旁路模式)。
例如,如果波特率為 115200 bps 並且 UART 時鐘為 40 MHz,則 UBRDIVn 為:
UBRDIVn = (int)(40000000 / (115200 x 16) ) - 1
= (int)(21.7) - 1 [ 取最接近的整數]
= 22 - 1 = 21
問題14:UART0回顯程式完成並執行成功之後,檢視賦值操作和位操作時的暫存器的類別情況
答:1)對暫存器的賦值運算只是簡單的賦值單項運算;對暫存器的位操作大多是把數值進行位操作之後與暫存器進行邏輯運算,然後把結果再賦值給暫存器,算是複合運算
2)進行位操作複合運算的全部是I/O Ports暫存器,而進行單項賦值運算的則全是特殊功能暫存器
問題15:怎樣提高程式查錯除錯的效率?
1)有麼有可以檢視一段記憶體中所有資料的辦法?並且可以檢視這段記憶體的程式碼和地址?
原因:當程式出錯時,編譯器播出錯誤的地方,但實際錯誤可能只在最前面,這樣檢查錯誤耗費大量時間,於是想直接檢視程式在開發板上的地址和對應的程式碼,這個方法現實嗎?有沒有呢?貌似反彙編可以完成這個任務?但彙編太不人性化,很難
解決方法:
2)按照編譯器提示的錯誤原因和錯誤程式碼位置,細心逐行排除
例:JZ2440一個按鍵控制LED的程式,編譯連結時出現:
問題發現:指令後面的 ';'未加,很簡單,費了好久時間才找到原因,逐行排除法最快
問題16:關於全域性變數g_char、g_char3進行自加運算時,一直輸出同樣的大小寫字母的解決
==============================================================
SDRAM設定之後,測試結果:
--------------------------------------------------------------
當g_char、g_char3是main()函式的區域性變數時:
Nand執行時:AaBbCcDd ... LED迴圈
Nor執行時 :AaBbCcDdEeFfGgHhIiJjKkLlMmNn ... LED迴圈
--------------------------------------------------------------
當g_char、g_char3是main()函式之前的全域性變數時:
Nand執行時:AaBbCcDdEeFfGgHhIiJj ... LED迴圈
Nor執行時 :AaAaAaAa ... LED迴圈
==============================================================
加入連結指令碼後:
Nand執行時:%%%%%%%% ... LED迴圈
Nor執行時 :%%%%%%%% ... LED迴圈
=============================================================
問題查詢:
在於main()函式中迴圈判斷while():
1)while(1)列印:ABCDE...
2)while(sdram_test() == 1)時,持續輸出一個不變字元達不到預期目的, 如:UUUU...
解答:
在判斷或執行sdram_test();函式後,[0x30000000]及之後的100000個位元組的記憶體被該函式賦值重新裝數;
當只有一個字元自加結果列印時,只會輸出被修改後的數,而主程式要實現字元自加的目的將永遠不能實現
當有多個字元自加結果列印時,每次列印兩個被修改的數,而主程式要實現字元自加的目的將永遠不能實現
1.用putchar列印:數字0xa/b/c...+ '0'
數字0xa/b/c...- 0xa + 'a'
探究列印結果,具體實施如下:
putchar(0xa + '0');//相當於字元‘0’加10,即變為字元':'
putchar(0xf + '0');//相當於字元‘0’加15,即變為字元'?'
putchar(0xa + - 0xa + 'a');//字元‘a’加0,即變為字元'a'
putchar(0xf + - 0xa + 'a');//字元‘a’加5,即變為字元'f'
列印結果:
:?af
解析如上。
ASCII碼(從左到右由小到大依次加1):0 1 ... 9 : ; < = > ? @ A B ... Y Z [ \ ] ^ _ ' a b c ... y z { | } ~ DEL
2.用printHex()函式列印十六進位制格式數字
/*十六進位制的格式整型數字的輸出
*所有輸入的數字都以十六進位制輸出
*/
void printHex(unsigned int val)
{
int i;
unsigned char a[8];
//先把整形術就val裝到陣列a內
for(i = 0; i < 8; i++)
{
a[i] = val & 0xf;
val >>= 4;
}
puts("0x");
for(i = 7; i >= 0; i--)
{
if(a[i] >= 0 && a[i] <= 9) //warning: comparison is always true due to limited range of data type原因:a[i]>=0總滿足;
putchar(a[i] + '0');
if(a[i] >= 0xa && a[i] <= 0xf)
putchar(a[i] - 0xa + 'a');
}
}
探究列印結果,具體實施如下:printHex(g_i);
printHex(g_j);
printHex(g_k);
printHex(g_l);
列印結果如下:
0x8b9bf99f
0xabcdef12
0x00000012
0x0000000c
問題18:start.S中,以4位元組對齊讀寫操作cpy/clean,會不會造成data/bss段甚至別的段開頭或者結尾誤操作?
答:會的,所以,data/bss段開頭,甚至每個段的開頭都自動設定一次4位元組對齊
相關推薦
【歸納】S3C2440A之ARM學習的所有的問題:
目錄:問題1:關於Nor/Nand啟動判斷的問題:問題2:程式燒寫到什麼位置啦(即程式的儲存位置)?Norflash/Nandflash?問題3:Nor啟動,SRAM除了儲存暫存器sp之類,還有別的作用嗎?問題4:ARM中Makefile的規則、語法、函式及例項問題5:變數/
【C++】STL之list學習
list學習總結 一. list是什麼? 1.list概述 2.list相對其他容器的優缺點 3.list的資料結構 二.list的使用(常見使用介面) 1.list的常見建構函式 2.list常
【Python學習筆記】Coursera之PY4E學習筆記——File
color 學習筆記 函數 read mod rom stephen 內容 filename 1、打開文件 使用handle=open(filename,mode)打開文件。這一函數將會返回一個handle(應該翻譯為“柄”吧)用來操控文件,參數filename是一個字符串
【城北徐公之機器學習】感知機模型
com eno 學習 nwr mys rtl wms fc7 rcu 一、什麽是感知機? 感知機最早由計算科學家Rosenblatt在1958年提出,他是一種單層(註意,輸入層並不計算在內)神經網絡。如圖為一個二元輸入的感知機模型。 其中x1,x2為輸入,b為偏置,激活函數
【Vue】IView之table元件化學習(二)
最基本的繫結table是這樣的,需要columns和data兩個屬性。 <template> <Card> <h4>表格栗子</h4> <Table :columns="cols" :data="stu
Spring原始碼學習【八】SpringMVC之DispatcherServlet
目錄 一、前言 三、總結 一、前言 Web環境是Spring框架的重要應用場景,而SpringMVC又是Web開發中一個常用的框架,因此我們有必要學習一下SpringMVC的實現原理。 回到Web專案的配置檔案web.xml中,在使用SpringMV
機器學習框架ML.NET學習筆記【2】入門之二元分類
一、準備樣本 接上一篇文章提到的問題:根據一個人的身高、體重來判斷一個人的身材是否很好。但我手上沒有樣本資料,只能偽造一批資料了,偽造的資料比較標準,用來學習還是蠻合適的。 下面是我用來偽造資料的程式碼: string Filename = "./figure_full.c
【轉】linux之cp/scp命令+scp命令詳解
特殊 是否 用戶登錄 usr 指定 highlight 顯示 檔案 三種 linux之cp/scp命令+scp命令詳解 名稱:cp 使用權限:所有使用者 使用方式: cp [options] source dest cp [options] source
【轉】c#之繼承
none 實現 void 運算符重載 調用方法 需要 strong 靜態 顯式 一.繼承的類型 在面向對象的編程中,有兩種截然不同繼承類型:實現繼承和接口繼承 1.實現繼承和接口繼承 *實現繼承:表示一個類型派生於基類型,它擁有該基類型的所有成員字段和函
【轉】C#之集合
tab 並發集合 get spa style con 都在 src 字典 數組(http://www.cnblogs.com/afei-24/p/6738128.html)的大小是固定的。如果元素的個數是動態的,就應使用集合類。 列表(http://www.cn
【Linux】Linux操作系統學習路線
目錄 用戶和用戶組 logs mysq 紅旗 移植 ini var 文件權限 數據離不開服務端的存儲,Linux是免費、開源、相對其他操作系統比較穩定、安全,是服務端部署首選的操作系統。 網上關於Linux的學習材料已經很多,這裏只是簡單羅列一下Linux的學習要點。 最重
【Spring】SpringMVC之異常處理
存儲 targe 存在 cnblogs del file 處理機制 href click java中的異常分為兩類,一種是運行時異常,一種是非運行時異常。在JavaSE中,運行時異常都是通過try{}catch{}捕獲的,這種只能捕獲顯示的異常,通常項目上拋出的異常都是不可
【Spring】SpringMVC之攔截器
https javax request orm bin 支持 exceptio 賬號 intern Spring的HandlerMapping處理器支持攔截器應用。當需要為某些請求提供特殊功能時,例如實現對用戶進行身份認證、登錄檢查等功能。 攔截器必須實現HandlerI
【Spring】SpringMVC之REST編程風格
data springmvc 4.0 gen rip servle truct -name insert REST架構是一個抽象的概念,目前主要是基於HTTP協議實現,其目的是為了提高系統的可伸縮性、降低應用之間的耦合度、便於架構分布式處理程序。 在URL中設置使用
【22】Vue 之 Vue Devtools
rom 創建 png ins -c 擴展程序 安裝 搜索 項目 vue安裝: # 最新穩定版 $ npm install vue # 全局安裝 vue-cli $ npm install --global vue-cli # 創建一個基於 webpack 模板的新項目 $
【轉載】linux之sed用法
span 變量 常用 tdi 選擇 包括 div 輸入 記得 linux之sed用法 原文地址:http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html sed是一個很好的文件處理工具,本身是
【03】react 之創建component
更強 系列 生命周期 object mem efi 多余 element edi React推出後,出於不同的原因先後出現三種定義react組件的方式,殊途同歸;具體的三種方式: 函數式定義的無狀態組件 es5原生方式React.createClass定義的組件 es6形
【06】react 之 PropsType
nod document 元素 pre ace ont 道具 def reat React組件創建的時候,需要傳入屬性,我們可以使用使用PropTypes進行類型檢查,您可以使用React.PropTypes在組件的道具上運行。 React.PropTypes.array
【07】react 之 生命周期
led render cti dup 一些事 復制代碼 pop 狀態機 document 閱讀目錄(Content) 實例化 getDefaultProps getInitialState componentWillMount render componentDidM
【09】react 之 表單組件
密碼 愛好 你在 false create 保留 input 數據 編寫 不太清楚有多少初學React的同學和博主當時一樣,在看完React的生命周期、數據流之後覺得已經上手了,甩開文檔啪啪啪的開始敲了起來。結果...居然被一個input標簽給教做人了。 故事是這樣的