国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

面向應(yīng)用對象的嵌入式終端構(gòu)件設(shè)計方法研究*

2018-12-07 08:32:02,,
關(guān)鍵詞:原理圖嵌入式構(gòu)件

,,

(1.昆山鑫盛盟創(chuàng)科技有限公司,昆山 215300;2.蘇州大學(xué);3.武夷學(xué)院)

引 言

嵌入式系統(tǒng)終端構(gòu)件是具有通用功能的嵌入式外圍設(shè)備的軟硬件實體總稱[1]。它們負責(zé)實現(xiàn)嵌入式系統(tǒng)的信息采集、顯示、交互、控制等具體應(yīng)用功能。這類應(yīng)用對象具有一定的通用性,因此終端構(gòu)件可復(fù)用可移植性顯得相當重要。當前終端構(gòu)件的復(fù)用和移植效率還處于較低的水平。這其中有嵌入式系統(tǒng)本身特性的因素,也有設(shè)計規(guī)范化的問題。目前市場上終端構(gòu)件銷售商通常是將工程師提供的一系列零碎的源碼、文檔、參考手冊、工具等十幾甚至幾十個文件打包和硬件一起提供給用戶,用戶面對一堆雜亂無章的文件,通常需要花費大量的時間來尋找、梳理與自己需求相關(guān)的線索。從這側(cè)面可以看出大多數(shù)嵌入式工程師的目的只是開發(fā)出產(chǎn)品實現(xiàn)功能,構(gòu)件設(shè)計過程往往是依經(jīng)驗行事,對于底層驅(qū)動程序設(shè)計沒有徹底貫徹軟件工程思想,開發(fā)過程缺少規(guī)范化的文檔管理等。這些因素都直接導(dǎo)致了終端構(gòu)件可復(fù)用性和可移植性較差。

近些年來人們參考通用計算機軟件工程體系,將基于構(gòu)件化的軟件開發(fā)(Component-Based Software Development,CBSD)思想引入到嵌入式系統(tǒng)設(shè)計當中。Kopetz等人提出了嵌入式軟件組合構(gòu)建理論,明確了構(gòu)件化設(shè)計、組合構(gòu)造的思想和原則,并建立構(gòu)件可組合設(shè)計的理論基礎(chǔ)[2-3]。參考文獻[4]提出了一種嵌入式系統(tǒng)代碼合成技術(shù),通過增加中間層,屏蔽硬件和平臺特性。本文針對嵌入式系統(tǒng)終端構(gòu)件設(shè)計可移植性差等問題,從面向應(yīng)用對象的角度,厘清終端構(gòu)件共性和個性知識要素,建立終端構(gòu)件概念模型,從硬件原理圖繪制到驅(qū)動程序設(shè)計一系列過程,提出一套符合構(gòu)件化思想、層次清晰、封裝合理且與MCU無關(guān)的終端構(gòu)件一般性設(shè)計方法,并通過一個液晶屏終端構(gòu)件設(shè)計實例來闡述并驗證其合理性和有效性。

1 嵌入式終端構(gòu)件基本概念

圖1 嵌入式系統(tǒng)構(gòu)件層次模型

構(gòu)件是系統(tǒng)中模塊化、可部署和可替換的部件,構(gòu)件封裝對外提供一組接口[5]。嵌入式終端構(gòu)件也稱底層外設(shè)構(gòu)件或應(yīng)用構(gòu)件,在嵌入式系統(tǒng)中屬于最外層次的構(gòu)件,按照生產(chǎn)者和消費者關(guān)系,終端構(gòu)件只有需求接口而沒有供給接口。需求接口接受其中間構(gòu)件或者核心構(gòu)件提供的服務(wù),如鍵盤模塊、LED或LCD顯示模塊等。終端構(gòu)件可以調(diào)用底層內(nèi)部構(gòu)件,如LCD可調(diào)用GPIO、SPI等。終端構(gòu)件通常對應(yīng)著一種或多種具體應(yīng)用功能,如嵌入式系統(tǒng)的信息采集、顯示、交互、控制等功能。嵌入式系統(tǒng)構(gòu)件層次模型圖如圖1所示。

2 面向應(yīng)用對象的終端硬件構(gòu)件原理圖繪制

2.1 終端硬件構(gòu)件概念模型

