# ## # # # # # ###
_ _ ( ) ( ) | | | | | | | | | (_) | (_____)
#### ## ## ###### ## #####
______ | ___| | |_ | _| | | \_|
_ ( ( /| | \ ( | | \ | | | (\ \) | | | \ | | ) \ | |/ )_)
IMPORTANT: enter the case-INsensitive alphabetic (no numbers) code AND WRITE SOME SHORT summary of changes (below) if you are saving changes. (not required for previewing changes). Wiki-spamming is not tolerated, will be removed, so it does NOT even show up in history. Spammers go away now. Visit Preferences to set your user name Summary of change: This page is '''mostly for developers''', since users normally get the released firmware from GenBoard/UnderDevelopment/FirmwareChanges and use the built vems.hex image. It's assumed you're familiar with GenBoard/FirmWare and acquired a firmware tree that you would like to compile to a binary which can be uploaded to the AVR (GenBoard/Firmware/Upload). To compile the code you will need some easy to install software: * avr-gcc compiler see AtMega/AvrGccFAQ * Perl interpreter, see AtMega/PerlInterpreter ---- * construct a ''my_make'' file ( or edit the one in /doc and move it to /firmware ) * ''mkdir etc/'' * copy appropriate ''*factor.c'' files (conforming to your sensors) to ''etc/'' dir (otherwise the make process will fill in default curves, that might not suit your sensors) * at the DOS prompt start the SH (shell) with: ''sh<enter>'' * and type ''make<enter>'' * you can get back to the DOS prompt with: ''exit<enter>'' . exit will also end a dos prompt. If you don't use sh, you get an error message like this: avr-gcc -c -g -O2 -Wall -Wstrict-prototypes -Wa,-ahlms=megasquirt.lst -mmcu=atmega128 -I. megasquirt.c -o megasquirt.o process_begin: CreateProcess((null), avr-gcc -c -g -O2 -Wall -Wstrict-prototypes -Wa,-ahlms=megasquirt.lst -mmcu=atmega128 -I. megasquirt.c -o megasquirt.o, ... ) failed. make (e=2): The system cannot find the file specified. C:\WINAVR\UTILS\BIN\MAKE.EXE: *** [megasquirt.o] Error 2 USE SH for running MAKE not winblows CMD prompt! I had the same problem for days. When I first tried winavr and makefile from cvs, it worked out of the box. I thought it was something about cygwin (that I later installed) and libraries. I could not sort it for days. One time I tried to run make from sh and hey presto, it worked. (I cannot remember if I ran make from sh the very first time it worked, probably) '''Use sh not cmd.''' Sh is included in the !WinAVR package. When I installed some broken program, it set '''LIB''' variable so the linking failed. After I ''unset LIB'' the compile and linking succeeds. '''Tip for Windows users''' If you have problems with the sh shell under Windows, cmd can be used instead... The only thing you must change after installed !ActivePerl, is the PATH variable. If Perl's folder comes earlier in the PATH, the Perl's 'make' command will be used when you typing make... which causes the famous !CreateProcess error. '''Make sure that your avrlib's 'bin' folder precede the Perl binaries folder in the PATH environment variable!''' ''Win 9x users: take a look to autoexec.bat, Win NT clone users: go to System Properties/Advanced/Environment Variables. Restart required in both cases! Type 'echo %PATH%' to the command prompt if you are not sure!'' Note !!! The famous CreateProcess error happens (at least in Windows boxes) also when there is an syntax bug in 'makefile' located in firmware folder. Like the syntax error in version 1.0.18 (it might be possible that earlier versions also suffers from this same makefile syntax error) firmware makefile has in line: etc/airdenfactor.c: airdenfactor.c correct syntax is etc/airdenfactor.c: When 'makefile' file is corrected, firmware compiles OK from 'CMD' and also 'SH' ----- If you get this kind of error ''... rage.o actuators.o ve.o iac.o keyboard.o lcd.o heap.o eventqueue.o button.o be nchmark.o lcd_display.o injconf.o ignconf.o timing.o kb.o menu.o ringbuf.o phase signal.o ego.o wbo2.o pid.o log.o C:\Program Files\Microsoft Visual Studio\DF98 \IMSL\LIB;C:\Program Files\Microsoft Visual Studio\DF98\LIB;C:\Program Files\Mic rosoft Visual Studio\VC98\LIB -Wl,-Map=megasquirt.map,--cref -mmcu=atmega128 -o megasquirt.elf avr-gcc.exe: C:Program: No such file or directory avr-gcc.exe: FilesMicrosoft: No such file or directory avr-gcc.exe: Visual: No such file or directory avr-gcc.exe: StudioDF98IMSLLIB: No such file or directory C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\make12003.sh: C:Program: command not found C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\make12003.sh: C:Program: command not found ...'' ''Note: you need to '''unset LIB''' in the sh (shell from unixutils). Changing the windows global enviroment varibles didn't work on my win2k Box. So ''unset LIB'' it each time you start the shell. When I figure out a permanent fix I'll post it. (GRMracer)'' ----- another compiling problem.. my_make at http://kombi.ulkhyvlers.net/vems/files f -mmcu=atmega128 -o vems.elf comm.o(.text+0xca6): In function `srl_generic_P_upper': /home/vems/firmware/comm.c:823: undefined reference to `pgm_read_byte_far' make: *** [vems.elf] Error 1 rm injconf.o eventqueue.o spi.o phasesignal.o timing.o benchmark.o ringbuf.o ignconf.o multitooth.o menu.o knock.o The above is related to old avr-libc. Upgrade to newer avr-libc (or winavr). Maybe Mik will commit a small workaround ifdef, but easiest for now seems to just upgrade. > tried to run make. got an error message. at line 33 a personal configuration called 'my_make' is missing. copy it from doc and align it to your needs. It affects how big LCD is used (if any), etc... ----- Perl tips: Get the latest active perl! ----- After you have a vems.hex file you can upload it to a real AtMega128 or simulate under simulavr (linux, gdb, free) or avrstudio (atmel.com free). Check *AtMega/AvrFirmwareUpload, or *AtMega/AvrStudio Optional: Add document to category: Wiki formatting: * is Bullet list ** Bullet list subentry ... '''Bold''', ---- is horizontal ruler, <code> preformatted text... </code> See wiki editing HELP for tables and other formatting tips and tricks.