www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導讀]如何使用AVR-GCC編譯軟件

安裝GNU C for AVR

一.執(zhí)行安裝程序

二.生成鏈接用的庫文件

$(AVR)表示安裝的根目錄。(在本人系統(tǒng)里為f:\avrgCC)

生成庫文件關(guān)鍵是要運行位于$(AVR)下的RUN.BAT。原程序如下:

@echo off

if NOT %AVR%!==! goto install

rem set environment variables

set AVR=f:\AVRGCC

set CC=avr-gcc

set PATH=.;f:\AVRGCC\bin;%path%

doskey

:install

if %1!==! GOTO end

rem install libc

cd f:\AVRGCC\lib\avr-libc-20010701\SRC

rem first win32_make_dirs will make some errors(I don’t know why?)

make -f makefile-win32 win32_make_dirs

make -f makefile-win32

make -f makefile-win32 install

make -f makefile-win32 clean

:end

f:

cd f:\AVRGCC

mode con: lines=43

要修改為:

@echo off

if NOT %AVR%!==! goto install

rem set environment variables

set AVR=f:\AVRGCC

set CC=avr-gcc

rem set PATH=.;f:\AVRGCC\bin;%path%

doskey

:install

rem if %1!==! GOTO end

rem install libc

cd f:\AVRGCC\lib\avr-libc-20010701\src

rem first win32_make_dirs will make some errors(I don’t know why?)

f:\AVRGCC\bin\make -f makefile-win32 win32_make_dirs

f:\AVRGCC\bin\make -f makefile-win32

f:\AVRGCC\bin\make -f makefile-win32 install

f:\AVRGCC\bin\make -f makefile-win32 clean

:end

f:

cd f:\AVRGCC

mode con: lines=43

在以后的應用中,運行的是修改之前的RUN.BAT,但要去掉rem if %1!==! GOTO end

的“rem”。去掉“rem”之后,后續(xù)的語句將被跳過。因此MAKE部分的“f:\AVRGCC\bin\”可加可不加。

編譯和鏈接應用程序

首先在 www.pICavr.com 上下載測試程序集gcctest.zip,然后安裝。

1. 將GCCTEST\INCLUDE下的MAKE1、MAKE2拷貝到$(AVR)\ INCLUDE

2. 將工作目錄的MAKEFILE

(每個工程都要有一個此文件,且可由自己進行修改以適合自己的應用。如果要利用原有文件,則注意只能有一個C文件)中的MCU、TRG、SRC、ASRC、INC、LIB等項填入合適的內(nèi)容

3.

在工作目錄運行位于$(AVR)\BIN下的MAKE.EXE(注意:由于系統(tǒng)可能存在其他應用程序的MAKE,因此可能還需要加路徑。也可以將其改名。)

4. 從MAKE1、MAKE2和MAKEFILE可以看出,用戶可以修改諸如輸出文件名等多種選項。

在C代碼中嵌入?yún)R編指令

一.GCC的ASM聲明

首先看一個從PORTD讀入數(shù)據(jù)的例子:

asm(“in %0, %1” : “=r”(value) : “I”(PORTD) : );

由上可以看出嵌入?yún)R編的4個部分:

1. 匯編指令本身,以字符串“in %0, %1”表示;

2. 由逗號分隔的輸出操作數(shù),本例為“=r”(value)

3. 由逗號分隔的輸入操作數(shù),本例為“I”(PORTD)

4. Clobber寄存器

嵌入?yún)R編的通用格式為:

asm(code : output operand list : input operand list : clobber list);

例子中%0表示第一個操作數(shù),%1表示第二個操作數(shù)。即:

%0  “=r”(value)

%1  “I”(PORTD)

如果在后續(xù)的C代碼中沒有使用到匯編代碼中使用的變量,則優(yōu)化編譯時會將這些語句刪除。為了防止這種情況的發(fā)生,需要加入volatile屬性:

asm volatile (“in %0, %1” : “=r”(value) : “I”(PORTD) : );

嵌入?yún)R編的的Clobber寄存器部分可以忽略,而其他部分不能忽略,但可以為空。如下例:

asm volatile(“cli” : :);

二.匯編代碼

用戶可以在C代碼里嵌入任意的匯編指令,就如同在匯編器里寫程序一樣。AVR-GCC提供了一些特殊的寄存器名稱:

符號寄存器

__SREG__狀態(tài)寄存器SREG(0x3F)

__SP_H__堆棧指針高字節(jié)(0x3E)

__SP_L__堆棧指針低字節(jié)(0x3D)

__tmp_reg__r0

__zero_reg__r1。對于C代碼而言其值永遠為0

