Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 89 → Rev 90

/Microsoft Robotics Studio/Roboboard/Main.c
0,0 → 1,285
/*****************************************************************************
Project : Roboboard
Date : 1/14/2007
Author : Gunter Logemann (C) ALL RIGHTS RESERVED
 
Comments: This project is optimized to work with the Mikrocopter (www.mikrokopter.de)
 
Redistributions of this source code (with or without modifications) or parts
of this sourcode must retain the above copyright notice, this list of
conditions and the following disclaimer.
* Neither the name of the copyright holders nor the names of contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
* The use of this source code permittet for non-commercial use (directly
or indirectly) only.
* Commercial use Is only permitted with our written permission by
Gunter Logemann (gunter@pccon.de)
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
 
Chip type : ATmega8
Program type : Application
Clock frequency : CPUSPEED
*****************************************************************************/
 
#include <avr/interrupt.h>
#include <avr/sleep.h>
//#include <avr/signal.h>
#include <avr/io.h>
//#include <avr/stdio.h>
#include "StdDefines.h"
#include "Main.h"
 
//#define CPUSPEED_20
//#define CPUSPEED_16
#define CPUSPEED_11059
 
// Macros
#define WatchdogReset() asm("wdr")
#define Wait() while(!(SPSR & (1<<SPIF)))
 
 
// Define CPU speed dependant constants:
 
 
 
#define MAX_RX_BUF 100
#define MAX_TX_BUF 100
unsigned volatile char SioTmp = 0;
unsigned volatile char RxdBuffer[MAX_RX_BUF];
unsigned volatile char TxdBuffer[MAX_TX_BUF];
 
unsigned volatile char NeuerDatensatzEmpfangen = 0;
unsigned volatile char UebertragungAbgeschlossen = 1;
unsigned volatile char CntCrcError = 0;
unsigned volatile char AnzahlEmpfangsBytes = 0;
 
struct str_VersionInfo VersionInfo;
struct str_AnalogData AnalogData;
struct str_Exception Exception;
 
// --------------------------------------------------------------------------
int uart_putchar (char c)
{
UDR = c;
return (0);
}
 
// --------------------------------------------------------------------------
SIGNAL(SIG_UART_TRANS)
{
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!UebertragungAbgeschlossen)
{
ptr++; // die [0] wurde schon gesendet
tmp_tx = TxdBuffer[ptr];
if((tmp_tx == '\r') || (ptr == MAX_TX_BUF))
{
ptr = 0;
UebertragungAbgeschlossen = 1;
}
UDR = tmp_tx;
}
else ptr = 0;
}
 
// --------------------------------------------------------------------------
SIGNAL(SIG_UART_RECV)
{
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
 
SioTmp = UDR;
 
if(buf_ptr >= MAX_RX_BUF)
UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{
UartState = 0;
crc -= RxdBuffer[buf_ptr-2];
crc -= RxdBuffer[buf_ptr-1];
crc %= 4096;
crc1 = '=' + crc / 64;
crc2 = '=' + crc % 64;
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1]))
{
CrcOkay = 1;
}
else
{
CrcOkay = 0;
CntCrcError++;
}
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
{
NeuerDatensatzEmpfangen = 1;
AnzahlEmpfangsBytes = buf_ptr;
RxdBuffer[buf_ptr] = '\r';
}
}
else
switch(UartState)
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
crc = SioTmp;
break;
case 1: // Adresse auswerten
UartState++;
RxdBuffer[buf_ptr++] = SioTmp;
crc += SioTmp;
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
if(buf_ptr < MAX_RX_BUF) buf_ptr++;
else UartState = 0;
crc += SioTmp;
break;
default:
UartState = 0;
break;
}
}
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
{
tmpCRC += TxdBuffer[i];
}
tmpCRC %= 4096;
TxdBuffer[i++] = '=' + tmpCRC / 64;
TxdBuffer[i++] = '=' + tmpCRC % 64;
TxdBuffer[i++] = '\r';
UebertragungAbgeschlossen = 0;
UDR = TxdBuffer[0];
}
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
TxdBuffer[pt++] = '#'; // Startzeichen
TxdBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
TxdBuffer[pt++] = cmd; // Commando
 
while(len)
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
if(len) { b = snd[ptr++]; len--;} else b = 0;
if(len) { c = snd[ptr++]; len--;} else c = 0;
TxdBuffer[pt++] = '=' + (a >> 2);
TxdBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
TxdBuffer[pt++] = '=' + ( c & 0x3f);
}
AddCRC(pt);
}
 
 
//-----------------------------------------------------------------------------
//main
//main execution loop
//-----------------------------------------------------------------------------
int main(void)
{
// int message structures;
VersionInfo.identifier = XIDENTIFIER_VERSION;
VersionInfo.majorversion = MAJORVERSION;
VersionInfo.minorversion = MINORVERSION;
AnalogData.identifier = XIDENTIFIER_ANALOG;
Exception.identifier = XIDENTIFIER_EXCEPTION;
 
// PORT D - unused right now
PORTD = 0x10;
DDRD = 0x00;
 
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
 
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART RX/TX interrupt enable
// USART Mode: Asynchronous
// USART Baud rate: 57600
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
#ifdef CPUSPEED_20 //20.000MHz
UBRRH=0x00;
UBRRL=0x15;
#endif
 
#ifdef CPUSPEED_16 //16.000MHz
UBRRH=0x00;
UBRRL=0x10;
#endif
#ifdef CPUSPEED_11059 //11.059MHz
UBRRH=0x00;
UBRRL=0x0B;
#endif
 
 
// Enable interrupts
sei();
 
NeuerDatensatzEmpfangen = 0;
 
// main loop
while (1)
{
if(NeuerDatensatzEmpfangen==1) {
switch(RxdBuffer[3])
{
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// version request
case XIDENTIFIER_VERSION:
SendOutData('X',0x00,(unsigned char *) &VersionInfo,sizeof(VersionInfo));
break;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
case XIDENTIFIER_ANALOG:
break;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
default:
Exception.errorcode = ERRORCODE_NOTIMPLEMENTED;
SendOutData('X',0x00,(unsigned char *) &Exception,sizeof(VersionInfo));
}
NeuerDatensatzEmpfangen=0;
}
}
return(1);
} /* main */
 
 
/Microsoft Robotics Studio/Roboboard/Main.h
0,0 → 1,71
/*****************************************************************************
Project : Roboboard
Date : 1/14/2007
Author : Gunter Logemann (C) ALL RIGHTS RESERVED
 
Comments: This project is optimized to work with the Mikrocopter (www.mikrokopter.de)
 
Redistributions of this source code (with or without modifications) or parts
of this sourcode must retain the above copyright notice, this list of
conditions and the following disclaimer.
* Neither the name of the copyright holders nor the names of contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
* The use of this source code permittet for non-commercial use (directly
or indirectly) only.
* Commercial use Is only permitted with our written permission by
Gunter Logemann (gunter@pccon.de)
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
 
Chip type : ATmega8
Program type : Application
Clock frequency : CPUSPEED
*****************************************************************************/
 
 
#define XIDENTIFIER_EXCEPTION 0x00
#define XIDENTIFIER_VERSION 0x01
#define XIDENTIFIER_ANALOG 0x02
 
//---------------------------------------------------------------------------
struct str_VersionInfo
{
unsigned char identifier;
unsigned char majorversion;
unsigned char minorversion;
};
extern struct str_VersionInfo VersionInfo;
 
#define MAJORVERSION 0x00
#define MINORVERSION 0x01
 
//---------------------------------------------------------------------------
struct str_AnalogData
{
unsigned char identifier;
int analog[8];
};
extern struct str_AnalogData AnalogData;
 
//---------------------------------------------------------------------------
struct str_Exception
{
unsigned char identifier;
unsigned char errorcode;
};
extern struct str_Exception Exception;
 
#define ERRORCODE_NOTIMPLEMENTED 0x00
#define ERRORCODE_WRONGPARAMETER 0x01
 