嵌入式硬件構(gòu)件(Hardware Component,HwC)是指將一個或者多個硬件功能模塊、支撐電路及其功能描述封裝在一起,提供一系列規(guī)范的輸入/輸出接口的可重用的硬件實體[6]。一個完整硬件構(gòu)件通常包含三大部分:構(gòu)件描述、構(gòu)件實體、構(gòu)件接口[7]。構(gòu)件描述是一個硬件構(gòu)件的說明文檔,主要內(nèi)容包括硬件名稱、主要功能、引腳說明及注意事項等。一個終端硬件構(gòu)件可表述為如下模型[8]:

HwC={構(gòu)件實體,構(gòu)件描述,接口描述};

構(gòu)件實體={封裝的硬件實現(xiàn)};

構(gòu)件描述={構(gòu)件的功能描述,構(gòu)件注意事項};

接口描述={接口標識,接口網(wǎng)標,接口含義,調(diào)用說明}。

2.2 硬件原理圖繪制基本規(guī)則

硬件構(gòu)件的概念模型可通過硬件原理圖進行表述。為了清晰表達硬件構(gòu)件概念模型,在繪制原理圖時,需遵循以下基本規(guī)則:①同類型元器件命名時以相同字母為前綴并進行編號,如電阻名稱為R1、R2,電容名稱C1、C2等;②應(yīng)給出詳細的文字描述,包括構(gòu)件中英文名稱、功能描述、接口描述以及注意事項等,以提升硬件構(gòu)件的可讀性;③用虛框封裝硬件構(gòu)件的電路及文字描述,虛框之內(nèi)為硬件構(gòu)件的實體;④標明硬件構(gòu)件的對外輸入/輸出接口,接口標識分為接口注釋和接口網(wǎng)標兩種,接口注釋用來描述接口功能,標于虛框之內(nèi),接口網(wǎng)標則標于虛框之外,用來表示電路連接特性。

對于終端構(gòu)件而言,因其只有需求接口,硬件設(shè)計時首要考慮的問題就是該構(gòu)件需要什么樣的信號才能工作。因此繪制終端構(gòu)件原理圖時,沒有對外接口網(wǎng)標而只有接口注釋。圖2給出一個典型LCD終端構(gòu)件的原理圖。一個遵循規(guī)范繪制的原理圖,可讀性強,與之相對應(yīng)的驅(qū)動構(gòu)件修改方便,可有效提高移植效率。

圖2 LCD構(gòu)件原理圖

2.3 驅(qū)動構(gòu)件與原理圖的對應(yīng)關(guān)系

構(gòu)件是軟硬件綜合體,硬件引腳連接只是最基本前提,要實現(xiàn)構(gòu)件的正常功能,必須有構(gòu)件驅(qū)動程序進行配合。引腳是硬件構(gòu)件對外的唯一接口,與之對應(yīng)驅(qū)動構(gòu)件要有相應(yīng)的代碼表達出原理圖的含義。從終端驅(qū)動構(gòu)件可移植角度出發(fā),驅(qū)動構(gòu)件應(yīng)面向應(yīng)用對象也就是構(gòu)件本身進行編程,實現(xiàn)這一目的必須在驅(qū)動程序的頭文件中添加引腳映射功能。通過引腳宏定義映射,可以屏蔽不同MCU引腳的差異性,驅(qū)動程序編程只需針對終端構(gòu)件的引腳展開即可,無需關(guān)心不同型號MUC引腳的區(qū)別。構(gòu)件復(fù)用到相同型號的MCU不需要更改任何內(nèi)容即可直接復(fù)用,如果移植到不同型號MCU為核心的應(yīng)用系統(tǒng)當中,只需改動頭文件引腳的映射關(guān)系,對于驅(qū)動程序來說,則可做到最小的改動即可實現(xiàn)高效移植。例如圖2中原理圖中基于恩智浦KL25微控制器的引腳映射,定義如下:

#define LCD_CLK (PTA_NUM|15) //LCD時鐘

#define LCD_SDI (PTA_NUM|16) //LCD主出從入

#define LCD_RS (PTA_NUM|4) //LCD復(fù)位

#define LCD_DC (PTA_NUM|12) //LCD數(shù)據(jù)/命令

#define LCD_SDO (PTA_NUM|17) //LCD主入從出

