新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430中的_EINT、_BIS_SR、_NOP的使用

MSP430中的_EINT、_BIS_SR、_NOP的使用

作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
剛開始學(xué)習(xí)MSP430,用的是IAR5.4。照著參考書上例子寫了第一個(gè)程序。如下:

本文引用地址:http://m.butianyuan.cn/article/201611/321422.htm

#include "io430.h"
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDT_ADLY_250;
IE1 |= WDTIE;
P1DIR |= 0X01;
_EINT();

for(;;)
{
_BIS_SR(LPM3_bits);
_NOP();
}

}

#pragma vector =WDT_VECTOR
__interrupt void watchdog_timer(void)
{
P1OUT ^= 0X01;
}

但make后報(bào)錯(cuò)如下:

Undefined external"_EINT" referred in "main"

Undefined external"_BIS_SR" referred in "main"

Undefined external"_NOP" referred in "main"

意思應(yīng)該是"_EINT"、"_BIS_SR"、"_NOP"沒有被定義。猜到應(yīng)該是相關(guān)為文件沒有被包含進(jìn)來的原因。于是上網(wǎng)查找后找到了原因:

如果你在IAR中添加入軟件自帶的例程(右鍵——Add Files,路徑一般為C:Program FilesIAR SystemsEmbedded Workbench 6.0 Evaluation430FET_examplesFET_examples,大同小異)并打開會(huì)發(fā)現(xiàn),例程的開始并不是#include "io430.h",而是#include "msp430.h",并有一個(gè)"in430.h"一同包含進(jìn)來。打開"in430.h"后就找到了上述三個(gè)宏定義:

#define _EINT() __enable_interrupt()

__intrinsic unsigned short _BIS_SR_IRQ(unsigned short);

#define _NOP() __no_operation()

所以,將原程序的#include "io430.h"改為#include "msp430.h",再make就沒有錯(cuò)誤了。

或者,不替換#include "io430.h",而是在后面添加#include "in430.h",程序也會(huì)順利通過的。

若有欠妥之處,還望批評指正,共同進(jìn)步。



關(guān)鍵詞: MSP430EINTBIS_SRNO

評論


技術(shù)專區(qū)

關(guān)閉