/Microsoft Robotics Studio/Roboboard/Makefile
0,0 → 1,90
PRG = main
OBJ = main.o \
MCU_TARGET = atmega8
OPTIMIZE = -O1
 
DEFS =
LIBS =
 
# You should not have to change anything below here.
 
CC = avr-gcc
 
# Override is only needed by avr-lib build system.
 
override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS)
override LDFLAGS = -Wl,-Map,$(PRG).map
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
 
all: $(PRG).elf lst text eeprom
 
$(PRG).elf: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
 
clean:
rm -rf *.o $(PRG).elf *.eps *.png *.pdf *.bak
rm -rf *.lst *.map $(EXTRA_CLEAN_FILES)
 
lst: $(PRG).lst
 
%.lst: %.elf
$(OBJDUMP) -h -S $< > $@
 
# Rules for building the .text rom images
 
text: hex bin srec
 
hex: $(PRG).hex
bin: $(PRG).bin
srec: $(PRG).srec
 
%.hex: %.elf
$(OBJCOPY) -j .text -j .data -O ihex $< $@
 
%.srec: %.elf
$(OBJCOPY) -j .text -j .data -O srec $< $@
 
%.bin: %.elf
$(OBJCOPY) -j .text -j .data -O binary $< $@
 
# Rules for building the .eeprom rom images
 
eeprom: ehex ebin esrec
 
ehex: $(PRG)_eeprom.hex
ebin: $(PRG)_eeprom.bin
esrec: $(PRG)_eeprom.srec
 
%_eeprom.hex: %.elf
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@
 
%_eeprom.srec: %.elf
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@
 
%_eeprom.bin: %.elf
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@
 
# Every thing below here is used by avr-libc's build system and can be ignored
# by the casual user.
 
FIG2DEV = fig2dev
EXTRA_CLEAN_FILES = *.bin *.srec
 
dox: eps png pdf
 
eps: $(PRG).eps
png: $(PRG).png
pdf: $(PRG).pdf
 
%.eps: %.fig
$(FIG2DEV) -L eps $< $@
 
%.pdf: %.fig
$(FIG2DEV) -L pdf $< $@
 
%.png: %.fig
$(FIG2DEV) -L png $< $@
 
/Microsoft Robotics Studio/Roboboard/RoboBoard.pnproj
0,0 → 1,0
<Project name="MKvideooverlay"><File path="Main.c"></File><File path="Main.h"></File><File path="main.hex"></File><File path="main_eeprom.hex"></File><File path="Makefile"></File><File path="overlay.sch"></File><File path="StdDefines.h"></File><File path="main.lst"></File></Project>
/Microsoft Robotics Studio/Roboboard/RoboBoard.pnps
0,0 → 1,0
<pd><ViewState><e p="MKvideooverlay" x="true"></e></ViewState></pd>
/Microsoft Robotics Studio/Roboboard/StdDefines.h
0,0 → 1,51
/*******************************************************************************
File: StdDefines.h
 
Standard definitions file.
 
Created: 1.00 04/14/03 GND Gary Dion
 
Version: 1.00
 
Revisions: 1.00 04/14/03 GND Initial Release.
*******************************************************************************/
 
/* General use definitions */
# define TRUE (1)
# define FALSE (0)
 
# define ON (1)
# define OFF (0)
 
# define HI (1)
# define LO (0)
 
/* General status constants. */
# define PASS (1)
# define OK (PASS)
# define FAIL (0)
# define ERROR (FAIL)
 
/* Define PUBLIC as extern. */
#define PUBLIC extern
 
/* Define PRIVATE as static. */
#define PRIVATE static
 
/* Scalar type definitions */
typedef char INT8;
typedef unsigned char UINT8;
typedef unsigned char UCHAR;
typedef unsigned char BOOL;
 
typedef int INT16;
typedef unsigned int UINT16;
typedef unsigned int UINT;
 
typedef short SHORT;
typedef unsigned short USHORT;
 
typedef long INT32;
typedef unsigned long UINT32;
typedef unsigned long ULONG;
typedef long STATUS;
/Microsoft Robotics Studio/Roboboard/main.bin
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/Microsoft Robotics Studio/Roboboard/main.bin
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/Roboboard/main.elf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/Microsoft Robotics Studio/Roboboard/main.elf
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Microsoft Robotics Studio/Roboboard/main.hex
0,0 → 1,74
:1000000012C02CC02BC02AC029C028C027C026C0BF
:1000100025C024C023C05CC021C025C01FC01EC095
:100020001DC01CC01BC011241FBECFE5D4E0DEBF25
:10003000CDBF10E0A0E6B0E0EEE7F4E002C005902E
:100040000D92A236B107D9F711E0A2E6B0E001C0E7
:100050001D92AC34B107E1F7D4D110C2D1CF8CB925
:1000600080E090E008951F920F920FB60F92112436
:100070008F939F93EF93FF93809160008823D9F42F
:1000800080916C0090916D00019690936D0080932B
:100090006C00FC01E952FF4FE081ED3019F084362D
:1000A000910539F410926D0010926C0081E08093FC
:1000B0006000ECB904C010926D0010926C00FF91CA
:1000C000EF919F918F910F900FBE0F901F901895F9
:1000D0001F920F920FB60F9211242F933F934F93BD
:1000E0005F936F937F938F939F93AF93BF93EF93A0
:1000F000FF938CB18093620050916700543610F0EA
:1001000010926600809162008D3009F056C0809197
:100110006600823009F051C010926600652F772783
:10012000FB01329723E730E0E20FF31F4081CB0160
:100130000197DC01A20FB31F2C9180916A0090916E
:100140006B00841B9109821B91099F7090936B0037
:1001500080936A009C010024220F331F001C220F91
:10016000331F001C232F302D235C209369008F73D5
:10017000382F335C309368008081281729F48C91E4
:10018000381711F491E006C0809164008F5F80936E
:10019000640090E080916300882309F06CC099238B
:1001A00009F469C081E08093630050936500FB010E
:1001B000ED58FF4F8DE080835EC0809166008130F6
:1001C00001F1813020F0823009F053C035C08091B8
:1001D0006200833239F480916300882319F481E04E
:1001E00080936600809162008093730081E0809329
:1001F000670080916200992790936B0080936A005A
:100200003AC082E08093660080916200E3E7F0E00C
:10021000E50FF11D8083852F8F5F8093670020910C
:10022000620080916A0090916B00820F911D909303
:100230006B0080936A001FC080916200E3E7F0E0EA
:10024000E50FF11D8083543628F4852F8F5F80934E
:10025000670002C0109266002091620080916A00DF
:1002600090916B00820F911D90936B0080936A00B8
:1002700002C010926600FF91EF91BF91AF919F91E4
:100280008F917F916F915F914F913F912F910F903F
:100290000FBE0F901F901895DC01892B29F420E0E8
:1002A00030E0A0E0B0E011C020E030E040E050E0FD
:1002B00067ED70E0FA01E60FF71F8081280F311D0E
:1002C0004F5F5F4FA417B507A9F73F70C90100241E
:1002D000880F991F001C880F991F001C892F902DD3
:1002E000835C47ED50E0FD01E40FF51F808311961C
:1002F0002F73235CFD01E40FF51F20831196A40FDB
:10030000B51F8DE08C93109260008091D7008CB95E
:100310000895FF920F931F93CF93DF938A01722F5B
:1003200093E29093D7006093D8008093D900222362
:1003300019F4A3E0B0E05DC0A3E0B0E060E0C7ED79
:10034000D0E0F801E60FF11D90816F5F715019F454
:10035000FF2440E00FC0F801E60FF11D40816F5F00
:10036000715011F4FF2406C0F801E60FF11DF08072
:100370006F5F7150892F86958695835CFD01EC0F28
:10038000FD1F8083FD0131965527892F99278370A2
:10039000907082959295907F9827807F98279A01F8
:1003A000329522952F7023273F702327822B835C61
:1003B000EC0FFD1F8083FD0132964F705070440F8B
:1003C000551F440F551F8F2D8295869586958370F6
:1003D000842B835CEC0FFD1F8083FD0133968F2DF2
:1003E0008F73835CEC0FFD1F80831496772309F0D5
:1003F000A8CFCD0151DFDF91CF911F910F91FF90D9
:1004000008950F931F93CF93DF9381E080936E0045
:1004100010926F008093700082E080933B011092F5
:10042000710080E182BB11BA1BB888ED8AB986E8F9
:1004300080BD10BC8BE089B97894109263000EE601
:1004400010E0C1E7D0E0809163008130E1F7809156
:100450007600813019F0823039F40DC023E0A80114
:1004600060E088E556DF07C01092720023E0AE011D
:0E04700060E088E54EDF10926300E5CFFFCF1D
:02047E0001007B
:00000001FF
/Microsoft Robotics Studio/Roboboard/main.lst
0,0 → 1,777
 
