學習嵌入式系統

姓名:顧穎 17021223250

鏈接:https://www.zhihu.com/question/19688487/answer/32217959

【嵌牛導讀】:學習嵌入式系統,首先應該明確什么是嵌入式系統,否則費力去學,卻不知所學為何物,豈不惘然?嵌入式系統的定義很多,這也是困擾嵌入式系統學習的一個因素。

【嵌牛鼻子】:嵌入式的基本講解

【嵌牛提問】:系統設計工作是什么?嵌入式的應用。

【嵌牛正文】:

鏈接:https://www.zhihu.com/question/19688487/answer/32217959

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

學習嵌入式系統,首先應該明確什么是嵌入式系統,否則費力去學,卻不知所學為何物,豈不惘然?嵌入式系統的定義很多,這也是困擾嵌入式系統學習的一個因素。筆者根據自己開發和教學過程中的理解,以及對各種嵌入式系統的應用進行總結,提出了嵌入式系統的簡單定義:嵌入式系統是嵌入式計算機系統的簡稱,這個定義突出嵌入式計算機系統和普通計算機系統的共性。下表列出了嵌入式系統的一些典型的應用:

智能機器人(S D R 4,火星登陸車)

娛樂和消費電子(Gameboy Advance,SonyPSP)

網絡通信產品(Smartphone)

軍用設備(軍用PDA )

汽車(車載導航,自動駕駛,娛樂系統)

智能儀器(虛擬儀器)

安全防護(防火,防盜)

環境保護(探空氣球)

銀行和商業消費(ATM)

以火星登陸車為例來分析一下嵌入式系統的定義。火星登陸車雖然聽起來感覺在技術上有些高不可測,但是本質就是嵌入式計算機系統的應用,其核心就是一個計算機系統,而這個計算機系統的組成同傳統的計算機系統在本質上沒有什么差別。兩者的顯著不同之處就在于,用于火星登陸車的計算機系統被安裝到了火星登陸車上。當然,一個計算機系統能夠被安裝在火星登陸車上,是需要進行很多特殊設計的。但是從本質上講,嵌入式系統的核心概念還在計算機系統。嵌入式系統學習的重點也在計算機系統上。一方面,學習者需要牢固掌握計算機系統本身的概念,更重要的是學習嵌入系統的開發過程同傳統計算機系統開發過程的差別。這里需要指出的是,很多學習者本來就沒有從事過完整計算機系統的開發,高校的教學是以程序設計為中心的,計算機系統的構成,操作系統的原理,編程語言等課程都是為了能夠讓學生更好的使用計算機系統進行程序設計,在現有的計算平臺上來設計實現各種應用,學生一般沒有機會學習一個完整的計算機系統是如何構建,并親身參與到構建的每一個過程。而對于嵌入式系統而言,從事平臺開發的人就是要親自去開發出一個完整的計算機系統,這個過程包括

1. 需求分析

2 硬件設計

3 驅動程序

4 Bootloader & BSP (板級支持包)

5 操作系統的移植

6 應用程序的開發

7 性能檢查

嵌入式系統教學的目的就是教會學生如何根據需求去建立滿足某種特殊行業需求的嵌入式計算機系統。讓學生學會如何構件硬件平臺,進行硬件設計,選擇能夠滿足應用要求的最佳的嵌入式操作系統,并完成Bootloader,BSP和驅動程序的編寫,移植,調試等過程。為了滿足行業需求,最終要在所建立的系統上編寫調試相應的應用程序,并進行性能的測試和檢查。

你是誰,你需要學習哪些東西?

如果你的工作只是需要在PC 機上編寫一個圖片瀏覽程序,那么你就沒有必要去了解當系統收到一個ARP請求包后應該如何回應。同樣的道理,嵌入式系統的學習也是有很多方面的。就嵌入式系統的設計和實現而言,基本上需要四種不同的工作:系統設計工作,硬件設計工作,驅動程序和操作系統移植工作和應用程序設計開發工作。

1.系統設計工作

在系統的設計階段,系統分析師將根據需求確定系統的硬件的基本構成,根據系統的需求選擇使用那種處理器,使用哪種操作系統,使用那些軟件開發工具。系統分析師往往是較為完整的參與過嵌入式系統設計的全過程,對于系統應用的行業較為了解,對于嵌入式系統本身的開發流程十分清楚的人。

2.硬件設計工作

