初次接触GCC因此花费了我不少时间搞了半天加一个晚上终于能编译Word下载.docx

上传人:b****5 文档编号:20375549 上传时间:2023-01-22 格式:DOCX 页数:16 大小:285.20KB
下载 相关 举报
初次接触GCC因此花费了我不少时间搞了半天加一个晚上终于能编译Word下载.docx_第1页
第1页 / 共16页
初次接触GCC因此花费了我不少时间搞了半天加一个晚上终于能编译Word下载.docx_第2页
第2页 / 共16页
初次接触GCC因此花费了我不少时间搞了半天加一个晚上终于能编译Word下载.docx_第3页
第3页 / 共16页
初次接触GCC因此花费了我不少时间搞了半天加一个晚上终于能编译Word下载.docx_第4页
第4页 / 共16页
初次接触GCC因此花费了我不少时间搞了半天加一个晚上终于能编译Word下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

初次接触GCC因此花费了我不少时间搞了半天加一个晚上终于能编译Word下载.docx

《初次接触GCC因此花费了我不少时间搞了半天加一个晚上终于能编译Word下载.docx》由会员分享,可在线阅读,更多相关《初次接触GCC因此花费了我不少时间搞了半天加一个晚上终于能编译Word下载.docx(16页珍藏版)》请在冰豆网上搜索。

初次接触GCC因此花费了我不少时间搞了半天加一个晚上终于能编译Word下载.docx

记住一定要保“.c”的格式,否则没有语法显示。

之后整个界面如下所示:

我所加的代码是我随便找的,代码是马老师的SPI主机的发送和接收一个字节的程序。

(做了一点修改)

代码如下:

#include<

avr/io.h>

stdio.h>

avr/signal.h>

avr/interrupt.h>

//#defineunsignedcharuchar

#defineSIZE100

unsignedcharSPI_rx_buff[SIZE];

unsignedcharSPI_tx_buff[SIZE];

unsignedcharrx_wr_index,rx_rd_index,rx_counter,rx_buffer_overflow;

unsignedchartx_wr_index,tx_rd_index,tx_counter,SPI_ok;

unsignedchart10mscnt;

unsignedchart500mscnt;

unsignedcharsenddata;

voidmcu_ini(void)

{

unsignedchartemp;

cli();

MCUCR=0x00;

//disableallinterrupts

DDRA=0xff;

PORTA=0x00;

DDRC=0xff;

PORTC=0x00;

DDRD=0xff;

PORTD=0x00;

TCCR0=0x00;

//stop

TCNT0=0x06;

//setcount250us

OCR0=0x64;

//setcompare

TCCR0=0x02;

//starttimer

DDRB|=0xBF;

//MISO=inputandMOSI,SCK,SS=output

PORTB|=0x40;

//MISO上拉电阻有效

SPCR=0xD5;

//SPI允许,主机模式,MSB,允许SPI中断,极性方式01,1/16系统时钟速率

SPSR=0x00;

temp=SPSR;

temp=SPDR;

//清空SPI,和中断标志,使SPI空闲

SPI_ok=1;

MCUCR=0x00;

GICR=0x00;

TIMSK=0x01;

//timerinterruptsources

sei();

//re-enableinterrupts

}

//#pragmainterrupt_handlertimer0_ovf_isr:

10

SIGNAL(SIG_OVERFLOW0)

//250us

//reloadcountervalue

if(++t10mscnt>

=40)

{

t10mscnt=0;

if(++t500mscnt>

=50)

{

senddata++;

if(senddata>

=16)

senddata=0;

t500mscnt=0;

}

}

//===========================

//#pragmainterrupt_handlermaster_spi_isr:

11

SIGNAL(SIG_SPI)

{

SPI_rx_buff[rx_wr_index]=SPDR;

//从ISP口读出收到的字节

//SPI空闲

if(++rx_wr_index==SIZE)rx_wr_index=0;

//放入接收缓冲区,并调整队列指针

if(++rx_counter==SIZE)

{

rx_counter=0;

rx_buffer_overflow=1;

//接收缓冲区溢出

}

if(tx_counter)//如果发送缓冲区中有待发的数据tx_counter==0表示没有数据要发送

--tx_counter;

SPDR=SPI_tx_buff[tx_rd_index];

//发送一个字节数据,并调整指针

if(++tx_rd_index==SIZE)

tx_rd_index=0;

SPI_ok=0;

}

//----------------------------------------

unsignedchargetSPIchar(void)

unsignedchardata;

while(rx_counter==0);

//无接收数据,等待

data=SPI_rx_buff[rx_rd_index];

//从接收缓冲区取出一个SPI收到的数据

if(++rx_rd_index==SIZE)

rx_rd_index=0;

//调整指针

cli();

--rx_counter;

returndata;

//------------------------------------------

voidputSPIchar(charc)

while(tx_counter==SIZE);

//发送缓冲区满,等待

if(tx_counter||SPI_ok==0)//发送缓冲区已中有待发数据