main.elf: file format elf32-avr
 
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000047e 00000000 00000000 00000094 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000002 00800060 0000047e 00000512 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 000000ea 00800062 00800062 00000514 2**0
ALLOC
3 .stab 00000378 00000000 00000000 00000514 2**2
CONTENTS, READONLY, DEBUGGING
4 .stabstr 00000071 00000000 00000000 0000088c 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_aranges 00000020 00000000 00000000 000008fd 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_pubnames 0000011d 00000000 00000000 0000091d 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_info 000003bf 00000000 00000000 00000a3a 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_abbrev 0000011c 00000000 00000000 00000df9 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_line 00000367 00000000 00000000 00000f15 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_frame 00000070 00000000 00000000 0000127c 2**2
CONTENTS, READONLY, DEBUGGING
11 .debug_str 000001dc 00000000 00000000 000012ec 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_loc 00000220 00000000 00000000 000014c8 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
 
00000000 <__vectors>:
0: 12 c0 rjmp .+36 ; 0x26 <__ctors_end>
2: 2c c0 rjmp .+88 ; 0x5c <__bad_interrupt>
4: 2b c0 rjmp .+86 ; 0x5c <__bad_interrupt>
6: 2a c0 rjmp .+84 ; 0x5c <__bad_interrupt>
8: 29 c0 rjmp .+82 ; 0x5c <__bad_interrupt>
a: 28 c0 rjmp .+80 ; 0x5c <__bad_interrupt>
c: 27 c0 rjmp .+78 ; 0x5c <__bad_interrupt>
e: 26 c0 rjmp .+76 ; 0x5c <__bad_interrupt>
10: 25 c0 rjmp .+74 ; 0x5c <__bad_interrupt>
12: 24 c0 rjmp .+72 ; 0x5c <__bad_interrupt>
14: 23 c0 rjmp .+70 ; 0x5c <__bad_interrupt>
16: 5c c0 rjmp .+184 ; 0xd0 <__vector_11>
18: 21 c0 rjmp .+66 ; 0x5c <__bad_interrupt>
1a: 25 c0 rjmp .+74 ; 0x66 <__vector_13>
1c: 1f c0 rjmp .+62 ; 0x5c <__bad_interrupt>
1e: 1e c0 rjmp .+60 ; 0x5c <__bad_interrupt>
20: 1d c0 rjmp .+58 ; 0x5c <__bad_interrupt>
22: 1c c0 rjmp .+56 ; 0x5c <__bad_interrupt>
24: 1b c0 rjmp .+54 ; 0x5c <__bad_interrupt>
 
00000026 <__ctors_end>:
26: 11 24 eor r1, r1
28: 1f be out 0x3f, r1 ; 63
2a: cf e5 ldi r28, 0x5F ; 95
2c: d4 e0 ldi r29, 0x04 ; 4
2e: de bf out 0x3e, r29 ; 62
30: cd bf out 0x3d, r28 ; 61
 
00000032 <__do_copy_data>:
32: 10 e0 ldi r17, 0x00 ; 0
34: a0 e6 ldi r26, 0x60 ; 96
36: b0 e0 ldi r27, 0x00 ; 0
38: ee e7 ldi r30, 0x7E ; 126
3a: f4 e0 ldi r31, 0x04 ; 4
3c: 02 c0 rjmp .+4 ; 0x42 <.do_copy_data_start>
 
0000003e <.do_copy_data_loop>:
3e: 05 90 lpm r0, Z+
40: 0d 92 st X+, r0
 
00000042 <.do_copy_data_start>:
42: a2 36 cpi r26, 0x62 ; 98
44: b1 07 cpc r27, r17
46: d9 f7 brne .-10 ; 0x3e <__SP_H__>
 
00000048 <__do_clear_bss>:
48: 11 e0 ldi r17, 0x01 ; 1
4a: a2 e6 ldi r26, 0x62 ; 98
4c: b0 e0 ldi r27, 0x00 ; 0
4e: 01 c0 rjmp .+2 ; 0x52 <.do_clear_bss_start>
 
00000050 <.do_clear_bss_loop>:
50: 1d 92 st X+, r1
 
00000052 <.do_clear_bss_start>:
52: ac 34 cpi r26, 0x4C ; 76
54: b1 07 cpc r27, r17
56: e1 f7 brne .-8 ; 0x50 <.do_clear_bss_loop>
58: d4 d1 rcall .+936 ; 0x402 <main>
5a: 10 c2 rjmp .+1056 ; 0x47c <_exit>
 
0000005c <__bad_interrupt>:
5c: d1 cf rjmp .-94 ; 0x0 <__heap_end>
 
0000005e <uart_putchar>:
struct str_Exception Exception;
 
// --------------------------------------------------------------------------
int uart_putchar (char c)
{
5e: 8c b9 out 0x0c, r24 ; 12
UDR = c;
return (0);
}
60: 80 e0 ldi r24, 0x00 ; 0
62: 90 e0 ldi r25, 0x00 ; 0
64: 08 95 ret
 
00000066 <__vector_13>:
 
// --------------------------------------------------------------------------
SIGNAL(SIG_UART_TRANS)
{
66: 1f 92 push r1
68: 0f 92 push r0
6a: 0f b6 in r0, 0x3f ; 63
6c: 0f 92 push r0
6e: 11 24 eor r1, r1
70: 8f 93 push r24
72: 9f 93 push r25
74: ef 93 push r30
76: ff 93 push r31
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!UebertragungAbgeschlossen)
78: 80 91 60 00 lds r24, 0x0060
7c: 88 23 and r24, r24
7e: d9 f4 brne .+54 ; 0xb6 <__vector_13+0x50>
{
ptr++; // die [0] wurde schon gesendet
80: 80 91 6c 00 lds r24, 0x006C
84: 90 91 6d 00 lds r25, 0x006D
88: 01 96 adiw r24, 0x01 ; 1
8a: 90 93 6d 00 sts 0x006D, r25
8e: 80 93 6c 00 sts 0x006C, r24
tmp_tx = TxdBuffer[ptr];
92: fc 01 movw r30, r24
94: e9 52 subi r30, 0x29 ; 41
96: ff 4f sbci r31, 0xFF ; 255
98: e0 81 ld r30, Z
if((tmp_tx == '\r') || (ptr == MAX_TX_BUF))
9a: ed 30 cpi r30, 0x0D ; 13
9c: 19 f0 breq .+6 ; 0xa4 <__vector_13+0x3e>
9e: 84 36 cpi r24, 0x64 ; 100
a0: 91 05 cpc r25, r1
a2: 39 f4 brne .+14 ; 0xb2 <__vector_13+0x4c>
{
ptr = 0;
a4: 10 92 6d 00 sts 0x006D, r1
a8: 10 92 6c 00 sts 0x006C, r1
UebertragungAbgeschlossen = 1;
ac: 81 e0 ldi r24, 0x01 ; 1
ae: 80 93 60 00 sts 0x0060, r24
}
UDR = tmp_tx;
b2: ec b9 out 0x0c, r30 ; 12
b4: 04 c0 rjmp .+8 ; 0xbe <__vector_13+0x58>
}
else ptr = 0;
b6: 10 92 6d 00 sts 0x006D, r1
ba: 10 92 6c 00 sts 0x006C, r1
be: ff 91 pop r31
c0: ef 91 pop r30
c2: 9f 91 pop r25
c4: 8f 91 pop r24
c6: 0f 90 pop r0
c8: 0f be out 0x3f, r0 ; 63
ca: 0f 90 pop r0
cc: 1f 90 pop r1
ce: 18 95 reti
 
000000d0 <__vector_11>:
}
 
// --------------------------------------------------------------------------
SIGNAL(SIG_UART_RECV)
{
d0: 1f 92 push r1
d2: 0f 92 push r0
d4: 0f b6 in r0, 0x3f ; 63
d6: 0f 92 push r0
d8: 11 24 eor r1, r1
da: 2f 93 push r18
dc: 3f 93 push r19
de: 4f 93 push r20
e0: 5f 93 push r21
e2: 6f 93 push r22
e4: 7f 93 push r23
e6: 8f 93 push r24
e8: 9f 93 push r25
ea: af 93 push r26
ec: bf 93 push r27
ee: ef 93 push r30
f0: ff 93 push r31
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
 
SioTmp = UDR;
f2: 8c b1 in r24, 0x0c ; 12
f4: 80 93 62 00 sts 0x0062, r24
 
if(buf_ptr >= MAX_RX_BUF)
f8: 50 91 67 00 lds r21, 0x0067
fc: 54 36 cpi r21, 0x64 ; 100
fe: 10 f0 brcs .+4 ; 0x104 <__vector_11+0x34>
UartState = 0;
100: 10 92 66 00 sts 0x0066, r1
if(SioTmp == '\r' && UartState == 2)
104: 80 91 62 00 lds r24, 0x0062
108: 8d 30 cpi r24, 0x0D ; 13
10a: 09 f0 breq .+2 ; 0x10e <__vector_11+0x3e>
10c: 56 c0 rjmp .+172 ; 0x1ba <__vector_11+0xea>
10e: 80 91 66 00 lds r24, 0x0066
112: 82 30 cpi r24, 0x02 ; 2
114: 09 f0 breq .+2 ; 0x118 <__vector_11+0x48>
116: 51 c0 rjmp .+162 ; 0x1ba <__vector_11+0xea>
{
UartState = 0;
118: 10 92 66 00 sts 0x0066, r1
crc -= RxdBuffer[buf_ptr-2];
11c: 65 2f mov r22, r21
11e: 77 27 eor r23, r23
120: fb 01 movw r30, r22
122: 32 97 sbiw r30, 0x02 ; 2
124: 23 e7 ldi r18, 0x73 ; 115
126: 30 e0 ldi r19, 0x00 ; 0
128: e2 0f add r30, r18
12a: f3 1f adc r31, r19
12c: 40 81 ld r20, Z
crc -= RxdBuffer[buf_ptr-1];
12e: cb 01 movw r24, r22
130: 01 97 sbiw r24, 0x01 ; 1
132: dc 01 movw r26, r24
134: a2 0f add r26, r18
136: b3 1f adc r27, r19
138: 2c 91 ld r18, X
crc %= 4096;
13a: 80 91 6a 00 lds r24, 0x006A
13e: 90 91 6b 00 lds r25, 0x006B
142: 84 1b sub r24, r20
144: 91 09 sbc r25, r1
146: 82 1b sub r24, r18
148: 91 09 sbc r25, r1
14a: 9f 70 andi r25, 0x0F ; 15
14c: 90 93 6b 00 sts 0x006B, r25
150: 80 93 6a 00 sts 0x006A, r24
crc1 = '=' + crc / 64;
154: 9c 01 movw r18, r24
156: 00 24 eor r0, r0
158: 22 0f add r18, r18
15a: 33 1f adc r19, r19
15c: 00 1c adc r0, r0
15e: 22 0f add r18, r18
160: 33 1f adc r19, r19
162: 00 1c adc r0, r0
164: 23 2f mov r18, r19
166: 30 2d mov r19, r0
168: 23 5c subi r18, 0xC3 ; 195
16a: 20 93 69 00 sts 0x0069, r18
crc2 = '=' + crc % 64;
16e: 8f 73 andi r24, 0x3F ; 63
170: 38 2f mov r19, r24
172: 33 5c subi r19, 0xC3 ; 195
174: 30 93 68 00 sts 0x0068, r19
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1]))
178: 80 81 ld r24, Z
17a: 28 17 cp r18, r24
17c: 29 f4 brne .+10 ; 0x188 <__vector_11+0xb8>
17e: 8c 91 ld r24, X
180: 38 17 cp r19, r24
182: 11 f4 brne .+4 ; 0x188 <__vector_11+0xb8>
184: 91 e0 ldi r25, 0x01 ; 1
186: 06 c0 rjmp .+12 ; 0x194 <__vector_11+0xc4>
{
CrcOkay = 1;
}
else
{
CrcOkay = 0;
CntCrcError++;
188: 80 91 64 00 lds r24, 0x0064
18c: 8f 5f subi r24, 0xFF ; 255
18e: 80 93 64 00 sts 0x0064, r24
192: 90 e0 ldi r25, 0x00 ; 0
}
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
194: 80 91 63 00 lds r24, 0x0063
198: 88 23 and r24, r24
19a: 09 f0 breq .+2 ; 0x19e <__vector_11+0xce>
19c: 6c c0 rjmp .+216 ; 0x276 <__vector_11+0x1a6>
19e: 99 23 and r25, r25
1a0: 09 f4 brne .+2 ; 0x1a4 <__vector_11+0xd4>
1a2: 69 c0 rjmp .+210 ; 0x276 <__vector_11+0x1a6>
{
NeuerDatensatzEmpfangen = 1;
1a4: 81 e0 ldi r24, 0x01 ; 1
1a6: 80 93 63 00 sts 0x0063, r24
AnzahlEmpfangsBytes = buf_ptr;
1aa: 50 93 65 00 sts 0x0065, r21
RxdBuffer[buf_ptr] = '\r';
1ae: fb 01 movw r30, r22
1b0: ed 58 subi r30, 0x8D ; 141
1b2: ff 4f sbci r31, 0xFF ; 255
1b4: 8d e0 ldi r24, 0x0D ; 13
1b6: 80 83 st Z, r24
1b8: 5e c0 rjmp .+188 ; 0x276 <__vector_11+0x1a6>
}
}
else
switch(UartState)
1ba: 80 91 66 00 lds r24, 0x0066
1be: 81 30 cpi r24, 0x01 ; 1
1c0: 01 f1 breq .+64 ; 0x202 <__vector_11+0x132>
1c2: 81 30 cpi r24, 0x01 ; 1
1c4: 20 f0 brcs .+8 ; 0x1ce <__vector_11+0xfe>
1c6: 82 30 cpi r24, 0x02 ; 2
1c8: 09 f0 breq .+2 ; 0x1cc <__vector_11+0xfc>
1ca: 53 c0 rjmp .+166 ; 0x272 <__vector_11+0x1a2>
1cc: 35 c0 rjmp .+106 ; 0x238 <__vector_11+0x168>
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
1ce: 80 91 62 00 lds r24, 0x0062
1d2: 83 32 cpi r24, 0x23 ; 35
1d4: 39 f4 brne .+14 ; 0x1e4 <__vector_11+0x114>
1d6: 80 91 63 00 lds r24, 0x0063
1da: 88 23 and r24, r24
1dc: 19 f4 brne .+6 ; 0x1e4 <__vector_11+0x114>
1de: 81 e0 ldi r24, 0x01 ; 1
1e0: 80 93 66 00 sts 0x0066, r24
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
1e4: 80 91 62 00 lds r24, 0x0062
1e8: 80 93 73 00 sts 0x0073, r24
1ec: 81 e0 ldi r24, 0x01 ; 1
1ee: 80 93 67 00 sts 0x0067, r24
crc = SioTmp;
1f2: 80 91 62 00 lds r24, 0x0062
1f6: 99 27 eor r25, r25
1f8: 90 93 6b 00 sts 0x006B, r25
1fc: 80 93 6a 00 sts 0x006A, r24
200: 3a c0 rjmp .+116 ; 0x276 <__vector_11+0x1a6>
break;
case 1: // Adresse auswerten
UartState++;
202: 82 e0 ldi r24, 0x02 ; 2
204: 80 93 66 00 sts 0x0066, r24
RxdBuffer[buf_ptr++] = SioTmp;
208: 80 91 62 00 lds r24, 0x0062
20c: e3 e7 ldi r30, 0x73 ; 115
20e: f0 e0 ldi r31, 0x00 ; 0
210: e5 0f add r30, r21
212: f1 1d adc r31, r1
214: 80 83 st Z, r24
216: 85 2f mov r24, r21
218: 8f 5f subi r24, 0xFF ; 255
21a: 80 93 67 00 sts 0x0067, r24
crc += SioTmp;
21e: 20 91 62 00 lds r18, 0x0062
222: 80 91 6a 00 lds r24, 0x006A
226: 90 91 6b 00 lds r25, 0x006B
22a: 82 0f add r24, r18
22c: 91 1d adc r25, r1
22e: 90 93 6b 00 sts 0x006B, r25
232: 80 93 6a 00 sts 0x006A, r24
236: 1f c0 rjmp .+62 ; 0x276 <__vector_11+0x1a6>
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
238: 80 91 62 00 lds r24, 0x0062
23c: e3 e7 ldi r30, 0x73 ; 115
23e: f0 e0 ldi r31, 0x00 ; 0
240: e5 0f add r30, r21
242: f1 1d adc r31, r1
244: 80 83 st Z, r24
if(buf_ptr < MAX_RX_BUF) buf_ptr++;
246: 54 36 cpi r21, 0x64 ; 100
248: 28 f4 brcc .+10 ; 0x254 <__vector_11+0x184>
24a: 85 2f mov r24, r21
24c: 8f 5f subi r24, 0xFF ; 255
24e: 80 93 67 00 sts 0x0067, r24
252: 02 c0 rjmp .+4 ; 0x258 <__vector_11+0x188>
else UartState = 0;
254: 10 92 66 00 sts 0x0066, r1
crc += SioTmp;
258: 20 91 62 00 lds r18, 0x0062
25c: 80 91 6a 00 lds r24, 0x006A
260: 90 91 6b 00 lds r25, 0x006B
264: 82 0f add r24, r18
266: 91 1d adc r25, r1
268: 90 93 6b 00 sts 0x006B, r25
26c: 80 93 6a 00 sts 0x006A, r24
270: 02 c0 rjmp .+4 ; 0x276 <__vector_11+0x1a6>
break;
default:
UartState = 0;
272: 10 92 66 00 sts 0x0066, r1
276: ff 91 pop r31
278: ef 91 pop r30
27a: bf 91 pop r27
27c: af 91 pop r26
27e: 9f 91 pop r25
280: 8f 91 pop r24
282: 7f 91 pop r23
284: 6f 91 pop r22
286: 5f 91 pop r21
288: 4f 91 pop r20
28a: 3f 91 pop r19
28c: 2f 91 pop r18
28e: 0f 90 pop r0
290: 0f be out 0x3f, r0 ; 63
292: 0f 90 pop r0
294: 1f 90 pop r1
296: 18 95 reti
 