系統硬件設計人員需要根據系統分析師的設計結果,進行硬件原理圖的設計。通常需要硬件設計人員熟悉嵌入式系統的硬件構成。硬件設計人員需要了解常用的嵌入式系統處理器,存儲器(Flash,SDRAM),以太網MAC芯片,音頻/視頻編解碼芯片,電源管理芯片,總線接口電路 (USB,PCI),液晶顯示模塊,可編程邏輯器件(FPGA/CPLD),無線網絡通信模塊(Bluetooth,WLAN,GPRS)等硬件電路構成元素的基本工作原理,連接使用方法,使用注意事項,基本調試方法等內容。在網絡上能找到很多公司的評估板的原理圖,對于這些原理圖要仔細研究,摸清處理器同存儲器,網卡,液晶模塊等器件的連接方法和原因。通過對這些電路的研究,能夠較快地了解整個嵌入式系統的構成,這些電路同實際產品中的電路雖有一定差別的,特別是對于手持設備,但這些差別不影響初學者學習嵌入式系統的硬件設計基本構成。

以上這些知識,往往需要較長時間的學習和積累,需要親自參與實踐的機會。對于剛剛接觸嵌入式系統硬件開發的學生來講,一般不可能全部了解這些知識,但也不會是通通一無所知。筆者結合自己開發和教學的經驗認為:首先應該選定一款主流且較為簡單的嵌入式系統處理器,比如基于ARM7TDMI 內核的AT91M40800,S3C44B0 等嵌入式系統處理器,學習32 位RISC處理器的編程模型,指令集。高校教學中,單片計算機課程一般以8051系列單片為核心講解,由于現代32位處理器的結構和開發方式同8位單片機有著較大的差別,學習者還是需要花一點力氣來研究以下32位處理器的。以ARM處理器為例,學習者就需要理解處理器的多種工作模式,備份寄存器,RISC 指令集的特點,MMU 和虛擬地址,中斷處理過程等內容。在學習指令集的過程中,最好能夠每學習幾條指令,就使用這幾條指令在模擬器上實驗以下,觀察處理器執行的結果。這個過程一方面是學習者對于指令本身的學習能夠取得一個比較好的效果,另外也是對開發工具本身的一種學習。接著,就可以開始學習片上資源的使用和配置方法。這時就需要一個方便使用的開發板,學習者能夠通過JTAG仿真器將開發板同調試PC機相連,進行程序的下載,調試。特別是要仔細研究系統的初始化過程和中斷處理的過程。在開發過程中如果遇到問題,應自己分析問題產生的原因,通過分析縮小問題可能產生的范圍,最終找到問題的所在。最重要的就是要保持一種解決問題的信心,面對困難如何處理,往往能夠決定最終系統是否能夠調試成功。然后,學習者可以開始仔細學習處理器同存儲器的連接,存儲空間的配置,各種外擴器件,如網卡,AC97聲卡的工作原理和使用方法。嵌入式系統硬件設計中往往需要使用可編程器件,學習者還需要一定的時間來學習使用常用的可編程器件(CP L D / F P G A),常用的有Xilinx和Altera公司的產品。進行系統硬件原理圖設計,就需要使用原理圖設計的EDA工具,常用的EDA 原理圖設計工具主要包括Cadence公司的Capture,Protel公司的Protel99SE等。接下來就可以參照評估板的電路圖,根據系統的設計要求,開始進行原理圖的繪制了。在原理圖繪制過程中,一定要搞清評估板電路連接的原因,對于一時沒有搞清楚的問題切不可蒙混過關。例如,有些處理器的地址線是以字節位單位的,而另一些處理器的地址線則是以兩個字節為單位的,當連接16位的存儲器的時候,切不可想當然的把處理器的A 0 直接連接到存儲器的A 0 上面。另外,學生還應具有一定的PCB板圖繪制能力,因為在現階段,很多公司還不能完全把原理圖的設計工作和PCB 的繪制工作分開,往往要求硬件設計人員既能進行原理圖設計又能進行板圖設計。即使是PCB設計和原理圖設計分開的公司,也需要原理圖設計者能為PCB 的設計者對于不同的信號提出布板要求。

3.驅動程序和操作系統移植工作

現代嵌入式系統的開發同傳統8位單片機系統的開發相比,一個顯著的區別就是嵌入式操作系統的廣泛使用。在拿到焊接完畢的電路板,并進行基本的測試后,就要進行驅動程序和操作系統的移植工作了。首先要進行的Bootloader的編寫和移植工作。Bootloader相當于PC系統的BIOS。對于有些嵌入式操作系統,如uc/OSII沒有bootloader同樣可以開發調試。但是對于WindowsCE和嵌入式linux系統而言Bootloader就是必須的了。本文以Windows CE 為例,做一個簡要的說明。