3 面向應(yīng)用對象的終端驅(qū)動構(gòu)件設(shè)計

3.1 終端驅(qū)動構(gòu)件概念模型

終端構(gòu)件是包含硬件構(gòu)件和驅(qū)動構(gòu)件的完整軟硬件實體。硬件構(gòu)件生產(chǎn)通常都會遵循一定的標準規(guī)范。從某種意義上說,驅(qū)動構(gòu)件設(shè)計更大程度地決定了該終端構(gòu)件的可復(fù)用和可移植性的高低。驅(qū)動構(gòu)件是直接面向硬件操作的軟件程序及相應(yīng)的說明文檔。驅(qū)動構(gòu)件直接和硬件打交道,從軟件工程角度來看,驅(qū)動程序必須與核心構(gòu)件具體型號的MCU無關(guān),而是面向終端構(gòu)件本身,這樣才具有復(fù)用和移植價值。終端驅(qū)動構(gòu)件設(shè)計的關(guān)鍵問題是如何對這類構(gòu)件的共性和具體應(yīng)用系統(tǒng)的特性進行分析,抽象出該構(gòu)件對象的屬性和對外接口[9]。

終端驅(qū)動構(gòu)件(Terminal Drive Component,TDC)包括頭文件(.h)、源程序文件(.c)文件、文件描述、接口描述等,其概念模型可表述為:

TDC={頭文件,源程序文件,文件描述,接口描述}

頭文件={具體硬件引腳連接映射關(guān)系,功能函數(shù)聲明,全局常量定義}

源程序文件={函數(shù)功能實現(xiàn)}

文件描述={頭文件標注,源程序文件標注,函數(shù)頭注}

函數(shù)頭注={函數(shù)名稱,函數(shù)功能描述,返回值類型,參數(shù)描述,注意事項}

參數(shù)描述={參數(shù)列表,參數(shù)方向,參數(shù)含義}

用戶在使用構(gòu)件時,可以通過頭文件描述的構(gòu)件完整信息進行接口調(diào)用,而不必關(guān)心封裝在構(gòu)件源程序中的服務(wù)實現(xiàn)細節(jié)。一個設(shè)計良好的構(gòu)件被復(fù)用或者移植到不同嵌入式系統(tǒng)中,通常只需修改少量頭文件,對于源程序盡量做到少改甚至不改。

3.2 終端驅(qū)動構(gòu)件封裝基本原則

為了便于復(fù)用和移植,驅(qū)動構(gòu)件設(shè)計應(yīng)遵循以下基本原則和規(guī)范:

① 命名一致性原則。驅(qū)動構(gòu)件的頭文件和源程序文件的主文件名必須與驅(qū)動構(gòu)件名一致,構(gòu)件的屬性和內(nèi)外部函數(shù)命名統(tǒng)一以構(gòu)件名+屬性名/操作名形式,命名應(yīng)有見名知義的效果。

② 通信內(nèi)聚性和分層內(nèi)聚性原則。內(nèi)聚性指的是構(gòu)件內(nèi)部函數(shù)功能清晰單一明確,只負責(zé)一組相關(guān)的操作。通信內(nèi)聚指的要有專門負責(zé)構(gòu)件的底層通信函數(shù);分層內(nèi)聚指的是函數(shù)設(shè)計應(yīng)有層次化,高層函數(shù)能調(diào)用底層函數(shù),底層函數(shù)不能調(diào)用高層函數(shù)[10]。

③ 內(nèi)外有別原則。構(gòu)件函數(shù)分為內(nèi)部函數(shù)和外部函數(shù),內(nèi)部函數(shù)僅限構(gòu)件內(nèi)部調(diào)用,外部接口函數(shù)是外界操作構(gòu)件的接口,外部程序訪問構(gòu)件屬性必須借助外部接口函數(shù)進行,不可直接訪問構(gòu)件屬性。

④ 松耦合原則。構(gòu)件應(yīng)嚴格限制全局變量的使用,且所有數(shù)據(jù)傳遞都要通過函數(shù)的形參進行,這樣編碼既簡潔高效又安全可靠。

4 LCD終端構(gòu)件設(shè)計實例