00000298 <AddCRC>:
break;
}
}
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
298: dc 01 movw r26, r24
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
29a: 89 2b or r24, r25
29c: 29 f4 brne .+10 ; 0x2a8 <AddCRC+0x10>
29e: 20 e0 ldi r18, 0x00 ; 0
2a0: 30 e0 ldi r19, 0x00 ; 0
2a2: a0 e0 ldi r26, 0x00 ; 0
2a4: b0 e0 ldi r27, 0x00 ; 0
2a6: 11 c0 rjmp .+34 ; 0x2ca <AddCRC+0x32>
2a8: 20 e0 ldi r18, 0x00 ; 0
2aa: 30 e0 ldi r19, 0x00 ; 0
2ac: 40 e0 ldi r20, 0x00 ; 0
2ae: 50 e0 ldi r21, 0x00 ; 0
2b0: 67 ed ldi r22, 0xD7 ; 215
2b2: 70 e0 ldi r23, 0x00 ; 0
{
tmpCRC += TxdBuffer[i];
2b4: fa 01 movw r30, r20
2b6: e6 0f add r30, r22
2b8: f7 1f adc r31, r23
2ba: 80 81 ld r24, Z
2bc: 28 0f add r18, r24
2be: 31 1d adc r19, r1
2c0: 4f 5f subi r20, 0xFF ; 255
2c2: 5f 4f sbci r21, 0xFF ; 255
2c4: a4 17 cp r26, r20
2c6: b5 07 cpc r27, r21
2c8: a9 f7 brne .-22 ; 0x2b4 <AddCRC+0x1c>
}
tmpCRC %= 4096;
2ca: 3f 70 andi r19, 0x0F ; 15
TxdBuffer[i++] = '=' + tmpCRC / 64;
2cc: c9 01 movw r24, r18
2ce: 00 24 eor r0, r0
2d0: 88 0f add r24, r24
2d2: 99 1f adc r25, r25
2d4: 00 1c adc r0, r0
2d6: 88 0f add r24, r24
2d8: 99 1f adc r25, r25
2da: 00 1c adc r0, r0
2dc: 89 2f mov r24, r25
2de: 90 2d mov r25, r0
2e0: 83 5c subi r24, 0xC3 ; 195
2e2: 47 ed ldi r20, 0xD7 ; 215
2e4: 50 e0 ldi r21, 0x00 ; 0
2e6: fd 01 movw r30, r26
2e8: e4 0f add r30, r20
2ea: f5 1f adc r31, r21
2ec: 80 83 st Z, r24
2ee: 11 96 adiw r26, 0x01 ; 1
TxdBuffer[i++] = '=' + tmpCRC % 64;
2f0: 2f 73 andi r18, 0x3F ; 63
2f2: 23 5c subi r18, 0xC3 ; 195
2f4: fd 01 movw r30, r26
2f6: e4 0f add r30, r20
2f8: f5 1f adc r31, r21
2fa: 20 83 st Z, r18
2fc: 11 96 adiw r26, 0x01 ; 1
TxdBuffer[i++] = '\r';
2fe: a4 0f add r26, r20
300: b5 1f adc r27, r21
302: 8d e0 ldi r24, 0x0D ; 13
304: 8c 93 st X, r24
UebertragungAbgeschlossen = 0;
306: 10 92 60 00 sts 0x0060, r1
UDR = TxdBuffer[0];
30a: 80 91 d7 00 lds r24, 0x00D7
30e: 8c b9 out 0x0c, r24 ; 12
310: 08 95 ret
 
00000312 <SendOutData>:
}
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
312: ff 92 push r15
314: 0f 93 push r16
316: 1f 93 push r17
318: cf 93 push r28
31a: df 93 push r29
31c: 8a 01 movw r16, r20
31e: 72 2f mov r23, r18
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
TxdBuffer[pt++] = '#'; // Startzeichen
320: 93 e2 ldi r25, 0x23 ; 35
322: 90 93 d7 00 sts 0x00D7, r25
TxdBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
326: 60 93 d8 00 sts 0x00D8, r22
TxdBuffer[pt++] = cmd; // Commando
32a: 80 93 d9 00 sts 0x00D9, r24
 
