Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: telemetry_car_demo telemetry_demo_FRDM-TFC telemetry_example_01 telemetry_indexed_data_demo ... more
crc16.cpp@2:b7a3ac7bcec8, 2016-02-11 (annotated)
- Committer:
- Overdrivr
- Date:
- Thu Feb 11 08:10:08 2016 +0000
- Revision:
- 2:b7a3ac7bcec8
- Parent:
- 0:3a30eba5d8f7
Replaced MODSERIAL by BufferedSerial for increasing amount of supported devices
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Overdrivr | 0:3a30eba5d8f7 | 1 | #include "crc16.hpp" |
| Overdrivr | 0:3a30eba5d8f7 | 2 | |
| Overdrivr | 0:3a30eba5d8f7 | 3 | uint16_t crc16(uint8_t* data, uint32_t len) |
| Overdrivr | 0:3a30eba5d8f7 | 4 | { |
| Overdrivr | 0:3a30eba5d8f7 | 5 | uint16_t rem = 0; |
| Overdrivr | 0:3a30eba5d8f7 | 6 | for(uint16_t i = 0 ; i < len ; i++) |
| Overdrivr | 0:3a30eba5d8f7 | 7 | { |
| Overdrivr | 0:3a30eba5d8f7 | 8 | rem = crc16_recursive(data[i],rem); |
| Overdrivr | 0:3a30eba5d8f7 | 9 | } |
| Overdrivr | 0:3a30eba5d8f7 | 10 | return rem; |
| Overdrivr | 0:3a30eba5d8f7 | 11 | } |
| Overdrivr | 0:3a30eba5d8f7 | 12 | |
| Overdrivr | 0:3a30eba5d8f7 | 13 | uint16_t crc16_recursive(uint8_t byte, uint16_t remainder) |
| Overdrivr | 0:3a30eba5d8f7 | 14 | { |
| Overdrivr | 0:3a30eba5d8f7 | 15 | uint16_t n = 16; |
| Overdrivr | 0:3a30eba5d8f7 | 16 | |
| Overdrivr | 0:3a30eba5d8f7 | 17 | remainder = remainder ^ (byte << (n-8)); |
| Overdrivr | 0:3a30eba5d8f7 | 18 | |
| Overdrivr | 0:3a30eba5d8f7 | 19 | for(uint16_t j = 1 ; j < 8 ; j++) |
| Overdrivr | 0:3a30eba5d8f7 | 20 | { |
| Overdrivr | 0:3a30eba5d8f7 | 21 | if(remainder & 0x8000) |
| Overdrivr | 0:3a30eba5d8f7 | 22 | { |
| Overdrivr | 0:3a30eba5d8f7 | 23 | remainder = (remainder << 1) ^ 0x1021; |
| Overdrivr | 0:3a30eba5d8f7 | 24 | } |
| Overdrivr | 0:3a30eba5d8f7 | 25 | else |
| Overdrivr | 0:3a30eba5d8f7 | 26 | { |
| Overdrivr | 0:3a30eba5d8f7 | 27 | remainder = remainder << 1; |
| Overdrivr | 0:3a30eba5d8f7 | 28 | } |
| Overdrivr | 0:3a30eba5d8f7 | 29 | remainder &= 0xffff; |
| Overdrivr | 0:3a30eba5d8f7 | 30 | } |
| Overdrivr | 0:3a30eba5d8f7 | 31 | |
| Overdrivr | 0:3a30eba5d8f7 | 32 | return remainder; |
| Overdrivr | 0:3a30eba5d8f7 | 33 | } |