音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

[轉(zhuǎn)貼]HC08 C語(yǔ)言程序設(shè)計(jì)(5)

作者:JerryBJ 欄目:單片機(jī)
[轉(zhuǎn)貼]HC08 C語(yǔ)言程序設(shè)計(jì)(5)
周末在www.mcu123.com上讀到劉玉宏同志的這篇文章,覺(jué)得寫(xiě)得很好,基本上涵蓋了使用C語(yǔ)言對(duì)HC(S)08微控制器編程的基本知識(shí),推薦給大家。把這篇文章轉(zhuǎn)貼過(guò)來(lái),沒(méi)有經(jīng)過(guò)原文作者和MCU123的允許,希望他們不會(huì)生氣。若作者和MCU123對(duì)此感到不適,請(qǐng)即告知,我們立刻刪除此轉(zhuǎn)貼。原文鏈接如下:
http://www.mcu123.com/news/Article/uc/Motorola/200608/256.html

到此帖完,歡迎大家討論!



HCS08返回值:函數(shù)返回值總是在寄存器中,根據(jù)返回值的類型不同,而采用不同的寄存器

返回值類型
寄存器

CHAR (signed 或 unsigned)
A

int (signed 或 unsigned)
H:X

pointers/arrays(指針/數(shù)組)
H:X

function pointers(函數(shù)指針)
H:X


如果返回值的長(zhǎng)度超過(guò)2字節(jié),則在H:X存放返回值的地址。

例如:寫(xiě)一段C語(yǔ)言源程序,然后把它編譯為匯編語(yǔ)言,觀察調(diào)用規(guī)則

#include <hidef.h> /* 為了包含中斷允許宏定義*/

#include <MC68HC908GP32.h>

unsigned CHAR r;

unsigned CHAR f1(unsigned CHAR v1,unsigned CHAR v2,unsigned CHAR v3,unsigned CHAR v4) {

    v1+=1;

    v2+=1;

    v3+=1;

    v4+=1;

    return(v4);

}

void f0(void) {

       r=f1(4,9,6,3);

   }

void main(void) {

  EnableInterrupts; /*中斷允許 */

              f0();

  for(;;) {

    __RESET_WATCHDOG(); /* 喂狗 */

  }  

}

在C語(yǔ)言源程序中f0函數(shù)調(diào)用f1函數(shù),傳遞參數(shù)并有返回值

函數(shù)f1編譯后的匯編語(yǔ)言

PSHA       ; 有參數(shù)用X、A傳遞,入棧保存防止破壞

PSHX

    TSX         ; X=SP+1

    INC   5,X  ; v1+=1,參數(shù)v1在sp+6處

    INC   4,X  ; v2+=1; 參數(shù)v2在sp+5處

    INC   1,X  ; v3+=1; 參數(shù)v3在A中,被本函數(shù)入棧

   INC   ,X   ; v4+=1; 參數(shù)v4在X中,被本函數(shù)入棧

    LDA   ,X   ; return(v4);返回值在A中

    AIS   #2   ; 調(diào)整堆棧指針,指向返回地址

    RTS   ; 返回f0函數(shù)

函數(shù)f0編譯后的匯編語(yǔ)言

    LDA   #4

    PSHA      ; 參數(shù)v1入棧

    LDA   #9

    PSHA      ; 參數(shù)v2入棧

    LDA   #6  ; 參數(shù)v3用A傳遞

    LDX   #3  ; 參數(shù)v4用X傳遞

    BSR   f1  ; 調(diào)用函數(shù)f1

    AIS   #2  ; 清除傳遞的參數(shù)

    STA   r   ; 保存返回值

    RTS       ; 返回main函數(shù)



Main函數(shù)編譯后的匯編語(yǔ)言

CLI   

BSR   f0

L3:     

STA   _COPCTL

BRA   L3

只要遵循以上調(diào)用規(guī)則,就可以實(shí)現(xiàn)用C函數(shù)和匯編函數(shù)的相互調(diào)用。調(diào)用時(shí)使用對(duì)方定義的函數(shù)名。

16.2.5啟動(dòng)代碼
在啟動(dòng)main函數(shù)之前HCS08 C 語(yǔ)言會(huì)自動(dòng)運(yùn)行一段啟動(dòng)代碼,進(jìn)行硬件初始化和建立C語(yǔ)言的運(yùn)行環(huán)境。起動(dòng)代碼一般由編譯器自動(dòng)生成,也可以由用戶自寫(xiě)的啟動(dòng)代碼替代自動(dòng)生成的啟動(dòng)代碼。啟動(dòng)代碼的名字為start08.c,它的主要工作是:

l         禁止中斷

l         從ROM到RAM復(fù)制并初始化數(shù)據(jù)

l         未初始化的數(shù)據(jù)區(qū)域清零

l         為堆棧分配并初始化堆棧

l         如果用到堆,創(chuàng)建并初始化堆

l         允許中斷

l         調(diào)用main()函數(shù)



參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
[轉(zhuǎn)貼]HC08 C語(yǔ)言程序設(shè)計(jì)(4)
[轉(zhuǎn)貼]HC08 C語(yǔ)言程序設(shè)計(jì)(3)
[轉(zhuǎn)貼]HC08 C語(yǔ)言程序設(shè)計(jì)(1)
各路高手請(qǐng)推薦學(xué)習(xí)MPC852的好資料
冷火系列與ARM系列相比,有那些優(yōu)勢(shì)?
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)