久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6164|回復: 1
打印 上一主題 下一主題
收起左側

stm8的C語言編程-基本程序與啟動代碼分析

[復制鏈接]
跳轉到指定樓層
樓主
stm8C語言編程(1)--基本程序與啟動代碼分析

現在幾乎所有的單片機都能用C語言編程了,采用C語言編程確實能帶來很多好處,至少可讀性比匯編語言強多了。
在STM8的開發環境中,可以通過新建一個工程,自動地建立起一個C語言的框架,生成后開發環境會自動生成2個C語言的程序,一個是main.c,另一個是stm8_interrupt_vector.c。main.c中就是一個空的main()函數,如下所示:

/* MAIN.C file
*
* Copyright (c)2002-2005 STMicroelectronics
*/


main()
{
      while (1);
}

而在stm8_interrupt_vector.c中,就是聲明了對應該芯片的中斷向量,如下所示:
/*    BASICINTERRUPT VECTOR TABLE FOR STM8 devices
*  Copyright (c) 2007 STMicroelectronics
*/

typedef void @far(*interrupt_handler_t)(void);

struct interrupt_vector {
      unsigned char interrupt_instruction;
      interrupt_handler_t interrupt_handler;
};

@far @interrupt voidNonHandledInterrupt (void)
{
      /* in order to detect unexpected events during development,
         it is recommended to set a breakpoint on the following instruction
      */
      return;
}

extern void_stext();     /* startup routine */

struct interrupt_vectorconst _vectab[] = {
      {0x82, (interrupt_handler_t)_stext}, /* reset */
      {0x82, NonHandledInterrupt}, /* trap  */
      {0x82, NonHandledInterrupt}, /* irq0  */
      {0x82, NonHandledInterrupt}, /* irq1  */
      {0x82, NonHandledInterrupt}, /* irq2  */
      {0x82, NonHandledInterrupt}, /* irq3  */
      {0x82, NonHandledInterrupt}, /* irq4  */
      {0x82, NonHandledInterrupt}, /* irq5  */
      {0x82, NonHandledInterrupt}, /* irq6  */
      {0x82, NonHandledInterrupt}, /* irq7  */
      {0x82, NonHandledInterrupt}, /* irq8  */
      {0x82, NonHandledInterrupt}, /* irq9  */
      {0x82, NonHandledInterrupt}, /* irq10 */
      {0x82, NonHandledInterrupt}, /* irq11 */
      {0x82, NonHandledInterrupt}, /* irq12 */
      {0x82, NonHandledInterrupt}, /* irq13 */
      {0x82, NonHandledInterrupt}, /* irq14 */
      {0x82, NonHandledInterrupt}, /* irq15 */
      {0x82, NonHandledInterrupt}, /* irq16 */
      {0x82, NonHandledInterrupt}, /* irq17 */
      {0x82, NonHandledInterrupt}, /* irq18 */
      {0x82, NonHandledInterrupt}, /* irq19 */
      {0x82, NonHandledInterrupt}, /* irq20 */
      {0x82, NonHandledInterrupt}, /* irq21 */
      {0x82, NonHandledInterrupt}, /* irq22 */
      {0x82, NonHandledInterrupt}, /* irq23 */
      {0x82, NonHandledInterrupt}, /* irq24 */
      {0x82, NonHandledInterrupt}, /* irq25 */
      {0x82, NonHandledInterrupt}, /* irq26 */
      {0x82, NonHandledInterrupt}, /* irq27 */
      {0x82, NonHandledInterrupt}, /* irq28 */
      {0x82, NonHandledInterrupt}, /* irq29 */
};
在stm8_interrupt_vector.c中,除了定義了中斷向量表外,還定義了空的中斷服務程序,用于那些不用的中斷。當然在自動建立時,所有的中斷服務都是空的,因此,除了第1個復位的向量外,其它都指向那個空的中斷服務函數。
生成框架后,就可以用Build菜單下的Rebuild All對項目進行編譯和連接,生成所需的目標文件,然后就可以加載到STM8的芯片中,這里由于main()函數是一個空函數,因此沒有任何實際的功能。不過我們可以把這個框架對應的匯編代碼反出來,看看C語言生成的代碼,這樣可以更深入地了解C語言編程的特點。
生成的代碼包括4個部分,如圖1、圖2、圖3、圖4所示。


                        圖1

                        圖2

     

              圖3

               圖4
   圖1顯示的是從內存地址8000H開始的中斷向量表,中斷向量表中的第1行82008083H為復位后單片機運行的第1跳指令的地址。從表中可以看出,單片機復位后,將從8083H開始運行。其它行的中斷向量都指向同一個位置的中斷服務程序80D0H。
   圖2顯示的是3個字節,前2個字節8083H為復位后的第1條指令的地址,第3個字節是一個常量0,后面的啟動代碼要用到。
   圖3顯示的是啟動代碼,啟動代碼中除了初始化堆棧指針外,就是初始化RAM單元。由于目前是一個空的框架,因此在初始化完堆棧指針(設置成0FFFH)后,由于8082H單元的內容為0,因此程序就跳到了80B1H,此處是一個循環,將RAM單元從0到5初始化成0。然后由于寄存器X設置成0100H,就直接通過CALL main進入C的main()函數。
   圖4顯示的是main()函數和中斷服務函數,main()函數對應的代碼就是一個無限的循環,而中斷服務函數就一條指令,即中斷返回指令。

  通過分析,可以看出用C語言編程時,比匯編語言編程時,就是多出了一段啟動代碼。

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:159044 發表于 2016-12-31 23:15 | 只看該作者
6686666
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 韩国理论电影在线 | 5060网一级毛片 | 人人玩人人添人人澡欧美 | 国产精品不卡一区 | 欧美男人亚洲天堂 | 一区二区视频在线 | 一区二区三区久久 | 91国产在线视频在线 | 波多野结衣在线观看一区二区三区 | 国产精品毛片无码 | 精品视频一区二区三区四区 | 亚洲精品91| 欧美一区二区三区的 | 国产.com| 91视频久久久久 | a级在线观看 | 国产成人精品综合 | 真人女人一级毛片免费播放 | 波多野结衣一二三区 | 韩国理论电影在线 | 国产精品永久在线观看 | 成人在线观看免费视频 | 亚洲欧美日韩中文字幕一区二区三区 | 久久久久久久久99精品 | 无码一区二区三区视频 | 免费一级黄| 狠狠干天天干 | 欧美一二区 | 色偷偷噜噜噜亚洲男人 | 国产区第一页 | 嫩草网| 久久影音先锋 | 亚洲一区二区久久 | a级毛片基地 | 国精产品一品二品国精在线观看 | 成人午夜视频在线观看 | 国产精品亚洲欧美日韩一区在线 | 欧美精品第三页 | 欧美日产国产成人免费图片 | 国产一级淫片免费视频 | 婷婷综合色 |