<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 【IAR學(xué)習(xí)】學(xué)習(xí)筆記

          【IAR學(xué)習(xí)】學(xué)習(xí)筆記

          作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏

          5.2.1定義沒有存儲(chǔ)特性的絕對地址變量必須加__no_init 或者const對象特性

          __no_init char t @ 0x65;//定義在I/O地址以外
          const char t @ 0x65;//定義只讀變量的地址

          例:

          #i nclude
          __no_init char u @ 0x65 ;
          void main(void)
          {u++;}

          對應(yīng)匯編:

          void main(void)
          main:
          {u++;}
          00000000 E6E5 LDI R30, 101
          00000002 E0F0 LDI R31, 0
          00000004 8100 LD R16, Z
          00000006 9503 INC R16
          00000008 8300 ST Z, R16
          0000000A 9508 RET

          5.2.2帶存儲(chǔ)特性的關(guān)鍵字定義變量的絕對地址__io,__ext_io定義變量在i/o空間

          #i nclude
          __io char u @ 0x65 ;
          void main(void)
          {u++;}

          對應(yīng)匯編:

          void main(void)
          main:
          {u++;}
          00000000 91000065 LDS R16, 101
          00000004 9503 INC R16
          00000006 93000065 STS 101, R16
          0000000A 9508 RET

          從5.2.1和5.2.2對比,發(fā)現(xiàn)用5.2.2方法定義代碼小多了。

          5.3.關(guān)鍵字volatile保證從最原始的位置讀取變量。在IAR編譯器里,除了__no_init和__root定義的變量外,其他的類型的變量都包含有volatile和__no_init特性

          IAR for AVR 學(xué)習(xí)筆記(6)--中斷及相關(guān)函數(shù)操作

          6.1.中斷函數(shù):

          在IAR編譯器里用關(guān)鍵字來__interrupt來定義一個(gè)中斷函數(shù)。用#pragma vector來提供中斷函數(shù)的入口地址

          #pragma vector=0x12//定時(shí)器0溢出中斷入口地址
          __interrupt void time0(void)
          {
          ;
          }

          上面的入口地址寫成#pragma vector=TIMER0_OVF_vect更直觀,每種中斷的入口地址在頭文件里有描述。函數(shù)名稱time0可以為任意名稱。中斷函數(shù)會(huì)自動(dòng)保護(hù)局部變量,但不會(huì)保護(hù)全局變量。

          6.2.內(nèi)在函數(shù)也可以稱為本征函數(shù)

          編譯器自己編寫的能夠直接訪問處理器底層特征的函數(shù)。在intrinsics.h中有描述完整類型在comp_a90.h里有進(jìn)一步的簡化書寫方式

          6.2.1延時(shí)函數(shù),以周期為標(biāo)準(zhǔn)

          __delay_cycles(unsigned long );

          如果處理器頻率為1M,延時(shí)100us,如下:

          __delay_cycles(100 );

          當(dāng)然你也可以對該函數(shù)進(jìn)行修改:

          #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)

          6.2.2中斷指令

          __disable_interrupt( );//插入CLI指令, 也可以用_CLI();也可以SREG_Bit7=0;
          __enable_interrupt( );// 插入SEI指令,也可以用_SEI();也可以SREG_Bit7=1;

          其實(shí)對于狀態(tài)字的置位和清零只有BSET S 和BCLR S兩條指令。像SEI不過是BSET 7;的另一個(gè)名字而已。AVR指令中還有很多類似的現(xiàn)象,如:ORI 和 SBR 指令完全一樣,號稱130多條指令的AVR其實(shí)沒有那么多指令的。

          6.2.3從FLASH空間指定地址讀取數(shù)據(jù)

          __extended_load_program_memory(unsigned char __farflash *);
          __load_program_memory(unsigned char __flash *);

          該條指令以及正確的使用方法在4.5.flash 操作宏函數(shù)里詳細(xì)講解,這里不再重復(fù)

          6.2.4乘法函數(shù)

          __fracdtional_multiply_signed(signed char, signed char);
          __fractional_multiply_signed_with_unsigned(signed char, unsigned char);
          __fractional_multiply_unsigned(unsigned char, unsigned char);
          //以上為定點(diǎn)小數(shù)乘法
          __multiply_signed(signed char, signed char);//有符號數(shù)乘法
          __multiply_signed_with_unsigned(signed char, unsigned char);
          //有符號數(shù)和無符號數(shù)乘法
          __multiply_unsigned(unsigned char, unsigned char);//無符號數(shù)乘法

          6.2.4 半字節(jié)交換指令

          __swap_nibbles(unsigned char);

          6.2.5 MCU控制指令

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

          IAR for AVR 學(xué)習(xí)筆記(7)--頭文件含義

          avr_macros.h里面包含了讀寫16位寄存器的簡化書寫,和幾個(gè)位操作函數(shù)

          comp_a90.h對大量的內(nèi)在函數(shù)做了簡要書寫

          ina90.h包含"inavr.h" "comp_A90.h"文件

          intrinsics.h內(nèi)在函數(shù)提供最簡單的操作處理器底層特征。休眠,看門狗,F(xiàn)LASH函數(shù)。

          iomacro.H I/O寄存器定義文件樣本。

          iom8.h 包含I/O等寄存器定義

          IAR for AVR 學(xué)習(xí)筆記(8)--匯編嵌入方式

          嵌入?yún)R編語言

          在線匯編:使用asm或者_(dá)_asm,推薦使用__asm。

          #i nclude
          void main()
          {
          asm("NOP "
          "CLH "
          "OR R16,R17 ");
          }

          不過IAR提供了完全可以訪問底層的函數(shù),建議不要頻繁使用匯編


          上一頁 1 2 3 下一頁

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();