TFTLCD即薄膜晶體管液晶顯示器,是一種常用液晶顯示器件。下面我們利用上文所述的設(shè)計思想和基本原則從原理圖繪制、公共要素分析及頭文件設(shè)計、驅(qū)動要素分析及函數(shù)設(shè)計等方面給出一個面向應(yīng)用對象的TFTLCD構(gòu)件分析和設(shè)計完整過程。

4.1 LCD構(gòu)件原理圖繪制

LCD的硬件對外唯一接口是其連接引腳。因此原理圖的繪制用虛線封裝其內(nèi)部結(jié)構(gòu),虛線內(nèi)部給出引腳的基本含義,虛線外部給出對應(yīng)的接口網(wǎng)標,本例LCD引腳連接的網(wǎng)標為恩智浦公司的Kinetis 系列KL25微控制器[11]。同時在虛擬框內(nèi)部給出詳細的構(gòu)件說明,包括構(gòu)件中英文名稱、各引腳功能和使用說明以及注意事項等,如圖3所示。這樣在系統(tǒng)移植過程中就可快速進行引腳的連接。

圖3 LCD構(gòu)件與KL25系統(tǒng)連接原理圖

4.2 LCD構(gòu)件公共要素分析及頭文件設(shè)計

要提高LCD構(gòu)件的可移植性,就必須實現(xiàn)面向應(yīng)用對象的設(shè)計和編程,屏蔽不同型號MCU的差異性。因此須在LCD構(gòu)件的頭文件lcd.h中對給出構(gòu)件的引腳連接的MCU的引腳進行定義,使用宏定義描述硬件連接線,且每個接線都單獨宏定義,更具普適性。

除此之外,構(gòu)件的頭文件應(yīng)給出文件頭注,包括文件名稱、功能概要、版本號、編寫者或修改者姓名、最后修改時間等信息。頭文件包含(#include)為LCD構(gòu)件提供服務(wù)的核心構(gòu)件或者中間構(gòu)件頭文件。LCD驅(qū)動構(gòu)件的函數(shù)聲明都放在lcd.h頭文件。LCD驅(qū)動構(gòu)件內(nèi)部函數(shù)和外部接口函數(shù)分開聲明。LCD構(gòu)件使用的一些全局常量,如屏幕寬高以及顏色類型都在lcd.h頭文件中進行定義。

4.3 LCD構(gòu)件源程序文件設(shè)計

LCD構(gòu)件源程序文件lcd.c和頭文件一樣,給出文件頭注釋,包含內(nèi)容與頭文件的頭注類似,每個函數(shù)也都必須給出函數(shù)頭注,函數(shù)內(nèi)部代碼關(guān)鍵語句也應(yīng)有行注釋或邊注釋,提高了程序可讀性。終端驅(qū)動構(gòu)件函數(shù)從屬于驅(qū)動構(gòu)件,驅(qū)動函數(shù)的命名除要體現(xiàn)函數(shù)功能之外,還需要體現(xiàn)其從屬構(gòu)件不同的實現(xiàn)方式,如LCD_Init(LCD初始化)、LCD_ShowImage(LCD顯示圖片)等,避免構(gòu)件函數(shù)出現(xiàn)同名現(xiàn)象,同時函數(shù)名也要能夠“顧名思義”。

4.4 LCD構(gòu)件驅(qū)動要素分析及函數(shù)層次化設(shè)計

(1)驅(qū)動要素分析及通信函數(shù)設(shè)計

LCD構(gòu)件能夠運行的基礎(chǔ)是LCD與系統(tǒng)核心MCU正常通信。TFTLCD采用的驅(qū)動控制器型號為ILI9341。構(gòu)件驅(qū)動程序主要工作就是和ILI9341芯片打交道,MCU與ILI9341之間采用串行外設(shè)接口(Serial Peripheral Interface,SPI)方式通信。SPI通信需要考慮驅(qū)動芯片各引腳數(shù)據(jù)傳輸?shù)臅r序問題,對ILI9341驅(qū)動芯片的初始化涉及對不同寄存器進行操作,是一系列的復(fù)雜過程。對于一般嵌入式開發(fā)人員,并不希望了解其復(fù)雜內(nèi)部機制,而是只要少量驅(qū)動代碼修改便能移植使用。

LCD構(gòu)件的中上層函數(shù)如初始化、顯示等上層功能部函數(shù)的運行均需建立在通信函數(shù)正常運行的前提之下。根據(jù)構(gòu)件的通信內(nèi)聚性和分層內(nèi)聚性原則,給出了構(gòu)件專用底層通信函數(shù)代碼如下(按照命名一致性原則,函數(shù)命名統(tǒng)一采用LCD_操作名):

