2023-06-22 12:50:03 -04:00
|
|
|
|
|
|
|
[![Arduino CI](https://github.com/RobTillaart/integer24/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
|
|
|
|
[![Arduino-lint](https://github.com/RobTillaart/integer24/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/integer24/actions/workflows/arduino-lint.yml)
|
|
|
|
[![JSON check](https://github.com/RobTillaart/integer24/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/integer24/actions/workflows/jsoncheck.yml)
|
|
|
|
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/integer24/blob/master/LICENSE)
|
|
|
|
[![GitHub release](https://img.shields.io/github/release/RobTillaart/integer24.svg?maxAge=3600)](https://github.com/RobTillaart/integer24/releases)
|
|
|
|
|
|
|
|
|
|
|
|
# integer24
|
|
|
|
|
|
|
|
Arduino library for the integer24 data types uint24_t and int24_t.
|
|
|
|
|
|
|
|
|
|
|
|
## Description
|
|
|
|
|
|
|
|
The integer24 is an **experimental** library to implement support
|
|
|
|
for the following two 24 bit data types:
|
|
|
|
- **int24_t**
|
|
|
|
- **uint24_t**
|
|
|
|
|
|
|
|
Version 0.1.0 implements a **typedef** for both types.
|
|
|
|
|
|
|
|
Note: AVR does support __uint24 and __int24 which uses only 3 bytes.
|
2023-06-27 12:28:02 -04:00
|
|
|
This allows an UNO to have ~30% more elements (in theory).
|
|
|
|
|
|
|
|
This library is only (limited) tested with AVR - UNO.
|
|
|
|
So use with care.
|
2023-06-22 12:50:03 -04:00
|
|
|
|
|
|
|
|
|
|
|
#### Range
|
|
|
|
|
|
|
|
| platform | type | minimum | maximum | notes |
|
|
|
|
|:----------:|:----------:|:-----------:|:----------:|:-----------|
|
|
|
|
| AVR | uint24_t | 0 | 16777215 | __uint24 |
|
|
|
|
| AVR | int24_t | -8388608 | 8388607 | __int24 |
|
|
|
|
| other | uint24_t | 0 | 4294967296 | uint32_t for now |
|
|
|
|
| other | int24_t | -2147483648 | 2147483648 | int32_t for now |
|
|
|
|
|
|
|
|
Note the range for other platforms may change in the future to
|
|
|
|
those matching AVR.
|
|
|
|
|
|
|
|
If other platforms are known to implement (3byte) int24 data types
|
2023-06-27 12:28:02 -04:00
|
|
|
please let me know so I can add these.
|
2023-06-22 12:50:03 -04:00
|
|
|
|
|
|
|
|
|
|
|
#### Known limitations
|
|
|
|
|
|
|
|
- The AVR uint24_t and int24_t cannot be printed without casting.
|
2023-06-27 12:28:02 -04:00
|
|
|
- see integer24_explore_printing.ino
|
2023-06-22 12:50:03 -04:00
|
|
|
- Arduino-CI does not implement __int24 __uint24 so no tests can be done.
|
|
|
|
|
|
|
|
|
|
|
|
## Future
|
|
|
|
|
|
|
|
#### Must
|
|
|
|
|
|
|
|
- get hands on experience, especially AVR
|
2023-06-27 12:28:02 -04:00
|
|
|
- document what is learned.
|
|
|
|
|
2023-06-22 12:50:03 -04:00
|
|
|
|
|
|
|
#### Should
|
|
|
|
|
2023-06-27 12:28:02 -04:00
|
|
|
- implement **char \* convert24(int24_t)** and **char \* convert24(uint24_t)**
|
|
|
|
- length = 8 + \0 = 9
|
|
|
|
- fprintf(buf, "%d", (uint32_t)val); ?
|
|
|
|
- char * itoa ( int value, char * str, int base );
|
|
|
|
- see integer24_explore_printing.ino
|
2023-06-22 12:50:03 -04:00
|
|
|
|
|
|
|
#### Could
|
|
|
|
|
2023-06-27 12:28:02 -04:00
|
|
|
- implement a class for both types
|
2023-06-22 12:50:03 -04:00
|
|
|
- implement **printTo()**
|
2023-06-27 12:28:02 -04:00
|
|
|
- basic math, comparison, negation, ...
|
2023-06-22 12:50:03 -04:00
|
|
|
|
|
|
|
#### Won't
|
|
|
|
|