Hallo zusammen, ich bins eben nochmal.
Nach dem ich etwas mit dem Programm gearbeitet habe, habe ich einen kleinen aber doch nicht unerheblichen Bugreport zu machen. Ich habe mir den Linker etwas angesehen.
Es gibt den Parameter:
Das sollte meiner Meinung nach heissen:
Korrigiert mich wenn ich falsch liege.
Aber was viel wichtiger ist: Wenn man Trigonometrische Funktionen verwendet, dann will der Linker nicht.
Bug:
Code:
avr-gcc -mmcu=atmega32 -o project.out -Wl,-Map=project.map -Wl,-lm ad.o main.o motor.o pwm.o uart.o
/usr/lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/libc.a(fmod.o): In function `fmod':
/var/tmp/cross/avr/portage/avr-libc-1.4.4/work/avr-libc-1.4.4/libm/fplib/fmod.S:72: relocation truncated to fit: R_AVR_13_PCREL against symbol `__divsf3' defined in .text section in /usr/lib/gcc/avr/3.4.6/avr5/libgcc.a(_div_sf.o)
/var/tmp/cross/avr/portage/avr-libc-1.4.4/work/avr-libc-1.4.4/libm/fplib/fmod.S:80: relocation truncated to fit: R_AVR_13_PCREL against symbol `__mulsf3' defined in .text section in /usr/lib/gcc/avr/3.4.6/avr5/libgcc.a(_mul_sf.o)
/usr/lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/libc.a(fp_cosinus.o): In function `__fp_cosinus':
/var/tmp/cross/avr/portage/avr-libc-1.4.4/work/avr-libc-1.4.4/libm/fplib/fp_cosinus.S:76: relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3' defined in .text section in /usr/lib/gcc/avr/3.4.6/avr5/libgcc.a(_addsub_sf.o)
/var/tmp/cross/avr/portage/avr-libc-1.4.4/work/avr-libc-1.4.4/libm/fplib/fp_cosinus.S:91: relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3' defined in .text section in /usr/lib/gcc/avr/3.4.6/avr5/libgcc.a(_addsub_sf.o)
/usr/lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/libc.a(modf.o): In function `modf':
/var/tmp/cross/avr/portage/avr-libc-1.4.4/work/avr-libc-1.4.4/libm/fplib/modf.S:80: relocation truncated to fit: R_AVR_13_PCREL against symbol `__fixsfsi' defined in .text section in /usr/lib/gcc/avr/3.4.6/avr5/libgcc.a(_sf_to_si.o)
/var/tmp/cross/avr/portage/avr-libc-1.4.4/work/avr-libc-1.4.4/libm/fplib/modf.S:81: relocation truncated to fit: R_AVR_13_PCREL against symbol `__floatsisf' defined in .text section in /usr/lib/gcc/avr/3.4.6/avr5/libgcc.a(_si_to_sf.o)
/var/tmp/cross/avr/portage/avr-libc-1.4.4/work/avr-libc-1.4.4/libm/fplib/modf.S:93: relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3' defined in .text section in /usr/lib/gcc/avr/3.4.6/avr5/libgcc.a(_addsub_sf.o)
/usr/lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/libc.a(sin.o): In function `sin':
/var/tmp/cross/avr/portage/avr-libc-1.4.4/work/avr-libc-1.4.4/libm/fplib/sin.S:71: relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3' defined in .text section in /usr/lib/gcc/avr/3.4.6/avr5/libgcc.a(_addsub_sf.o)
Eigentlich mache ich das fast genauso in meinen Makefiles, nur das die Reihenfolge etwas anders ist. Und dann funktioniert es auf einmal. Ich weiß selbst nicht so genau wieso, aber hier mein workaround:
File klavrgcccompiler.cpp:
Code:
QString KLAVRGCCCompiler::getLinkerCommand( )
{
QString retVal = m_project->m_settings[ PRJ_LINKER_COMMAND ];
KLDocument *it;
// First, save all of them:
QPtrList< KLDocument > list = m_project->getAllDocsOfType( KLDocType_Source );
for ( it = list.first(); it; it = list.next() )
{
retVal += " " + m_project->getObjectFileNameFor( it->url() );
}
retVal += " -mmcu=" + m_project->currentCpuFeatures().mmcuFlag();
retVal += m_project->attribute( "-g", PRJ_COMPILER_GDEBUG, true );
retVal += m_project->attributeLinkerSection( "-Wl,-Ttext=0x",
PRJ_LINKER_START_TEXT );
retVal += m_project->attributeLinkerSection( "-Wl,-Tdata=0x",
PRJ_LINKER_START_DATA );
retVal += m_project->attributeLinkerSection( "-Wl,-Tbss=0x",
PRJ_LINKER_START_BSS );
retVal += m_project->attributeLinkerSection( "-Wl,--defsym=__heap_start=0x",
PRJ_LINKER_START_HEAP );
retVal += m_project->attributeLinkerSection( "-Wl,--defsym=__heap_end=0x",
PRJ_LINKER_END_HEAP );
retVal += " -o " + m_project->getOUTFileName();
retVal += " -Wl,-Map=" + m_project->getMAPFileName();
QString buf = m_project->conf( PRJ_LINKER_FLAGS, "" ).stripWhiteSpace();
buf.replace( "#", "," );
if ((!buf.isEmpty()) && (!buf.isNull()))
retVal += " " + buf;
return retVal;
}
Das sind keine großen Änderungen, aber dann geht es auch mit sin() und cos() aus der math.h
Ich sage jetz einmal frecherweise: Wie wäre es mit einer v0.7.1, in der diese Änderungen drinnen sind?!
MfG
Jürgen
Lesezeichen