IAR #pragma vector


   在IAR編譯器里用關鍵字來__interrupt來定義一個中斷函數。用#pragma vector來提供中斷函數的入口地址。

#pragma vector = 0x12    //定時器0溢出中斷入口地址 __interrupt void time0(void) { ; }    上面的入口地址寫成#pragma vector=TIMER0_OVF_vect更直觀,每種中斷的入口地址在頭文件里有描述。函數名稱time0可以為任意名稱。中斷函數會自動保護局部變量,但不會保護全局變量。

1 .內在函數也可以稱為本征函數         編譯器自己編寫的能夠直接訪問處理器底層特征的函數。在intrinsics.h中有描述完整類型在comp_a90.h里有進一步的簡化書寫方式

延時函數,以周期為標准         __delay_cycles(unsigned long );         如果處理器頻率為1M,延時100us,如下:         __delay_cycles(100 );         當然你也可以對該函數進行修改:         #define CPU_F 1000000         #define delay_us (unsigned long) __delay_cycles((unsigned long )*CPU_F)         #define delay_ms (unsigned long) __delay_cycles((unsigned long )*CPU_F/1000)

2.中斷指令   __disable_interrupt( );//插入CLI指令, 也可以用_CLI();也可以SREG_Bit7=0;    __enable_interrupt( );// 插入SEI指令,也可以用_SEI();也可以SREG_Bit7=1;    其實對於狀態字的置位和清零只有BSET S 和BCLR S兩條指令。像SEI不過是BSET 7;的另一個名字而已。AVR指令中還有很多類似的現象,如:ORI 和 SBR 指令完全一樣,號稱130多條指令的AVR其實沒有那么多指令的。

3.從FLASH空間指定地址讀取數據 __extended_load_program_memory(unsigned char __farflash *); __load_program_memory(unsigned char __flash *);

4.乘法函數 __fracdtional_multiply_signed(signed char, signed char); __fractional_multiply_signed_with_unsigned(signed char, unsigned char); __fractional_multiply_unsigned(unsigned char, unsigned char); //以上為定點小數乘法 __multiply_signed(signed char, signed char);//有符號數乘法 __multiply_signed_with_unsigned(signed char, unsigned char); //有符號數和無符號數乘法 __multiply_unsigned(unsigned char, unsigned char);//無符號數乘法

5.半字節交換指令 __swap_nibbles(unsigned char);

6.MCU控制指令 __no_operation();//空操作指令 _NOP(); __sleep();//休眠指令 _SLEEP(); __watchdog_reset();//看門狗清零 _WDR();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM