diff --git a/pico-sdk/src/rp2_common/pico_clib_interface/newlib_interface.c b/pico-sdk/src/rp2_common/pico_clib_interface/newlib_interface.c index 8925e546409438526fa0d4c5e8d3ed0bcc31df9b..917714fa6957e7c582a052543fc722f489392ca1 100644 --- a/pico-sdk/src/rp2_common/pico_clib_interface/newlib_interface.c +++ b/pico-sdk/src/rp2_common/pico_clib_interface/newlib_interface.c @@ -33,21 +33,25 @@ extern char __StackLimit; /* Set by linker. */ -#define STDIO_HANDLE_STDIN 0 +#define STDIO_HANDLE_STDIN 0 #define STDIO_HANDLE_STDOUT 1 #define STDIO_HANDLE_STDERR 2 -void __attribute__((noreturn)) __weak _exit(__unused int status) { +void __attribute__((noreturn)) __weak _exit(__unused int status) +{ #if PICO_ENTER_USB_BOOT_ON_EXIT - reset_usb_boot(0,0); + reset_usb_boot(0, 0); #else - while (1) { + while (1) + { + __breakpoint(); } #endif } -__weak void *_sbrk(int incr) { +__weak void *_sbrk(int incr) +{ extern char end; /* Set by linker. */ static char *heap_end; char *prev_heap_end; @@ -58,26 +62,30 @@ __weak void *_sbrk(int incr) { prev_heap_end = heap_end; char *next_heap_end = heap_end + incr; - if (__builtin_expect(next_heap_end > (&__StackLimit), false)) { + if (__builtin_expect(next_heap_end > (&__StackLimit), false)) + { #if PICO_USE_OPTIMISTIC_SBRK - if (heap_end == &__StackLimit) { -// errno = ENOMEM; - return (char *) -1; + if (heap_end == &__StackLimit) + { + // errno = ENOMEM; + return (char *)-1; } next_heap_end = &__StackLimit; #else - return (char *) -1; + return (char *)-1; #endif } heap_end = next_heap_end; - return (void *) prev_heap_end; + return (void *)prev_heap_end; } static int64_t epoch_time_us_since_boot; -__weak int _gettimeofday (struct timeval *__restrict tv, __unused void *__restrict tz) { - if (tv) { +__weak int _gettimeofday(struct timeval *__restrict tv, __unused void *__restrict tz) +{ + if (tv) + { int64_t us_since_epoch = ((int64_t)to_us_since_boot(get_absolute_time())) - epoch_time_us_since_boot; tv->tv_sec = (time_t)(us_since_epoch / 1000000); tv->tv_usec = (suseconds_t)(us_since_epoch % 1000000); @@ -85,15 +93,18 @@ __weak int _gettimeofday (struct timeval *__restrict tv, __unused void *__restri return 0; } -__weak int settimeofday(__unused const struct timeval *tv, __unused const struct timezone *tz) { - if (tv) { +__weak int settimeofday(__unused const struct timeval *tv, __unused const struct timezone *tz) +{ + if (tv) + { int64_t us_since_epoch = tv->tv_sec * 1000000 + tv->tv_usec; epoch_time_us_since_boot = (int64_t)to_us_since_boot(get_absolute_time()) - us_since_epoch; } return 0; } -__weak int _times(struct tms *tms) { +__weak int _times(struct tms *tms) +{ #if CLOCKS_PER_SEC >= 1000000 tms->tms_utime = (clock_t)(to_us_since_boot(get_absolute_time()) * (CLOCKS_PER_SEC / 1000000)); #else @@ -105,26 +116,32 @@ __weak int _times(struct tms *tms) { return 0; } -__weak pid_t _getpid(void) { +__weak pid_t _getpid(void) +{ return 0; } -__weak int _kill(__unused pid_t pid, __unused int sig) { +__weak int _kill(__unused pid_t pid, __unused int sig) +{ return -1; } -int __attribute__((weak)) _read(int handle, char *buffer, int length) { +int __attribute__((weak)) _read(int handle, char *buffer, int length) +{ #if LIB_PICO_STDIO - if (handle == STDIO_HANDLE_STDIN) { + if (handle == STDIO_HANDLE_STDIN) + { return stdio_get_until(buffer, length, at_the_end_of_time); } #endif return -1; } -int __attribute__((weak)) _write(int handle, char *buffer, int length) { +int __attribute__((weak)) _write(int handle, char *buffer, int length) +{ #if LIB_PICO_STDIO - if (handle == STDIO_HANDLE_STDOUT || handle == STDIO_HANDLE_STDERR) { + if (handle == STDIO_HANDLE_STDOUT || handle == STDIO_HANDLE_STDERR) + { stdio_put_string(buffer, length, false, true); return length; } @@ -132,35 +149,41 @@ int __attribute__((weak)) _write(int handle, char *buffer, int length) { return -1; } -int __attribute__((weak)) _open(__unused const char *fn, __unused int oflag, ...) { +int __attribute__((weak)) _open(__unused const char *fn, __unused int oflag, ...) +{ return -1; } -int __attribute__((weak)) _close(__unused int fd) { +int __attribute__((weak)) _close(__unused int fd) +{ return -1; } -off_t __attribute__((weak)) _lseek(__unused int fd, __unused off_t pos, __unused int whence) { +off_t __attribute__((weak)) _lseek(__unused int fd, __unused off_t pos, __unused int whence) +{ return -1; } -int __attribute__((weak)) _fstat(__unused int fd, __unused struct stat *buf) { +int __attribute__((weak)) _fstat(__unused int fd, __unused struct stat *buf) +{ return -1; } -int __attribute__((weak)) _isatty(int fd) { +int __attribute__((weak)) _isatty(int fd) +{ return fd == STDIO_HANDLE_STDIN || fd == STDIO_HANDLE_STDOUT || fd == STDIO_HANDLE_STDERR; } // exit is not useful... no desire to pull in __call_exitprocs -void exit(int status) { +void exit(int status) +{ _exit(status); } // incorrect warning from GCC 6 GCC_Pragma("GCC diagnostic push") -GCC_Pragma("GCC diagnostic ignored \"-Wsuggest-attribute=format\"") -void __weak __assert_func(const char *file, int line, const char *func, const char *failedexpr) { + GCC_Pragma("GCC diagnostic ignored \"-Wsuggest-attribute=format\"") void __weak __assert_func(const char *file, int line, const char *func, const char *failedexpr) +{ weak_raw_printf("assertion \"%s\" failed: file \"%s\", line %d%s%s\n", failedexpr, file, line, func ? ", function: " : "", func ? func : ""); @@ -169,9 +192,11 @@ void __weak __assert_func(const char *file, int line, const char *func, const ch } GCC_Pragma("GCC diagnostic pop") -void runtime_init(void) { + void runtime_init(void) +{ #ifndef NDEBUG - if (__get_current_exception()) { + if (__get_current_exception()) + { // crap; started in exception handler __breakpoint(); } @@ -185,7 +210,7 @@ void runtime_init(void) { // todo maybe we want to do this in the future, but it does stuff like register_tm_clones // which we didn't do in previous SDKs - //extern void __libc_init_array(void); + // extern void __libc_init_array(void); //__libc_init_array(); // ... so instead just do the __preinit_array @@ -193,7 +218,8 @@ void runtime_init(void) { // ... and the __init_array extern void (*__init_array_start)(void); extern void (*__init_array_end)(void); - for (void (**p)(void) = &__init_array_start; p < &__init_array_end; ++p) { + for (void (**p)(void) = &__init_array_start; p < &__init_array_end; ++p) + { (*p)(); } } \ No newline at end of file diff --git a/src/main.c b/src/main.c index a8066127d4d74d3dd29276461e7669168afb81cb..e2d515bf714f6a9b0aed76ccc42cacc115a8b697 100644 --- a/src/main.c +++ b/src/main.c @@ -108,6 +108,7 @@ const uint8_t better_matrix[65][17] = { void set_progress(double percentage) { + int numerator = (percentage * 32) / 100; for (int i = 0; i <= numerator; i++) @@ -152,15 +153,15 @@ int main() gpio_set_function(28, GPIO_FUNC_PWM); - uint slice_num = pwm_gpio_to_slice_num(28); + volatile uint slice_num = pwm_gpio_to_slice_num(28); pwm_set_clkdiv(slice_num, 133); pwm_set_wrap(slice_num, 0xFFFF); pwm_set_chan_level(slice_num, PWM_CHAN_A, 10); pwm_set_enabled(slice_num, true); - uint another_slice_num = pwm_gpio_to_slice_num(27); + volatile uint another_slice_num = pwm_gpio_to_slice_num(27); - pwm_set_clkdiv(another_slice_num, 133); + pwm_set_clkdiv(another_slice_num, 1); pwm_set_wrap(another_slice_num, 0xFFFF); pwm_set_clkdiv_mode(another_slice_num, PWM_DIV_FREE_RUNNING); pwm_set_enabled(slice_num, true); @@ -177,13 +178,24 @@ int main() gpio_put(28, false); while (!gpio_get(27)) ; - uint32_t start = time_us_32(); + volatile uint32_t start = time_us_32(); while (gpio_get(27)) ; - uint32_t end = time_us_32(); + volatile uint32_t end = time_us_32(); uint32_t duration = end - start; - volatile float distance = duration * 314 / 2000; + volatile float distance = (duration * 314) / (20000); + if (distance > 20) + { + distance = 20; + } + + distance = 20 - distance; + + volatile int percentage = (distance / 10) * 100; + + set_progress(percentage); + asm("BKPT #0"); } a = 3;