//發(fā)送8位數(shù)據(jù)

void LCD_wr_data(uint_8 data){

GPIO_set(LCD_DC,1);

//LCD_DC高電平表示發(fā)送數(shù)據(jù)

SPI_send(0,data);

//使用0號SPI模塊發(fā)送8位數(shù)據(jù)

}

//發(fā)送8位寄存器命令

void LCD_ wr_reg (uint_8 data){

GPIO_set(LCD_DC,0);

//LCD_DC低電平表示寫寄存器

SPI_send1(0,data);

//使用0號SPI模塊發(fā)送8位寄存器命令

}

可以看出,數(shù)據(jù)通信函數(shù)調(diào)用了GPIO 構(gòu)件和SPI通信構(gòu)件。GPIO 構(gòu)件用來實現(xiàn)MCU引腳的初始化和狀態(tài)設(shè)置;SPI通信的初始化必須按照LCD驅(qū)動芯片ILI9341設(shè)定的時序進行。根據(jù)ILI9341參考手冊[12],該芯片使用的是數(shù)據(jù)發(fā)送低電平空閑,上升沿取數(shù)模式,對應(yīng)的時鐘極性CPOL及相位CPHA選擇均為0,因此將引腳初始化和SPI構(gòu)件初始化如下:

GPIO_init(LCD_RS,1,0);

GPIO_init(LCD_DC,1,0);

SPI_init(SPI_0,1,6000,0,0);

說明:GPIO_init是GPIO構(gòu)件初始化函數(shù),分別將LCD_RS和LCD_DC設(shè)置為輸出引腳,默認值為低電平。SPI_init 為構(gòu)件初始化函數(shù),參數(shù)SPI_0為0號SPI模塊;1為MCU為通信主機;6000為通信波特率;最后兩個參數(shù) 0、0分別為時鐘極性及相位。這些通信的關(guān)鍵要素必須在文檔中交代清楚,以便移植時參考。終端構(gòu)件在移植時,除了引腳連接和宏定義映射外,作為功能實現(xiàn)的基礎(chǔ),驅(qū)動構(gòu)件的通信函數(shù)是極為關(guān)鍵的,必須予以高度重視。

(2)中上層功能函數(shù)設(shè)計

有了底層通信函數(shù)作為基礎(chǔ),其他中上層功能函數(shù)就可實現(xiàn)具體功能,例如LCD的初始化函數(shù)、LCD顯示區(qū)域設(shè)置函數(shù)等都是對ILI9341寄存器一系列的設(shè)置,過程相對比較復(fù)雜,但是每一種模式通常都遵循固定的順序步驟,需根據(jù)ILI9341參考手冊調(diào)用底層通信函數(shù)LCD_wr_reg等對寄存器進行一系列的設(shè)置,設(shè)計時將具體的步驟封裝,對外屏蔽其復(fù)雜的寫寄存器操作,必要時通過參數(shù)設(shè)置入口,開發(fā)人員只需調(diào)用即可,該類函數(shù)借助通信函數(shù)實現(xiàn)其操作與構(gòu)件底層通信無關(guān),易于復(fù)用和移植。下面是兩個常用功能函數(shù)樣例:

void LCD_Init(void); //LCD構(gòu)件初始化

void LCD_AreaSet(uint_16 x1,uint_16 y1,uint_16 x2,uint_16 y2);

//顯示區(qū)域設(shè)置

其中,LCD_AreaSet函數(shù)中x1、y1和x2、y2是確定顯示矩形區(qū)域的對角線兩點坐標值。

LCD具體應(yīng)用功能(如畫點、畫線、畫圈、顯示文字、顯示圖像等)需要綜合考慮,如何進行封裝和設(shè)計,方便用戶使用。鑒于篇幅,下面以顯示圖像函數(shù)LCD_ShowImage為例進行說明。顯示圖像通常需要知道顯示位置、圖像尺寸和圖像的點陣信息,因此LCD_ShowImage函數(shù)可設(shè)計如下:

void LCD_ShowImage (uint_16 x,uint_16 y,uint_16 width,uint_16 height,uint_8 *image);