三.輸入/輸出操作數(shù)

約束符號適用于范圍

a r16~r23

b指針Y,Z

d r16~r31

e指針X,Y,Z

G浮點常數(shù)0.0

I6比特正常數(shù)0~63

J6比特負常數(shù)-63~0

l r0~r15

M8比特正常數(shù)0~255

N整數(shù)常數(shù)-1

O整數(shù)常數(shù)8,16,24

P整數(shù)常數(shù)1

r r0~r31

t R0

W寄存器對r24,r26,r28,r30

X指針Xr27:r26

Y指針Yr29:r28

Z指針Zr31:r30

要注意的是,在使用這些約束符號時要防止選擇錯誤。例如,用戶選擇了”r”約束符號,而匯編語句則使用了”ori”。編譯器可以在r0~r31之間任意選擇寄存器。若選擇了r2~r15,則會由于不適用ori而出現(xiàn)編譯錯誤。此時正確的約束符應該是”d”。

約束符號還可以有前置修飾符,如下表所示。

修飾符指定

=只寫操作數(shù)

+讀-寫操作數(shù)(嵌入?yún)R編不支持)

&寄存器只能用做輸出

輸出操作數(shù)必須為只寫操作數(shù),C表達式結(jié)果必須為l(r0~r15)。編譯器不檢查匯編指令中的變量類型是否合適。

輸入操作數(shù)為只讀。如果輸入/輸出使用同一個寄存器怎么辦呢?此時可以在輸入操作數(shù)的約束字符里使用一個一位數(shù)字來達到這個目的。這個數(shù)字告訴編譯器使用與第n個(從0開始計數(shù))操作數(shù)相同的寄存器。例如:

asm volatile(“SWAP %0” : “=r”(value) : “0”(value));

這條語句的目的是交換變量value的高低4位。約束符號“0”告訴編譯器使用與第一個操作數(shù)相同的寄存器作為輸入寄存器。要注意的是,即使用戶沒有指定,編譯器也有可能使用相同的寄存器作為輸入/輸出。在某些情況下會引發(fā)嚴重的問題。如果用戶需要區(qū)分輸入/輸出寄存器,則必須為輸出操作數(shù)增加修飾符”&”。如下例所示。

asm volatile(“in %0, %1;

out %1, %2”

: “=&r”(input)

: “I”(port), “r”(output)

);

此例的目的是讀入端口數(shù)據(jù),然后給端口寫入另一個數(shù)據(jù)。若編譯器不幸使用了同一個寄存器作為參數(shù)input和output存儲位置,則第一條指令執(zhí)行后output的內(nèi)容就被破壞了。而用了修飾符”&”之后,這個問題得以解決。

下面為一個高16位與低16位交換的32位數(shù)據(jù)操作的例子:

asm volatile(“ MOV __tmp_reg__, %A0;

MOV %A0, %D0;

MOV %D0, __tmp_reg__;

MOV __tmp_reg__, %B0;

MOV %B0, %C0;

MOV %C0, __tmp_reg__”

: “=r”(value)

: “0”(value)

)

31………………2423………………1615………………87…………………0

DCBA

四.Clobber

如前所示,asm語句的最后一部分為clobber。如果用戶在匯編代碼里使用了沒有作為操作數(shù)聲明的寄存器,就需要在clobber里聲明以通知編譯器。下面為一個中斷無關(guān)的加一操作例子。

asm volatile(“cli;

ld r24, %a0;

inc r24;

st %a0, r24;

sei”

:

:”z”(ptr)

:”r24”

)

編譯結(jié)果為:

CLI

LD R24, Z

INC R24

ST Z, R24

SEI

當然,用戶也可以用__tmp_reg__來取代r24。此時就沒有clobber寄存器了。

下面為考慮更詳細的例子:

c_func

{

uint_t s;

asm volatile(“in %0, __SREG__;

cli;

ld, __tmp_reg__, %a1;

inc __tmp_reg__;

st %a1, __tmp_reg__;

out __SREG__, %0”

: “=r”(t)

:”z”(ptr)

);

}

現(xiàn)在看起來好象沒問題了。其實不盡然。由于優(yōu)化的原因,編譯器不會更新C代碼里其他使用這個數(shù)值的寄存器。出于同樣的優(yōu)化原因,上述代碼的輸入寄存器可能保持的不是當前最新的數(shù)值。用戶可以加入特殊的”memory”

clobber來強迫編譯器及時更新所有的變量。

更好的方法是將一個指針聲明為volatile,如下所示:

volatile uint8_t *ptr;

這樣,一旦指針指向的變量發(fā)生變化,編譯器就會重新加載最新的數(shù)值。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