Windows CE 系統的移植工作主要就是BSP(板級支持包)的開發過程。BSP將具體的硬件差異同操作系統的核心隔離開來,主要由Bootloaer ,OAL(OEMAbstraction Layer)和設備驅動程序三部分組成。WindowsCE系統中Bootloader叫做Eboot。Eboot被寫入系統的引導Flash。系統啟動時運行Eboot,完成通過網卡將調試PC 機中WindowsCE 操作系統映像下載到目標系統的SDRAM中并開始執行的功能。對于一個系統移植人員,首先需要閱讀文檔,了解WindowsCE系統Bootloader和BSP的基本概念和開發過程。(呵,還要做這工作啊,我還沒想到(初學^_^))Windows CE的開發系統Platform Builder提供了詳細的文檔和例程,開發人員需要仔細的閱讀文檔和例程。搞清楚各個函數之間的調用關系。在開發過程中的一個重要的步驟就是打通串口,使得目標板能夠通過PC機串口向調試PC 機發送數據。由于ARM系統的仿真器比較昂貴,而且操作系統的調試往往不使用JTAG調試器進行單步調試。所以能從串口觀察程序的執行過程和結果對于調試就顯得十分重要了。串口打通之后一個比較棘手的問題就是網卡芯片的調試。剛剛接觸嵌入式系統開發的人往往沒有直接在寄存器級上使用網卡芯片的經驗,而網卡芯片的說明一般都較為簡短,這就要求開發者學習一些以太網的基礎知識,對以太網的MAC 層有一個基本的認識。另外,各種網絡調試(抓包)工具的使用也能大大降低系統調試的難度。系統的OAL需要根據具體硬件的不同做出相應的修改,這個部分可參照文檔進行,在調試過程中根據串口的信息分析出錯的地方。要充分發揮跨文件字符串搜索工具的功能,在浩如煙海的源文件中找到出錯的位置。當然,隨著開發者對系統文件目錄結構的熟悉和了解,錯誤定位的速度會不斷加快。WindowsCE 的驅動程序相對而言是比較好寫的。

4.應用程序的開發

嵌入式系統的應用程序開發同在PC 機上開發應用程序的區別不是很大。對于Windows CE系統而言,Microsoft已經提供了較為完善的開發工具。特別是.NET Compact work的使用,使得基于Windows CE.NETCompactwork的應用程序有了跨平臺性。開發人員可以使用Windows 的C# 語言直接在PC 上進行http://CE.NET應用程序的開發和模擬調試,也可將目標系統同PC 機相連,進行聯機調試。現在有很多系統支持J2ME(JAVA的嵌入式系統版本) ,這使得JAVA 在嵌入式系統應用開發中占有較大的優勢。另外,作為專業的嵌入式系統軟件開發人員,還需要充分了解面向對象技術和設計模式等方面的知識,當然作為初學者可以先不深入研究這方面的內容。

常用嵌入式系統處理器和操作系統

處理器

常用嵌入式系統處理器主要包括ARM 處理器,Power PC 處理器,基于MIPS 內核的嵌入式處理器,軟核處理器(如Altera 的Nios和Xilinx的MicroBlaze等)和DSP(數字信號處理器)等。

