新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430 單片機(jī)C語(yǔ)言和匯編語(yǔ)言混合編程

MSP430 單片機(jī)C語(yǔ)言和匯編語(yǔ)言混合編程

作者: 時(shí)間:2012-03-19 來(lái)源:網(wǎng)絡(luò) 收藏

3

明確了以上約定,就非常容易?;咀龇ㄊ牵?br /> (1)C源文件用‘extren’關(guān)鍵字導(dǎo)入被源文件導(dǎo)出的標(biāo)號(hào)。
(2)源文件用‘PUBLIC’關(guān)鍵字把標(biāo)號(hào)導(dǎo)出給C語(yǔ)言源文件。
(3)源文件用‘EXTREN’關(guān)鍵字導(dǎo)入被C語(yǔ)言源文件導(dǎo)出的標(biāo)號(hào)。
(4)C語(yǔ)言源文件把標(biāo)號(hào)導(dǎo)出給匯編語(yǔ)言文件,則不需要關(guān)鍵字。
(5)把寫(xiě)好的C語(yǔ)言源文件和匯編語(yǔ)言源文件加入工程,并用各自調(diào)用函數(shù)的指令調(diào)用即可。

4 應(yīng)用實(shí)例

4.1 C 語(yǔ)言函數(shù)和匯編語(yǔ)言函數(shù)相互調(diào)用

在這個(gè)示例中C語(yǔ)言函數(shù)main()調(diào)用匯編語(yǔ)言函數(shù)get_rand()以得到一個(gè)隨機(jī)數(shù);匯編語(yǔ)言函數(shù)get_rand()首先調(diào)用C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)函數(shù)rand()得到一個(gè)整型隨機(jī)值,然后用調(diào)用C語(yǔ)言函數(shù)mult()的方法把這個(gè)隨機(jī)值乘以main()函數(shù)傳遞給自己的實(shí)參,并把乘積值返回給 main()函數(shù)。

4.1.1 C語(yǔ)言源文件
/**************************************************************/
/* 文件名:c_source.c 2003-01-05 */
/* C語(yǔ)言和匯編語(yǔ)言,C源程序 */
/* 這段源程序調(diào)用匯編語(yǔ)言函數(shù)get_rand() */
/* 注意工程必需包含匯編語(yǔ)言源文件 asm_source.s43 */
/**************************************************************/
#include x14x.h> /* 頭文件 */
extern unsigned long get_rand(unsigned char seed); /* 匯編語(yǔ)言函數(shù)原型聲明 */
/****************************************************************/
/* 主函數(shù) */
/****************************************************************/
void main( void )
{
unsigned char seed; /* 局部變量定義*/
unsigned long value;
// === 系統(tǒng)初始化 ==========================================
IFG1 = 0; /* 清除中斷標(biāo)志1 */
WDTCTL = WDTPW+WDTHOLD; /* 停止看門(mén)狗 */
P1DIR = 0xff;
// === 系統(tǒng)初始化結(jié)束========================================

seed = 0x55;
value = get_rand(seed); /* 調(diào)用匯編語(yǔ)言函數(shù)get_rand()得到一個(gè)隨機(jī)數(shù) */
while(1); /*程序結(jié)束*/
}
// === 主程序結(jié)束 ==================================================
/******************************************************************/
/* 乘法子程序,供匯編語(yǔ)言函數(shù)調(diào)用 */
/******************************************************************/
unsigned long mult(int x , int y)
{
return (x *y); /*x乘y */
}
// === 乘法子程序結(jié)束 ================================================

c語(yǔ)言相關(guān)文章:c語(yǔ)言教程




評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