diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -39,6 +39,7 @@ SRC+=stm32l1xx_it.c SRC+=system_stm32l1xx.c SRC+=stm32l100c_discovery.c SRC+=ssd1306.c +SRC+=stringhelpers.c # Discovery Source Files #SRC+=stm32f4_discovery_lis302dl.c diff --git a/main.c b/main.c --- a/main.c +++ b/main.c @@ -7,6 +7,7 @@ #include "usb_lib.h" #include "usb_desc.h" #include "usb_pwr.h" +#include "stringhelpers.h" #define SSR_PERIOD 200 @@ -46,75 +47,6 @@ enum state { }; -char* itoa(int16_t i, char b[]){ - char const digit[] = "0123456789"; - char* p = b; - if(i<0){ - *p++ = '-'; - i *= -1; - } - uint16_t shifter = i; - do{ //Move to where representation ends - ++p; - shifter = shifter/10; - }while(shifter); - *p = '\0'; - do{ //Move back, inserting digits as you go - *--p = digit[i%10]; - i = i/10; - }while(i); - return b; -} - -char* itoa_fp(int16_t i, uint8_t frac, char b[]){ - char const digit[] = "0123456789"; - - // set p to beginning of char array - char* p = b; - - // If negative, set current char to '-' and inc, unnegate number - if(i<0){ - *p++ = '-'; - i *= -1; - } - - // Init shifter to numeric value - uint16_t shifter = i; - uint16_t frac_shifter = frac; - - // Iterate through 10s places, incrementing text pointer as we go - do{ - ++p; - shifter = shifter/10; - }while(shifter); - - ++p; // increment for decimal point - - do{ - ++p; - frac_shifter = frac_shifter/10; - }while(frac_shifter); - - - // Null-terminate the string - *p = '\0'; - - // Go backwards and write out fractional digits - do{ - *--p = digit[frac%10]; - frac = frac/10; - }while(frac); - - *--p = '.'; // insert decimal point - - // Go backwards and write out remaining digits - do{ - *--p = digit[i%10]; - i = i/10; - }while(i); - return b; -} - static __IO uint32_t TimingDelay; diff --git a/stringhelpers.c b/stringhelpers.c new file mode 100644 --- /dev/null +++ b/stringhelpers.c @@ -0,0 +1,72 @@ +#include + +char* itoa(int16_t i, char b[]){ + + char const digit[] = "0123456789"; + char* p = b; + if(i<0){ + *p++ = '-'; + i *= -1; + } + uint16_t shifter = i; + do{ //Move to where representation ends + ++p; + shifter = shifter/10; + }while(shifter); + *p = '\0'; + do{ //Move back, inserting digits as you go + *--p = digit[i%10]; + i = i/10; + }while(i); + return b; +} + +char* itoa_fp(int16_t i, uint8_t frac, char b[]){ + char const digit[] = "0123456789"; + + // set p to beginning of char array + char* p = b; + + // If negative, set current char to '-' and inc, unnegate number + if(i<0){ + *p++ = '-'; + i *= -1; + } + + // Init shifter to numeric value + uint16_t shifter = i; + uint16_t frac_shifter = frac; + + // Iterate through 10s places, incrementing text pointer as we go + do{ + ++p; + shifter = shifter/10; + }while(shifter); + + ++p; // increment for decimal point + + do{ + ++p; + frac_shifter = frac_shifter/10; + }while(frac_shifter); + + + // Null-terminate the string + *p = '\0'; + + // Go backwards and write out fractional digits + do{ + *--p = digit[frac%10]; + frac = frac/10; + }while(frac); + + *--p = '.'; // insert decimal point + + // Go backwards and write out remaining digits + do{ + *--p = digit[i%10]; + i = i/10; + }while(i); + return b; +} + diff --git a/stringhelpers.h b/stringhelpers.h new file mode 100644 --- /dev/null +++ b/stringhelpers.h @@ -0,0 +1,7 @@ +#ifndef STRINGHELPERS_H +#define STRINGHELPERS_H + +char* itoa(int16_t i, char b[]); +char* itoa_fp(int16_t i, uint8_t frac, char b[]); + +#endif