其中,x、y是圖片顯示的起始坐標,width 和height分別為圖像的寬度和高度,image則為存儲圖像的點陣信息數(shù)組首地址。函數(shù)內(nèi)部也是通過調(diào)用通信函數(shù)來實現(xiàn)圖像的顯示,用戶無需知道細節(jié),只需知道參數(shù)意義即可進行調(diào)用。

在LCD驅(qū)動構(gòu)件函數(shù)層次中,中上層功能函數(shù)在移植時基本無需改動,可看作驅(qū)動構(gòu)件的通用層。移植的關(guān)鍵在于MCU頭文件和構(gòu)件的底層通信函數(shù),因此這部分可看作是LCD構(gòu)件的適配層。LCD構(gòu)件驅(qū)動程序?qū)哟渭昂瘮?shù)關(guān)系如圖4所示。

圖4 LCD構(gòu)件驅(qū)動程序?qū)哟文P?/p>

4.5 LCD構(gòu)件可移植性度量分析

一個構(gòu)件的可移植性高低可以采用軟件可移植性度量進行分析。下面分別利用基于移植成本和移植工作量兩種可移植性度量模式[13]對LCD構(gòu)件進行可移植度量分析。

(1)基于移植成本度量

該度量模式基于軟件的可移植性和開發(fā)成本之間的關(guān)系來衡量可移植性程度,可使用下式:

其中,DP表示可移植性大小,COSTport表示軟件的移植成本,COSTredevelop表示軟件重新開發(fā)的成本,DP越大表示軟件的可移植性越高。從復(fù)用和移植步驟可以看出,在新系統(tǒng)移植時,LCD構(gòu)件只需修改適配層的引腳定義和通信函數(shù),其他功能則基本不需改動,反映到成本上,COSTport遠遠小于COSTredevelop。因此,LCD構(gòu)件從成本角度看可移植性較高。

(2)基于移植工作量度量

該度量模式通過與移植環(huán)境相關(guān)的靜態(tài)指標(如代碼修改量、移植耗時等)來衡量可移植性高低。如上文所述,LCD構(gòu)件嚴格按照構(gòu)件概念模型設(shè)計,代碼具有模塊化、層次化的特征。移植新系統(tǒng)時,需要修改的僅僅是頭文件的引腳定義和源文件中通信函數(shù)的重寫,除特殊情況外,其他部分基本不需改動,而且LCD構(gòu)件有規(guī)范的注釋和移植說明、注意事項等文檔作為移植參考。經(jīng)實驗室測試,在新購的TFTLCD構(gòu)件代碼零亂、沒有相關(guān)參考文檔的情況下,移植成功花費了大約兩天時間,而經(jīng)過本文封裝形成規(guī)范的TFTLCD構(gòu)件,交付給另一個沒有參與設(shè)計且技術(shù)水平相當?shù)娜藛T,在基于不同型號的核心構(gòu)件系統(tǒng)中進行移植花費時間僅約3小時,大大提高了效率,且運行更加穩(wěn)定可靠。測試說明按照本文提出規(guī)范設(shè)計面向應(yīng)用對象的終端構(gòu)件具有良好的可復(fù)用可移植性。

結(jié) 語

猜你喜歡
原理圖嵌入式構(gòu)件
淺談STM32核心板原理圖設(shè)計
電路原理圖自動布圖系統(tǒng)的設(shè)計與實現(xiàn)
基于Protel DXP 2004層次原理圖的設(shè)計
搭建基于Qt的嵌入式開發(fā)平臺
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
建筑構(gòu)件
建筑構(gòu)件
建筑構(gòu)件
建筑構(gòu)件
Altera加入嵌入式視覺聯(lián)盟
台前县| 新闻| 读书| 二手房| 尼勒克县| 巴楚县| 乐安县| 平度市| 永康市| 稻城县| 马公市| 团风县| 饶阳县| 丹江口市| 都江堰市| 班戈县| 综艺| 泊头市| 丰城市| 金乡县| 阆中市| 黄龙县| 扶绥县| 嘉荫县| 社会| 那曲县| 邹平县| 土默特右旗| 湘乡市| 洪洞县| 英山县| 滦南县| 防城港市| 左权县| 芜湖市| 巫溪县| 礼泉县| 高陵县| 离岛区| 张家口市| 颍上县|