Archive for September 2007

Atmel AVR Device List as of 2007-09-20

Using Pure Bash to Parse Strings

while looking through my snippets for a script to parse a simple “several fields to a line, one record to a line” type of data set, I realized I was probably over engineering the solution, the following is the result of a few whiles playing with a few ideas:
 
 

#!/bin/bash
ITEMS='field 1;field 2;field 3;field 4;field 5'
LEN=${#ITEMS}
while [ "$LEN" -gt "0" ]; do
	echo -------------
	echo ${LEN}
	echo "post:"${ITEMS}
	#get the shortest match from front of the source string
	# by matching the longest from the back of the source string
	THIS_FIELD=${ITEMS%%;*}
	#remove the match from the source string
	ITEMS=${ITEMS:$((${#THIS_FIELD}+1))}
	#calc the length of the source string
	LEN=${#ITEMS}
	#show results
	echo "anno:"${ITEMS}
	echo ${THIS_FIELD}
done

will output:

————-
39
post:field 1;field 2;field 3;field 4;field 5
anno:field 2;field 3;field 4;field 5
field 1
————-
31
post:field 2;field 3;field 4;field 5
anno:field 3;field 4;field 5
field 2
————-
23
post:field 3;field 4;field 5
anno:field 4;field 5
field 3
————-
15
post:field 4;field 5
anno:field 5
field 4
————-
7
post:field 5
anno:
field 5

 
 
the idea can be taken further by using an array:

#!/bin/bash
#declare the array
declare -a FIELDS
ITEMS='field 1;field 2;field 3;field 4;field 5'
LEN=${#ITEMS}
while [ "$LEN" -gt "0" ]; do
	echo -------------
	echo ${LEN}
	echo "post:"${ITEMS}
	#get the shortest match from front of the source string
	# by matching the longest from the back of the source string
	THIS_FIELD=${ITEMS%%;*}
	#remove the match from the source string
	ITEMS=${ITEMS:$((${#THIS_FIELD}+1))}
	#calc the length of the source string
	LEN=${#ITEMS}
	#store result in the array
	FIELDS[ (${#FIELDS[*]}) ]=${THIS_FIELD}
	#show results
	echo "anno:"${ITEMS}
	echo ${THIS_FIELD}
	echo ${FIELDS[ (${#FIELDS[*]}-1) ]}
done

echo -------------
#show the array count
echo ${#FIELDS[*]}
#show the array content
echo ${FIELDS[*]}

will output:

————-
39
post:field 1;field 2;field 3;field 4;field 5
anno:field 2;field 3;field 4;field 5
field 1
field 1
————-
31
post:field 2;field 3;field 4;field 5
anno:field 3;field 4;field 5
field 2
field 2
————-
23
post:field 3;field 4;field 5
anno:field 4;field 5
field 3
field 3
————-
15
post:field 4;field 5
anno:field 5
field 4
field 4
————-
7
post:field 5
anno:
field 5
field 5
————-
5
field 1 field 2 field 3 field 4 field 5

 
 
the final script fragment without the comments::

#!/bin/bash
ITEMS='field 1;field 2;field 3;field 4;field 5'
declare -a FIELDS
LEN=${#ITEMS}
while [ "$LEN" -gt "0" ]; do
	THIS_FIELD=${ITEMS%%;*}
	ITEMS=${ITEMS:$((${#THIS_FIELD}+1))}
	LEN=${#ITEMS}
	FIELDS[ (${#FIELDS[*]}) ]=${THIS_FIELD}
done

COUNT=0
while [ "$COUNT" -lt ${#FIELDS[*]} ]; do
	echo ${FIELDS[$COUNT]}
	COUNT=$(( ${COUNT}+1 ))
done

obviously you would want to change the “ITEMS” variable and do something meaningful in the second loop.

this was posted in the hope that it will be of some use to someone.

GhostScript and Margins

I had a postscript document that simply did not want to come out correctly, the offsets were such that the page content was going well off the visible area.

the following vile hack is one solution:

cat <<EOF>offsetfix.ps
%!PS-Adobe-2.0
<<
	/PageOffset [ 16 -52]
	/Margins [0 0]
	/.HWMargins [0 0 0 0]
>>
setpagedevice
EOF

gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite \
	-dOptimize=true \
	-sOutputFile=output.pdf \
	offsetfix.ps input.ps

granted, one could cat the snippit in offsetfix.ps with the original document, but as I’m not sure what else may be using it, I’d rather not.

this also has the advantage of being a bit more portable, albeit rather ugly when compared to the original:

ps2pdf input.ps output.pdf

Atmel AVR Device List

AVR Toolchain - Build 2007-09-08

Documentation

AVR Toolchain Build Tests

AVR Libc User Manual

 

Downloads


AVR-Toolchain - 2007-09-08 Build Binary Package - No Docs


AVR-Toolchain - 2007-09-08 Build Binary Package

 

Notes

the single greatest number of “bug” reports we get are due to the user not setting the env variable AVR.

on a linux system:

export AVR=/usr/local/avr (or wherever you've installed it, $HOME/avr, /opt/avr, etc )
export AVRROOT=$AVR
export AVRBIN=$AVRROOT/bin
export AVRLIB=$AVRROOT/lib/avrlib
export PATH=$AVR/bin:$PATH

these can be placed in your ~/.bashrc file
of course, the $AVRROOT should be where the user has placed the toolchain and avrlib ( /opt/avr and ~/avr are popular too )
there is a generated rc file in the root of the install dir as well, it can be modified to suit.

From avr-as –help

bash-3.1$ avr-as --help
Usage: avr-as [option...] [asmfile...]
Options:
  -a[sub-option...]       turn on listings
                          Sub-options [default hls]:
                          c      omit false conditionals
                          d      omit debugging directives
                          h      include high-level source
                          l      include assembly
                          m      include macro expansions
                          n      omit forms processing
                          s      include symbols
                          =FILE  list to FILE (must be last sub-option)
  --alternate             initially turn on alternate macro syntax
  -D                      produce assembler debugging messages
  --defsym SYM=VAL        define symbol SYM to given value
  --execstack             require executable stack for this object
  --noexecstack           don't require executable stack for this object
  -f                      skip whitespace and comment preprocessing
  -g --gen-debug          generate debugging information
  --gstabs                generate STABS debugging information
  --gstabs+               generate STABS debug info with GNU extensions
  --gdwarf-2              generate DWARF2 debugging information
  --hash-size=     set the hash table size close to 
  --help                  show this message and exit
  --target-help           show target specific options
  -I DIR                  add DIR to search list for .include directives
  -J                      don't warn about signed overflow
  -K                      warn when differences altered for long displacements
  -L,--keep-locals        keep local symbols (e.g. starting with `L')
  -M,--mri                assemble in MRI compatibility mode
  --MD FILE               write dependency information in FILE (default none)
  -nocpp                  ignored
  -o OBJFILE              name the object-file output OBJFILE (default a.out)
  -R                      fold data section into text section
  --reduce-memory-overheads
                          prefer smaller memory use at the cost of longer
                          assembly times
  --statistics            print various measured statistics from execution
  --strip-local-absolute  strip local absolute symbols
  --traditional-format    Use same format as native assembler when possible
  --version               print assembler version number and exit
  -W  --no-warn           suppress warnings
  --warn                  don't suppress warnings
  --fatal-warnings        treat warnings as errors
  --itbl INSTTBL          extend instruction set to include instructions
                          matching the specifications defined in file INSTTBL
  -w                      ignored
  -X                      ignored
  -Z                      generate object file even after errors
  --listing-lhs-width     set the width in words of the output data column of
                          the listing
  --listing-lhs-width2    set the width in words of the continuation lines
                          of the output data column; ignored if smaller than
                          the width of the first line
  --listing-rhs-width     set the max width in characters of the lines from
                          the source file
  --listing-cont-lines    set the maximum number of continuation lines used
                          for the output data column of the listing
  @FILE                   read options from FILE
AVR options:
  -mmcu=[avr-name] select microcontroller variant
                   [avr-name] can be:
                   avr1 - AT90S1200, ATtiny1x, ATtiny28
                   avr2 - AT90S2xxx, AT90S4xxx, AT90S8xxx, ATtiny22
                   avr3 - ATmega103, ATmega603
                   avr4 - ATmega83, ATmega85
                   avr5 - ATmega161, ATmega163, ATmega32, AT94K
                   or immediate microcontroller name.
  -mall-opcodes    accept all AVR opcodes, even if not supported by MCU
  -mno-skip-bug    disable warnings for skipping two-word instructions
                   (default for avr4, avr5)
  -mno-wrap        reject rjmp/rcall instructions with 8K wrap-around
                   (default for avr3, avr5)
Known MCU names:
  avr1 avr2 avr3 avr4 avr5 avr6 at90s1200 attiny10 attiny11 attiny12
  attiny15 attiny28 at90s2313 at90s2323 at90s2333 at90s2343 attiny22
  attiny26 at90s4433 at90s4414 at90s4434 at90s8515 at90s8535 at90c8534
  at86rf401 attiny13 attiny2313 attiny261 attiny461 attiny861 attiny24
  attiny44 attiny84 attiny25 attiny45 attiny85 atmega603 atmega103
  at43usb320 at43usb355 at76c711 atmega48 atmega8 atmega83 atmega85
  atmega88 atmega8515 atmega8535 atmega8hva at90pwm1 at90pwm2 at90pwm3
  atmega16 atmega161 atmega162 atmega163 atmega164p atmega165 atmega165p
  atmega168 atmega169 atmega169p atmega32 atmega323 atmega324p atmega325
  atmega325p atmega329 atmega329p atmega3250 atmega3250p atmega3290
  atmega3290p atmega406 atmega64 atmega640 atmega644 atmega644p atmega128
  atmega1280 atmega1281 atmega645 atmega649 atmega6450 atmega6490
  atmega16hva at90can32 at90can64 at90can128 at90usb82 at90usb162
  at90usb646 at90usb647 at90usb1286 at90usb1287 at94k atmega2560
  atmega2561

Report bugs to 

Using gdb, ddd, and simulavr with the 2006-03-05 AVR Toolchain

checking the simulator:

$ simulavr -L
  at90s1200
  at90s2313
  at90s4414
  at90s8515
  atmega8
  atmega16
  atmega103
  atmega128
  at43usb351
  at43usb353
  at43usb355
  at43usb320
  at43usb325
  at43usb326

starting the simulator server

$ simulavr --device atmega8 --gdbserver

Simulating a atmega8 device.

devsupp.c:338: MESSAGE: TODO: attach IO Reg 'TWBR' at 0x0020
...[ lots more like this ]...
avrcore.c:475: MESSAGE: attach: Internal SRAM from 0x0060 to 0x045f
decoder.c:3875: MESSAGE: generating opcode lookup_table
main.c:415: MESSAGE: Simulating clock frequency of 8000000 Hz
Waiting on port 1212 for gdb client to connect...

now simulavr is ready to simulate an atmega8 and is waiting for a client to connect on TCP port 1212.

in the following example, the “stdiodemo” test elf from the avr-libc examples is used, and I started programs from within the base of the avr-libc examples dir.

avr-ddd --debugger $AVRROOT/bin/avr-gdb

screenshot-01.jpg

(gdb) file stdiodemo/stdiodemo.elf

screenshot-02.jpg

(gdb) target remote localhost:1212
Remote debugging using localhost:1212
0x00000000 in __vectors ()

screenshot-03.jpg

(gdb) load
Loading section .text, size 0x147c lma 0x0
Loading section .data, size 0x74 lma 0x147c
Start address 0x0, load size 5360
Transfer rate: 2858666 bits/sec, 184 bytes/write.

screenshot-04.jpg

(gdb) break stdiodemo.c:53
Breakpoint 1 at 0xce: file stdiodemo.c, line 53.

screenshot-05.jpg

(gdb) step
Single stepping until exit from function __vectors,
which has no line number information.
0x00000064 in __init ()
(gdb) continue
Continuing.
Breakpoint 1, main () at stdiodemo.c:58

screenshot-06.jpg

a screenshot showing the registers window:
screenshot-07.jpg

a set of screenshots showing avr-ddd and simulavr’s display window.

the binary loaded into this version is a much simpler assembly program chosen to illustrate the simulavr display window. in the avr-ddd screenshot, I’ve marked the instruction that the debugger has just executed and the associated define, showing that it has just set the r16 register to 0xFF. in the simulavr display window screenshot, I’ve marked the section showing how the r16 register field reflects this change.

admittedly, this is not not terribly impressive, but it does show that the applications have the potential for practical use.

screenshot-08a.png screenshot-08b.png

AVR Toolchain - Build 2007-09-08 - Build Tests

AVR Toolchain - Build 2007-09-08 - AVR-Libc User Manual

AVR Microcontrollers - Getting Started

Basic “getting started” needs

  • a few AVRs
  • a compiler/linker
  • a mechanism to upload/download to/from the microcontroller
  • breadboard
  • a power supply
  • various components ( LEDs, resisters for said, ect )
  • Tags

  • Categories

  • Need Code Written?

  • Need a Coding Job?

  • Archives