ARM 處理器的主要特點是具有較高的性能功耗比。ARM處理器被廣泛的應用在手機,PDA等領域,其中較為著名的有Intel 公司生產的基于ARM 內核的XScale系列處理器。由于所有公司生產的基于ARM內核的處理器具有相同的編程模型,在手持和電池供電的系統中,基于ARM的嵌入式系統處理器往往被首先選用。PowerPC(簡稱PPC)處理器具有較強的運算性能和數據吞吐能力,在網絡和數據通信領域基于PPC的嵌入式系統處理器有著廣泛的應用。其中Motorola公司生產的MPC860/MPC8260被大量地應用在嵌入式網絡產品中。MIPS 處理器的特點表現在十分強大的處理能力上。作為高性能處理器,MIPS處理器適用于網絡、企業及高級消費類電子應用,特別是在機頂盒系統中,MIPS處理器具有較高的市場占有率。隨著可編程器件的規模不斷擴大,使得人們能夠根據需要定制處理器,并方便的將針對某種特殊應用定制的處理器方便的在可編程器件內部實現。除了處理器外,計算機系統還需要許多其他構成部分,比如在多通道媒體數據處理系統中,經常需要使用可編程器件來實現高速的數據處理功能,使用軟核DSP來實現復雜的數字信號處理算法,同時還需要處理器進行事務處理,軟核處理器將可編程器件,DSP同處理器結合在一起,為系統級設計提供了極大的靈活性。DSP(數字信號處理器)有別于通用處理器,集中表現在其強大的數字信號處理能力上。在DSP 內部提供了硬件乘累加器,處理器在設計上對于特殊的尋址方式做了優化,一些DSP 還支持零耗循環(Zero OverheadLoop)。為了方便嵌入式系統設計,主流DSP 一般也都提供了豐富的外設。特別值得一提的是ADI 公司的Blackfin 系列DSP和TI 公司的DM64X系列DSP,兩種處理器都提供了豐富的片上外設,非常適用嵌入式系統應用。

操作系統

http://WindowCE.NET/5.0

作為Microsoft的產品,WindowCE.NE/5.0提供了功能完備的平臺開發工具Platform? Builder和應用開發工具Embedded Visual C++/Visual Studio 2003。WindowsCE由于擁有廣大使用者所熟悉的windows界面,系統提供了眾多驅動程序,并且有完備的文檔支持。對于應用開發而言,熟悉Windows系統開發的程序員很容易轉到WindowsCE 應用程序的開發。Windows CE將會是一個非常有前途的嵌入式操作系統。

VxWorks

VxWorks是由Windriver(風河)公司出品的嵌入式實時操作系統,大名鼎鼎的火星登陸車就是使用了VxWorks。Windriver為VxWorks提供了集成開發環境tornado。

υC/OSII

υC/OS是由Jean Labrosse設計編寫的開放源代碼的嵌入式實時操作系統,筆者最早接觸的嵌入式操作系統就是它。閱讀并深入理解υC/OS的源代碼對于理解實時系統是大有裨益的。

ARM Linux

ARM linux是由Russell King和其他開發者開發移植的用于ARM 處理器的linux操作系統。ARM Linux系統在GNU GPL下發布。

υCLinux

υClinux 是適用于沒有MMU 的嵌入式處理的LinuxOS 版本。υ Clinux 同樣在GNU GPL發布。

嵌入式系統開發過程中的常見問題和解決方法

Bootloader如何寫入Flash ?

初學者一般都會遇到如何將程序寫入處理器的問題。對于不同的處理器,可以采用不同的方法。例如Intel的Xscale處理器可以使用Intel公司提供的JFlash工具燒寫。對于具有JTAG調試工具軟件的處理器,可以使用如下思路:編寫一段程序,這段程序能將位于SDRAM/SRAM 固定地址中的數據寫入Flash中。燒寫時,首先,將這段軟件下載到SDRAM 中,然后通過調試軟件將要寫入Flash的數據下載到SDRAM/SRAM的某個固定地址開始的緩沖區,然后通過調試器開始執行程序,將數據寫入Flash。除此以外,網絡上還提供了很多專用的寫Flash的工具,開發者可以根據自己的需要選用。(現在明白了我在學的那個BF533為什么先下個flashProgramer.dxe先了)

什么是arm-elf-gcc?

arm-elf-gcc是一個交叉C語言編譯器。我們在PC平臺下編譯程序,編譯器運行的處理器同生成的代碼將要運行的處理器相同。但是,在PC

機上編譯ARM程序時,編譯器運行的處理器同生成的代碼運行的處理器不同,這種編譯器叫做交叉編譯器。其中的elf是指編譯器生成的目標文件格式。(其實我們平時用的單片機編譯器如GCC—AVR等已是交叉編譯器了,我到現在才弄清楚什么是交叉編譯器)

走了哪條編譯路徑?

系統程序和驅動程序往往包含很多的編譯選項,很多選項都是在編譯時通過命令行定義的,如果想知道編譯的是那一段程序可以使用如下的方法:

#ifdef PLAT_AAA

#error Code for Platform AAA

#else

#error Code NOT for Platform AAA

? ? ? ? ? ? ? ? #endif

這樣在編譯的時候就知道,編譯的是哪一條路經了。對于支持#pragma message( “I am here”)的編譯器也可使用#pragma message預編譯指令。

我怎么知道那段代碼在那個文件中?