while(len)
32e: 22 23 and r18, r18
330: 19 f4 brne .+6 ; 0x338 <SendOutData+0x26>
332: a3 e0 ldi r26, 0x03 ; 3
334: b0 e0 ldi r27, 0x00 ; 0
336: 5d c0 rjmp .+186 ; 0x3f2 <SendOutData+0xe0>
338: a3 e0 ldi r26, 0x03 ; 3
33a: b0 e0 ldi r27, 0x00 ; 0
33c: 60 e0 ldi r22, 0x00 ; 0
33e: c7 ed ldi r28, 0xD7 ; 215
340: d0 e0 ldi r29, 0x00 ; 0
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
342: f8 01 movw r30, r16
344: e6 0f add r30, r22
346: f1 1d adc r31, r1
348: 90 81 ld r25, Z
34a: 6f 5f subi r22, 0xFF ; 255
34c: 71 50 subi r23, 0x01 ; 1
if(len) { b = snd[ptr++]; len--;} else b = 0;
34e: 19 f4 brne .+6 ; 0x356 <SendOutData+0x44>
350: ff 24 eor r15, r15
352: 40 e0 ldi r20, 0x00 ; 0
354: 0f c0 rjmp .+30 ; 0x374 <SendOutData+0x62>
356: f8 01 movw r30, r16
358: e6 0f add r30, r22
35a: f1 1d adc r31, r1
35c: 40 81 ld r20, Z
35e: 6f 5f subi r22, 0xFF ; 255
360: 71 50 subi r23, 0x01 ; 1
if(len) { c = snd[ptr++]; len--;} else c = 0;
362: 11 f4 brne .+4 ; 0x368 <SendOutData+0x56>
364: ff 24 eor r15, r15
366: 06 c0 rjmp .+12 ; 0x374 <SendOutData+0x62>
368: f8 01 movw r30, r16
36a: e6 0f add r30, r22
36c: f1 1d adc r31, r1
36e: f0 80 ld r15, Z
370: 6f 5f subi r22, 0xFF ; 255
372: 71 50 subi r23, 0x01 ; 1
TxdBuffer[pt++] = '=' + (a >> 2);
374: 89 2f mov r24, r25
376: 86 95 lsr r24
378: 86 95 lsr r24
37a: 83 5c subi r24, 0xC3 ; 195
37c: fd 01 movw r30, r26
37e: ec 0f add r30, r28
380: fd 1f adc r31, r29
382: 80 83 st Z, r24
384: fd 01 movw r30, r26
386: 31 96 adiw r30, 0x01 ; 1
TxdBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
388: 55 27 eor r21, r21
38a: 89 2f mov r24, r25
38c: 99 27 eor r25, r25
38e: 83 70 andi r24, 0x03 ; 3
390: 90 70 andi r25, 0x00 ; 0
392: 82 95 swap r24
394: 92 95 swap r25
396: 90 7f andi r25, 0xF0 ; 240
398: 98 27 eor r25, r24
39a: 80 7f andi r24, 0xF0 ; 240
39c: 98 27 eor r25, r24
39e: 9a 01 movw r18, r20
3a0: 32 95 swap r19
3a2: 22 95 swap r18
3a4: 2f 70 andi r18, 0x0F ; 15
3a6: 23 27 eor r18, r19
3a8: 3f 70 andi r19, 0x0F ; 15
3aa: 23 27 eor r18, r19
3ac: 82 2b or r24, r18
3ae: 83 5c subi r24, 0xC3 ; 195
3b0: ec 0f add r30, r28
3b2: fd 1f adc r31, r29
3b4: 80 83 st Z, r24
3b6: fd 01 movw r30, r26
3b8: 32 96 adiw r30, 0x02 ; 2
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
3ba: 4f 70 andi r20, 0x0F ; 15
3bc: 50 70 andi r21, 0x00 ; 0
3be: 44 0f add r20, r20
3c0: 55 1f adc r21, r21
3c2: 44 0f add r20, r20
3c4: 55 1f adc r21, r21
3c6: 8f 2d mov r24, r15
3c8: 82 95 swap r24
3ca: 86 95 lsr r24
3cc: 86 95 lsr r24
3ce: 83 70 andi r24, 0x03 ; 3
3d0: 84 2b or r24, r20
3d2: 83 5c subi r24, 0xC3 ; 195
3d4: ec 0f add r30, r28
3d6: fd 1f adc r31, r29
3d8: 80 83 st Z, r24
3da: fd 01 movw r30, r26
3dc: 33 96 adiw r30, 0x03 ; 3
TxdBuffer[pt++] = '=' + ( c & 0x3f);
3de: 8f 2d mov r24, r15
3e0: 8f 73 andi r24, 0x3F ; 63
3e2: 83 5c subi r24, 0xC3 ; 195
3e4: ec 0f add r30, r28
3e6: fd 1f adc r31, r29
3e8: 80 83 st Z, r24
3ea: 14 96 adiw r26, 0x04 ; 4
3ec: 77 23 and r23, r23
3ee: 09 f0 breq .+2 ; 0x3f2 <SendOutData+0xe0>
3f0: a8 cf rjmp .-176 ; 0x342 <SendOutData+0x30>
}
AddCRC(pt);
3f2: cd 01 movw r24, r26
3f4: 51 df rcall .-350 ; 0x298 <AddCRC>
3f6: df 91 pop r29
3f8: cf 91 pop r28
3fa: 1f 91 pop r17
3fc: 0f 91 pop r16
3fe: ff 90 pop r15
400: 08 95 ret
 
