From 58d59b00e21f447ebc98417f0b22321c6aded1e0 Mon Sep 17 00:00:00 2001 From: Tristan Krause Date: Thu, 28 Mar 2019 15:22:17 +0100 Subject: [PATCH] verbesserte Stabilitaet --- B15F.elf | Bin 13340 -> 13624 bytes B15F.hex | 146 ++++++++++++++++++++++++++++----------------------- b15f.aws | 2 +- requests.cpp | 24 +++++++-- usart.cpp | 22 ++++++++ usart.h | 2 + 6 files changed, 126 insertions(+), 70 deletions(-) diff --git a/B15F.elf b/B15F.elf index 93dac8373c8ade165832f87f2d9e3347f8e07315..d3266c5a9f9e34bda1332b8dd7bad142228230cd 100644 GIT binary patch delta 2492 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 + diff --git a/requests.cpp b/requests.cpp index b9e5361..3a83465 100644 --- a/requests.cpp +++ b/requests.cpp @@ -96,10 +96,26 @@ void rqAdcDacStroke() { dac0.setValue(i); wdt_reset(); - uint16_t a = adu.getValue(channel_a); - uint16_t b = adu.getValue(channel_b); - usart.writeInt(a); - usart.writeInt(b); + + union doubleword + { + uint16_t word[2]; + uint8_t byte[4]; + }; + + union doubleword dw; + dw.word[0] = adu.getValue(channel_a); + dw.word[1] = adu.getValue(channel_b); + + uint8_t ret = 0; + do + { + wdt_reset(); + ret = usart.writeBlock(&(dw.byte[0]), 4); + + if(ret == 0) + return; + } while(ret != USART::MSG_OK); } usart.writeByte(USART::MSG_OK); diff --git a/usart.cpp b/usart.cpp index abe48b5..6f470b0 100644 --- a/usart.cpp +++ b/usart.cpp @@ -45,6 +45,28 @@ void USART::writeStr(const char* str, uint8_t len) writeByte(*str++); } +uint8_t USART::writeBlock(uint8_t* ptr, uint8_t len) +{ + writeByte(len); + + uint8_t crc = 0; + while(len--) + { + writeByte(*ptr); + crc ^= *ptr++; + for (uint8_t i = 0; i < 8; i++) + { + if (crc & 1) + crc ^= CRC7_POLY; + crc >>= 1; + } + } + + writeByte(crc); + + return readByte(); +} + uint8_t USART::readByte() { while (!(UCSR0A & (1< constexpr uint32_t BAUDRATE = 115200; // 38400 +constexpr uint8_t CRC7_POLY = 0x91; class USART { @@ -16,6 +17,7 @@ public: void writeInt(uint16_t); void writeLong(uint32_t); void writeStr(const char*, uint8_t); + uint8_t writeBlock(uint8_t*, uint8_t); uint8_t readByte(void); uint16_t readInt(void); uint32_t readLong(void);