delay: Use u8, decrementing loop

Use u8 instead of i16 as a delay can never be negative and should never
block for a long period of time.

Use a decrementing loop as SDCC generates more efficient code.

Signed-off-by: Tim Crawford <tcrawford@system76.com>
This commit is contained in:
Tim Crawford
2021-07-15 14:37:48 -06:00
committed by Jeremy Soller
parent f9e4e25b05
commit e86e18d4b1
2 changed files with 5 additions and 5 deletions

View File

@ -15,8 +15,8 @@ void delay_ticks(uint16_t ticks) {
// Start timer in mode 1 // Start timer in mode 1
TMOD = (TMOD & 0x0F) | 0x10; TMOD = (TMOD & 0x0F) | 0x10;
TH1 = (unsigned char)(value >> 8); TH1 = (uint8_t)(value >> 8);
TL1 = (unsigned char)value; TL1 = (uint8_t)value;
TR1 = 1; TR1 = 1;
// Wait until complete // Wait until complete
@ -24,8 +24,8 @@ void delay_ticks(uint16_t ticks) {
} }
// This loops through delays of one ms in order to avoid overflow // This loops through delays of one ms in order to avoid overflow
void delay_ms(int ms) { void delay_ms(uint8_t ms) {
for (int i = 0; i < ms; i++) { for (uint8_t i = ms; i != 0; i--) {
delay_us(1000); delay_us(1000);
} }
} }

View File

@ -17,6 +17,6 @@ void delay_ticks(uint16_t ticks);
#define delay_ns(X) \ #define delay_ns(X) \
delay_ticks((uint16_t)((((uint32_t)(X)) * 69UL + 89999UL) / 90000UL)); delay_ticks((uint16_t)((((uint32_t)(X)) * 69UL + 89999UL) / 90000UL));
void delay_ms(int ms); void delay_ms(uint8_t ms);
#endif // _ARCH_DELAY_H #endif // _ARCH_DELAY_H