00000402 <main>:
}
 
 
//-----------------------------------------------------------------------------
//main
//main execution loop
//-----------------------------------------------------------------------------
int main(void)
{
402: 0f 93 push r16
404: 1f 93 push r17
406: cf 93 push r28
408: df 93 push r29
// int message structures;
VersionInfo.identifier = XIDENTIFIER_VERSION;
40a: 81 e0 ldi r24, 0x01 ; 1
40c: 80 93 6e 00 sts 0x006E, r24
VersionInfo.majorversion = MAJORVERSION;
410: 10 92 6f 00 sts 0x006F, r1
VersionInfo.minorversion = MINORVERSION;
414: 80 93 70 00 sts 0x0070, r24
AnalogData.identifier = XIDENTIFIER_ANALOG;
418: 82 e0 ldi r24, 0x02 ; 2
41a: 80 93 3b 01 sts 0x013B, r24
Exception.identifier = XIDENTIFIER_EXCEPTION;
41e: 10 92 71 00 sts 0x0071, r1
 
// PORT D - unused right now
PORTD = 0x10;
422: 80 e1 ldi r24, 0x10 ; 16
424: 82 bb out 0x12, r24 ; 18
DDRD = 0x00;
426: 11 ba out 0x11, r1 ; 17
 
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
 
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART RX/TX interrupt enable
// USART Mode: Asynchronous
// USART Baud rate: 57600
UCSRA=0x00;
428: 1b b8 out 0x0b, r1 ; 11
UCSRB=0xD8;
42a: 88 ed ldi r24, 0xD8 ; 216
42c: 8a b9 out 0x0a, r24 ; 10
UCSRC=0x86;
42e: 86 e8 ldi r24, 0x86 ; 134
430: 80 bd out 0x20, r24 ; 32
#ifdef CPUSPEED_20 //20.000MHz
UBRRH=0x00;
UBRRL=0x15;
#endif
 
#ifdef CPUSPEED_16 //16.000MHz
UBRRH=0x00;
UBRRL=0x10;
#endif
#ifdef CPUSPEED_11059 //11.059MHz
UBRRH=0x00;
432: 10 bc out 0x20, r1 ; 32
UBRRL=0x0B;
434: 8b e0 ldi r24, 0x0B ; 11
436: 89 b9 out 0x09, r24 ; 9
#endif
 
 
// Enable interrupts
sei();
438: 78 94 sei
 
NeuerDatensatzEmpfangen = 0;
43a: 10 92 63 00 sts 0x0063, r1
43e: 0e e6 ldi r16, 0x6E ; 110
440: 10 e0 ldi r17, 0x00 ; 0
442: c1 e7 ldi r28, 0x71 ; 113
444: d0 e0 ldi r29, 0x00 ; 0
 
// main loop
while (1)
{
if(NeuerDatensatzEmpfangen==1) {
446: 80 91 63 00 lds r24, 0x0063
44a: 81 30 cpi r24, 0x01 ; 1
44c: e1 f7 brne .-8 ; 0x446 <main+0x44>
switch(RxdBuffer[3])
44e: 80 91 76 00 lds r24, 0x0076
452: 81 30 cpi r24, 0x01 ; 1
454: 19 f0 breq .+6 ; 0x45c <main+0x5a>
456: 82 30 cpi r24, 0x02 ; 2
458: 39 f4 brne .+14 ; 0x468 <__stack+0x9>
45a: 0d c0 rjmp .+26 ; 0x476 <__stack+0x17>
{
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// version request
case XIDENTIFIER_VERSION:
SendOutData('X',0x00,(unsigned char *) &VersionInfo,sizeof(VersionInfo));
45c: 23 e0 ldi r18, 0x03 ; 3
45e: a8 01 movw r20, r16
460: 60 e0 ldi r22, 0x00 ; 0
462: 88 e5 ldi r24, 0x58 ; 88
464: 56 df rcall .-340 ; 0x312 <SendOutData>
466: 07 c0 rjmp .+14 ; 0x476 <__stack+0x17>
break;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
case XIDENTIFIER_ANALOG:
break;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
default:
Exception.errorcode = ERRORCODE_NOTIMPLEMENTED;
468: 10 92 72 00 sts 0x0072, r1
SendOutData('X',0x00,(unsigned char *) &Exception,sizeof(VersionInfo));
46c: 23 e0 ldi r18, 0x03 ; 3
46e: ae 01 movw r20, r28
470: 60 e0 ldi r22, 0x00 ; 0
472: 88 e5 ldi r24, 0x58 ; 88
474: 4e df rcall .-356 ; 0x312 <SendOutData>
}
NeuerDatensatzEmpfangen=0;
476: 10 92 63 00 sts 0x0063, r1
47a: e5 cf rjmp .-54 ; 0x446 <main+0x44>
 
0000047c <_exit>:
47c: ff cf rjmp .-2 ; 0x47c <_exit>
/Microsoft Robotics Studio/Roboboard/main.map
0,0 → 1,372
Archive member included because of file (symbol)
 
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o (exit)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o)
main.o (__do_copy_data)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o)
main.o (__do_clear_bss)
 
Allocating common symbols
Common symbol size file
 
VersionInfo 0x3 main.o
Exception 0x2 main.o
RxdBuffer 0x64 main.o
TxdBuffer 0x64 main.o
AnalogData 0x11 main.o
 
Discarded input sections
 
.stabstr 0x00000000 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
 
Memory Configuration
 
Name Origin Length Attributes
text 0x00000000 0x00002000 xr
data 0x00800060 0x0000ffa0 rw !x
eeprom 0x00810000 0x00010000 rw !x
*default* 0x00000000 0xffffffff
 
Linker script and memory map
 
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
LOAD main.o
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4\libc.a
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a
 
.hash
*(.hash)
 
.dynsym
*(.dynsym)
 
.dynstr
*(.dynstr)
 
.gnu.version
*(.gnu.version)
 
.gnu.version_d
*(.gnu.version_d)
 
.gnu.version_r
*(.gnu.version_r)
 
.rel.init
*(.rel.init)
 
.rela.init
*(.rela.init)
 
.rel.text
*(.rel.text)
*(.rel.text.*)
*(.rel.gnu.linkonce.t*)
 
.rela.text
*(.rela.text)
*(.rela.text.*)
*(.rela.gnu.linkonce.t*)
 
.rel.fini
*(.rel.fini)
 
.rela.fini
*(.rela.fini)
 
.rel.rodata
*(.rel.rodata)
*(.rel.rodata.*)
*(.rel.gnu.linkonce.r*)
 
.rela.rodata
*(.rela.rodata)
*(.rela.rodata.*)
*(.rela.gnu.linkonce.r*)
 
.rel.data
*(.rel.data)
*(.rel.data.*)
*(.rel.gnu.linkonce.d*)
 
.rela.data
*(.rela.data)
*(.rela.data.*)
*(.rela.gnu.linkonce.d*)
 
.rel.ctors
*(.rel.ctors)
 
.rela.ctors
*(.rela.ctors)
 
.rel.dtors
*(.rel.dtors)
 
.rela.dtors
*(.rela.dtors)
 
.rel.got
*(.rel.got)
 
.rela.got
*(.rela.got)
 
.rel.bss
*(.rel.bss)
 
.rela.bss
*(.rela.bss)
 
.rel.plt
*(.rel.plt)
 
.rela.plt
*(.rela.plt)
 
.text 0x00000000 0x47e
*(.vectors)
.vectors 0x00000000 0x26 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
0x00000000 __vectors
0x00000000 __vector_default
*(.vectors)
*(.progmem.gcc*)
*(.progmem*)
0x00000026 . = ALIGN (0x2)
0x00000026 __trampolines_start = .
*(.trampolines)
.trampolines 0x00000026 0x0 linker stubs
*(.trampolines*)
0x00000026 __trampolines_end = .
*(.jumptables)
*(.jumptables*)
*(.lowtext)
*(.lowtext*)
0x00000026 __ctors_start = .
*(.ctors)
0x00000026 __ctors_end = .
0x00000026 __dtors_start = .
*(.dtors)
0x00000026 __dtors_end = .
SORT(*)(.ctors)
SORT(*)(.dtors)
*(.init0)
.init0 0x00000026 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
0x00000026 __init
*(.init0)
*(.init1)
*(.init1)
*(.init2)
.init2 0x00000026 0xc c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
*(.init2)
*(.init3)
*(.init3)
*(.init4)
.init4 0x00000032 0x16 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o)
0x00000032 __do_copy_data
.init4 0x00000048 0x10 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o)
0x00000048 __do_clear_bss
*(.init4)
*(.init5)
*(.init5)
*(.init6)
*(.init6)
*(.init7)
*(.init7)
*(.init8)
*(.init8)
*(.init9)
.init9 0x00000058 0x4 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
*(.init9)
*(.text)
.text 0x0000005c 0x2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
0x0000005c __vector_1
0x0000005c __vector_12
0x0000005c __bad_interrupt
0x0000005c __vector_6
0x0000005c __vector_3
0x0000005c __vector_17
0x0000005c __vector_7
0x0000005c __vector_5
0x0000005c __vector_4
0x0000005c __vector_9
0x0000005c __vector_2
0x0000005c __vector_15
0x0000005c __vector_8
0x0000005c __vector_14
0x0000005c __vector_10
0x0000005c __vector_16
0x0000005c __vector_18
.text 0x0000005e 0x41e main.o
0x000000d0 __vector_11
0x00000066 __vector_13
0x00000298 AddCRC
0x00000402 main
0x00000312 SendOutData
0x0000005e uart_putchar
.text 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o)
.text 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o)
.text 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o)
0x0000047c . = ALIGN (0x2)
*(.text.*)
.text.libgcc 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o)
.text.libgcc 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o)
.text.libgcc 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o)
0x0000047c . = ALIGN (0x2)
*(.fini9)
.fini9 0x0000047c 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o)
0x0000047c exit
0x0000047c _exit
*(.fini9)
*(.fini8)
*(.fini8)
*(.fini7)
*(.fini7)
*(.fini6)
*(.fini6)
*(.fini5)
*(.fini5)
*(.fini4)
*(.fini4)
*(.fini3)
*(.fini3)
*(.fini2)
*(.fini2)
*(.fini1)
*(.fini1)
*(.fini0)
.fini0 0x0000047c 0x2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o)
*(.fini0)
0x0000047e _etext = .
 
.data 0x00800060 0x2 load address 0x0000047e
0x00800060 PROVIDE (__data_start, .)
*(.data)
.data 0x00800060 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
.data 0x00800060 0x1 main.o
0x00800060 UebertragungAbgeschlossen
.data 0x00800061 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o)
.data 0x00800061 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o)
.data 0x00800061 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o)
*(.data*)
*(.rodata)
*(.rodata*)
*(.gnu.linkonce.d*)
0x00800062 . = ALIGN (0x2)
*fill* 0x00800061 0x1 00
0x00800062 _edata = .
0x00800062 PROVIDE (__data_end, .)
 