系統編程中經常需要使用在多個文件中搜索字符串,在windows平臺下可以使用平臺提供的多文件字符串搜索工具。在linux平臺下,可以使用grep來搜索字符串。Grep的搜索功能十分強大,支持正則表達式搜索,熟練使用grep對于閱讀系統和驅動程序代碼是很有幫助的。

系統是從那個文件開始運行的?

對于Windows CE系統,一般從WINCE420\PLATFORM\YourPlatform\KERNEL\HAL目錄的某個匯編文件中。對于Linux系統版本不同會存在一定差異,以arm處理器為例,一般會在linux2.4.x\arch\arm\kernel的head-armv.S中。

程序執行到了那里?

可以在程序中插入如下代碼來實現

printf( “I am here %s, %d\n”,__FILE__,__LINE__);

代碼將打出printf語句所在的文件名和行號。

推薦書目

Jean J.Labrosse MicroC/OS-II The Real-TimeKernel,Second Edition這本書是筆者接觸嵌入式實時系統的入門書,在國內能夠買到中文版。這本書較為清楚地講述了實時系統的概念,各個組成部分的工作原理,特別是公開了實時系統內核的源代碼,仔細研究定會受益匪淺。有個小的提示,對于初學者,這本書可以先不看第一章,直接從第二章看起。

Abraham Silberschatz, Peter Baer Galvin,GregGagne Operating System Concepts筆者在教學過程中發現,無論是計算機還是電子工程專業都有很多學生對于操作系統的基本概念都沒有搞清,很少有學生有完整的系統編程經驗。Operating System Concepts這本書對操作系統的概念講述只能用經典來形容。對于嵌入式系統有興趣深入研究的同學,首先要把基礎打好,這本書就成了必讀之物了。

Andrew S. Tanenbaum Computer Networks 提起Andrew S. Tanenbaum 學習計算機的同學一定都知道OPERATINGSYSTEMs:Designand

Implementation這本書,筆者對于Tanenbaum這樣的教授由衷佩服。網絡協議棧是嵌入式系統中的支柱性組成部分。愿意致力于網絡深層技術研究的同學,這本書將為你們建立一個堅實的網絡基礎。

Karim Yaghmour Building Embedded Linux Systems本書詳盡的介紹了嵌入式linux系統的組成,基本概念和如何去建立各個部分。全書篇幅較小,可謂短小精悍。即可以作為嵌入式linux系統的入門讀物,又是開發過程各個部分的指南。

Advanced RISC Machines Ltd (ARM) ARM7 TDMI DataSheet? ? Advanced RISC Machines Ltd (ARM) ARM920TTechnical Reference Manual學習嵌入式系統不了解當前應用最廣泛的嵌入式處理器怎么行?ARM7 TDMI 的 data? sheet是學習ARM編程模型,指令集的好東西。在嵌入式系統中,MMU(內存管理單元)是很重要的部分,又是較難理解和掌握的部分。ARM920TTechnical Reference Manual 正好可以幫你講解這方面的內容。

Perter Van Der LinDen Expert C Programming嵌入式系統級編程最常用的語言還是C 。很多同學都自認為自己的C語言學的很好,那好,就看看這本書吧,找找自己和Experts差距。

嵌入式開發與桌面開發既有不同,又有非常大的聯系,而且十分注重實際操作能力。搞桌面開發的人在一開始接觸嵌入式的時候,通常轉換不過來,這主要體現在定位上。如文中所說,你是誰,你要做什么?我對硬件的了解僅限于編程領域,PCB設計一竅不通,但并不能說你不懂硬件就不能從事嵌入式開發。一個系統的開發設計方方面面,在自己感興趣和熟悉的領域做出自己的貢獻才是最主要的。

1。硬件設計: 需要有硬件設計的經驗,對各種嵌入式器件有很好的了解。

2。系統移植:需要匯編經驗,操作系統原理以及底層驅動的了解

3。應用程序:需要桌面編程經驗

想了解學習嵌入式的朋友歡迎來信盈達詳細了解,專業嵌入式、ARM、Linux、STM32、單片機、硬件等技術提升,詳情聯系郭老師QQ754634522? ? 電話13312935962

發布于 2014-10-21

154?4 條評論

?分享

?收藏?感謝收起

Tony Ho

嵌入式與物聯網

11 人贊同了該回答

如果是學計算機的,那么學嵌入式不會有門檻。

如果不是學計算機的,那么忘了嵌入式,先學習計算機。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內容