{//或SPI正在发送数据时

SPI_tx_buff[tx_wr_index]=c;

//将数据放入发送缓冲区排队

if(++tx_wr_index==SIZE)

tx_wr_index=0;

++tx_counter;

else

SPDR=c;

//发送缓冲区中空且SPI口空闲,直接放入SPDR由SIP口发送

SPI_ok=0;

//

}

//--------------------------------------------

/*voidspi_init(void)

unsignedchartemp;

DDRB|=0xB0;

PORTB|=0xB0;

SPSR=0x80;

}*/

//---------------------------------------------------

intmain(void)

unsignedchari;

i=0;

mcu_ini();

//CLI();

//关中断

//spi_init();

//初始化SPI接口

//SEI();

//开中断

while

(1)

putSPIchar(i);

//发送一个字节

//i++;

putSPIchar(i++);

getSPIchar();

//接收一个字节(第一个字节为空字节)

//………

6、至此代码别写完成,(呵呵,抄来的,别抽我)接下来就要做编译了。

右键点击工程管理窗口的刚才新建的test工程项目,会出现一右键菜单,在点击AddFiles,添加刚才编写的test.c文件。

如果现在就心急就按F5(makeall的快捷方式)去编译的话,恐怕还不行。

否则会出现下面的提示:

出现这样的情况说明还没有完成,还需要下面的操作。

7、要顺利完成编译,还要配置一下makefile,按快捷键F6,或点击桌面(或程序里)Mfile[WinAVR],会弹出makefile文件配置对话框。

如图:

8、接下来就是要配置这个文件了。

1)点击菜单栏的Makefile的按钮,再点击“Mainfilename…”,在出现的对话框里填写test,单击OK.

2)点击Makefile->

MCUtype选择芯片类型,我这里选择了M16。

3)点击Makefile->

Outputfomat输出格式,我选择了默认。

4)点击Makefile->

Optimizationlevel优化级别,选择了默认。

5)点击Makefile->

Debugfomat调试格式,我选择了AVR-ext-COFF(AVRStudio4.07+,VMLAB3.10+)。

因为我要用AVRStudio来进行软件调试和模拟。

6)Makefile菜单下的其它选项我都选择了默认。

特别说明的是Makefile下的C/C++sourcefile(s)….这一项,对只有一个程序文件可以不用管,多个的小弟还没有试。

(^_^)

7)完成这些后就可以保存改makefile文件了,要和test.c保存到同一目录下。

配置makefile至关重要,一般情况下的编译不成功都会与他有关。

9、完成了以上这些,你就可以按F5键了,看看编译的效果吧。

>

"

make.exe"

all

--------begin--------

avr-gcc(GCC)3.4.1

Copyright(C)2004FreeSoftwareFoundation,Inc.

Thisisfreesoftware;

seethesourceforcopyingconditions.ThereisNO

warranty;

notevenforMERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.

Sizebefore:

test.elf:

sectionsizeaddr

.text6120

.data08388704

.bss2118388704

.noinit08388915

.eeprom08454144

.stab17880

.stabstr18700

Total4481

Compiling:

test.c

avr-gcc-c-mmcu=atmega16-I.-gstabs-Os-funsigned-char-funsigned-bitfields-fpack-struct-fshort-enums-Wall-Wstrict-prototypes-Wa,-adhlns=test.lst-std=gnu99-Wp,-M,-MP,-MT,test.o,-MF,.dep/test.o.dtest.c-otest.o

Linking:

test.elf

avr-gcc-mmcu=atmega16-I.-gstabs-Os-funsigned-char-funsigned-bitfields-fpack-struct-fshort-enums-Wall-Wstrict-prototypes-Wa,-adhlns=test.o-std=gnu99-Wp,-M,-MP,-MT,test.o,-MF,.dep/test.elf.dtest.o--outputtest.elf-Wl,-Map=test.map,--cref-lm

CreatingloadfileforFlash:

test.hex

avr-objcopy-Oihex-R.eepromtest.elftest.hex

CreatingloadfileforEEPROM:

test.eep

avr-objcopy-j.eeprom--set-section-flags=.eeprom="

alloc,load"

\

--change-section-lma.eeprom=0-Oihextest.elftest.eep

CreatingExtendedListing:

test.lss

avr-objdump-h-Stest.elf>

CreatingSymbolTable:

test.sym

avr-nm-ntest.elf>

ConvertingtoAVRExtendedCOFF:

test.cof

avr-objcopy--debugging--change-section-address.data-0x800000--change-section-address.bss-0x800000--change-section-address.noinit-0x800000--change-section-address.eeprom-0x810000-Ocoff-ext-avrtest.elftest.cof

Discardinglocalsymboloutsideanycompilationunit:

.do_copy_data_start

.do_copy_data_loop

.do_clear_bss_start

.do_clear_bss_loop

Sizeafter:

.text6140

Total4483

Errors:

none

--------end--------

ProcessExitCode:

0

10、至此我们已成功的编译完成了我们的项目了,Congratulations!

!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1