mirror of
				https://github.com/thelsing/knx.git
				synced 2025-10-26 10:26:25 +01:00 
			
		
		
		
	Get rid of occsional fails during ETS programming (#200)
- happens just with large applications - occured mainly on SAMD platform - new crc16ccitt algorithm without additional buffer - reorder groupObjTable in memory for less fragmentation Co-authored-by: Waldemar Porscha <waldemar.porscha@sap.com>
This commit is contained in:
		
							parent
							
								
									e12a074e07
								
							
						
					
					
						commit
						d43703f7bd
					
				| @ -23,9 +23,9 @@ BauSystemBDevice::BauSystemBDevice(Platform& platform) : | |||||||
|     _transLayer.groupAddressTable(_addrTable); |     _transLayer.groupAddressTable(_addrTable); | ||||||
| 
 | 
 | ||||||
|     _memory.addSaveRestore(&_deviceObj); |     _memory.addSaveRestore(&_deviceObj); | ||||||
|  |     _memory.addSaveRestore(&_groupObjTable); // changed order for better memory management
 | ||||||
|     _memory.addSaveRestore(&_addrTable); |     _memory.addSaveRestore(&_addrTable); | ||||||
|     _memory.addSaveRestore(&_assocTable); |     _memory.addSaveRestore(&_assocTable); | ||||||
|     _memory.addSaveRestore(&_groupObjTable); |  | ||||||
| #ifdef USE_DATASECURE | #ifdef USE_DATASECURE | ||||||
|     _memory.addSaveRestore(&_secIfObj); |     _memory.addSaveRestore(&_secIfObj); | ||||||
| #endif | #endif | ||||||
|  | |||||||
| @ -124,21 +124,19 @@ uint64_t sixBytesToUInt64(uint8_t* data) | |||||||
| 
 | 
 | ||||||
| uint16_t crc16Ccitt(uint8_t* input, uint16_t length) | uint16_t crc16Ccitt(uint8_t* input, uint16_t length) | ||||||
| { | { | ||||||
|         uint32_t polynom = 0x1021; |     uint32_t polynom = 0x1021; | ||||||
|         uint8_t padded[length+2]; |  | ||||||
| 
 | 
 | ||||||
|         memcpy(padded, input, length); |     uint32_t result = 0xffff; | ||||||
|         memset(padded+length, 0x00, 2); |     for (uint32_t i = 0; i < 8 * ((uint32_t)length + 2); i++) | ||||||
| 
 |     { | ||||||
|         uint32_t result = 0xffff; |         result <<= 1; | ||||||
|         for (uint32_t i = 0; i < 8 * (uint32_t)sizeof(padded); i++) { |         uint32_t nextBit; | ||||||
|             result <<= 1; |         nextBit = ((i / 8) < length) ? ((input[i / 8] >> (7 - (i % 8))) & 0x1) : 0; | ||||||
|             uint32_t nextBit = (padded[i / 8] >> (7 - (i % 8))) & 0x1; |         result |= nextBit; | ||||||
|             result |= nextBit; |         if ((result & 0x10000) != 0) | ||||||
|             if ((result & 0x10000) != 0) |             result ^= polynom; | ||||||
|                 result ^= polynom; |     } | ||||||
|         } |     return result & 0xffff; | ||||||
|         return result & 0xffff; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| uint16_t crc16Dnp(uint8_t* input, uint16_t length) | uint16_t crc16Dnp(uint8_t* input, uint16_t length) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user