.bss 0x00800062 0xea
0x00800062 PROVIDE (__bss_start, .)
*(.bss)
.bss 0x00800062 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
.bss 0x00800062 0xc main.o
0x00800062 SioTmp
0x00800063 NeuerDatensatzEmpfangen
0x00800064 CntCrcError
0x00800065 AnzahlEmpfangsBytes
.bss 0x0080006e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_exit.o)
.bss 0x0080006e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_copy_data.o)
.bss 0x0080006e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr4\libgcc.a(_clear_bss.o)
*(.bss*)
*(COMMON)
COMMON 0x0080006e 0xde main.o
0x0080006e VersionInfo
0x00800071 Exception
0x00800073 RxdBuffer
0x008000d7 TxdBuffer
0x0080013b AnalogData
0x0080014c PROVIDE (__bss_end, .)
0x0000047e __data_load_start = LOADADDR (.data)
0x00000480 __data_load_end = (__data_load_start + SIZEOF (.data))
 
.noinit 0x0080014c 0x0
0x0080014c PROVIDE (__noinit_start, .)
*(.noinit*)
0x0080014c PROVIDE (__noinit_end, .)
0x0080014c _end = .
0x0080014c PROVIDE (__heap_start, .)
 
.eeprom 0x00810000 0x0
*(.eeprom*)
0x00810000 __eeprom_end = .
 
.stab 0x00000000 0x378
*(.stab)
.stab 0x00000000 0x378 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
 
.stabstr 0x00000000 0x71
*(.stabstr)
.stabstr 0x00000000 0x71 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/crtm8.o
 
.stab.excl
*(.stab.excl)
 
.stab.exclstr
*(.stab.exclstr)
 
.stab.index
*(.stab.index)
 
.stab.indexstr
*(.stab.indexstr)
 
.comment
*(.comment)
 
.debug
*(.debug)
 
.line
*(.line)
 
.debug_srcinfo
*(.debug_srcinfo)
 
.debug_sfnames
*(.debug_sfnames)
 
.debug_aranges 0x00000000 0x20
*(.debug_aranges)
.debug_aranges
0x00000000 0x20 main.o
 
.debug_pubnames
0x00000000 0x11d
*(.debug_pubnames)
.debug_pubnames
0x00000000 0x11d main.o
 
.debug_info 0x00000000 0x3bf
*(.debug_info)
.debug_info 0x00000000 0x3bf main.o
*(.gnu.linkonce.wi.*)
 
.debug_abbrev 0x00000000 0x11c
*(.debug_abbrev)
.debug_abbrev 0x00000000 0x11c main.o
 
.debug_line 0x00000000 0x367
*(.debug_line)
.debug_line 0x00000000 0x367 main.o
 
.debug_frame 0x00000000 0x70
*(.debug_frame)
.debug_frame 0x00000000 0x70 main.o
 
.debug_str 0x00000000 0x1dc
*(.debug_str)
.debug_str 0x00000000 0x1dc main.o
0x236 (size before relaxing)
 
.debug_loc 0x00000000 0x220
*(.debug_loc)
.debug_loc 0x00000000 0x220 main.o
 
.debug_macinfo
*(.debug_macinfo)
OUTPUT(main.elf elf32-avr)
LOAD linker stubs
/Microsoft Robotics Studio/Roboboard/main.srec
0,0 → 1,75
S00C00006D61696E2E7372656373
S113000012C02CC02BC02AC029C028C027C026C0BB
S113001025C024C023C05CC021C025C01FC01EC091
S11300201DC01CC01BC011241FBECFE5D4E0DEBF21
S1130030CDBF10E0A0E6B0E0EEE7F4E002C005902A
S11300400D92A236B107D9F711E0A2E6B0E001C0E3
S11300501D92AC34B107E1F7D4D110C2D1CF8CB921
S113006080E090E008951F920F920FB60F92112432
S11300708F939F93EF93FF93809160008823D9F42B
S113008080916C0090916D00019690936D00809327
S11300906C00FC01E952FF4FE081ED3019F0843629
S11300A0910539F410926D0010926C0081E08093F8
S11300B06000ECB904C010926D0010926C00FF91C6
S11300C0EF919F918F910F900FBE0F901F901895F5
S11300D01F920F920FB60F9211242F933F934F93B9
S11300E05F936F937F938F939F93AF93BF93EF939C
S11300F0FF938CB18093620050916700543610F0E6
S113010010926600809162008D3009F056C0809193
S11301106600823009F051C010926600652F77277F
S1130120FB01329723E730E0E20FF31F4081CB015C
S11301300197DC01A20FB31F2C9180916A0090916A
S11301406B00841B9109821B91099F7090936B0033
S113015080936A009C010024220F331F001C220F8D
S1130160331F001C232F302D235C209369008F73D1
S1130170382F335C309368008081281729F48C91E0
S1130180381711F491E006C0809164008F5F80936A
S1130190640090E080916300882309F06CC0992387
S11301A009F469C081E08093630050936500FB010A
S11301B0ED58FF4F8DE080835EC0809166008130F2
S11301C001F1813020F0823009F053C035C08091B4
S11301D06200833239F480916300882319F481E04A
S11301E080936600809162008093730081E0809325
S11301F0670080916200992790936B0080936A0056
S11302003AC082E08093660080916200E3E7F0E008
S1130210E50FF11D8083852F8F5F80936700209108
S1130220620080916A0090916B00820F911D9093FF
S11302306B0080936A001FC080916200E3E7F0E0E6
S1130240E50FF11D8083543628F4852F8F5F80934A
S1130250670002C0109266002091620080916A00DB
S113026090916B00820F911D90936B0080936A00B4
S113027002C010926600FF91EF91BF91AF919F91E0
S11302808F917F916F915F914F913F912F910F903B
S11302900FBE0F901F901895DC01892B29F420E0E4
S11302A030E0A0E0B0E011C020E030E040E050E0F9
S11302B067ED70E0FA01E60FF71F8081280F311D0A
S11302C04F5F5F4FA417B507A9F73F70C90100241A
S11302D0880F991F001C880F991F001C892F902DCF
S11302E0835C47ED50E0FD01E40FF51F8083119618
S11302F02F73235CFD01E40FF51F20831196A40FD7
S1130300B51F8DE08C93109260008091D7008CB95A
S11303100895FF920F931F93CF93DF938A01722F57
S113032093E29093D7006093D8008093D90022235E
S113033019F4A3E0B0E05DC0A3E0B0E060E0C7ED75
S1130340D0E0F801E60FF11D90816F5F715019F450
S1130350FF2440E00FC0F801E60FF11D40816F5FFC
S1130360715011F4FF2406C0F801E60FF11DF0806E
S11303706F5F7150892F86958695835CFD01EC0F24
S1130380FD1F8083FD0131965527892F992783709E
S1130390907082959295907F9827807F98279A01F4
S11303A0329522952F7023273F702327822B835C5D
S11303B0EC0FFD1F8083FD0132964F705070440F87
S11303C0551F440F551F8F2D8295869586958370F2
S11303D0842B835CEC0FFD1F8083FD0133968F2DEE
S11303E08F73835CEC0FFD1F80831496772309F0D1
S11303F0A8CFCD0151DFDF91CF911F910F91FF90D5
S113040008950F931F93CF93DF9381E080936E0041
S113041010926F008093700082E080933B011092F1
S1130420710080E182BB11BA1BB888ED8AB986E8F5
S113043080BD10BC8BE089B97894109263000EE6FD
S113044010E0C1E7D0E0809163008130E1F7809152
S11304507600813019F0823039F40DC023E0A80110
S113046060E088E556DF07C01092720023E0AE0119
S111047060E088E54EDF10926300E5CFFFCF19
S105047E010077
S9030000FC