pico-sdk/test/pico_stdlib_test/pico_stdlib_test.c

103 lines
3.0 KiB
C

/*
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <stdio.h>
#include <inttypes.h>
#include "pico/stdlib.h"
#include "pico/bit_ops.h"
#include <stdlib.h>
void test_builtin_bitops() {
int32_t x = 0;
for (uint32_t i = 0; i < 10000; i++) {
uint32_t vals32[] = {
i,
1u << (i & 31u),
i * 12355821u,
};
uint64_t vals64[] = {
i,
1ull << (i & 63u),
i * 12345678123125ull,
};
for(int j=0; j<count_of(vals32); j++) {
x += __builtin_popcount(vals32[j]);
x += __builtin_popcountl(vals32[j]);
x += (int32_t)__rev(vals32[j]);
#if !PICO_ON_DEVICE
// the following functions are undefined on host mode, but on RP2040 we return 32
if (vals32[j]) {
x += __builtin_clz(vals32[j]);
x += __builtin_ctz(vals32[j]);
} else {
x += 64;
}
#else
x += __builtin_clz(vals32[j]);
x += __builtin_ctz(vals32[j]);
// check l variants are the same
if (__builtin_clz(vals32[j]) != __builtin_clzl(vals32[j])) x += 17;
if (__builtin_ctz(vals32[j]) != __builtin_ctzl(vals32[j])) x += 23;
#endif
}
for(int j=0; j<count_of(vals64); j++) {
x += __builtin_popcountll(vals64[j]);
x += (int32_t)__revll(vals64[j]);
#if !PICO_ON_DEVICE
// the following functions are undefined on host mode, but on RP2040 we return 64
if (!vals64[j]) {
x += 128;
continue;
}
#endif
x += __builtin_clzll(vals64[j]);
x += __builtin_ctzll(vals64[j]);
}
}
printf("Count is %d\n", (int)x);
int32_t expected = 1475508680;
if (x != expected) {
printf("FAILED (expected count %d\n", (int) expected);
exit(1);
}
}
int main() {
setup_default_uart();
puts("Hellox, world!");
printf("Hello world %d\n", 2);
#if PICO_NO_HARDWARE
puts("This is native");
#endif
#if PICO_NO_FLASH
puts("This is no flash");
#endif
for (int i = 0; i < 64; i++) {
uint32_t x = 1 << i;
uint64_t xl = 1ull << i;
// printf("%d %u %u %u %u \n", i, (uint)(x%10u), (uint)(x%16u), (uint)(xl %10u), (uint)(xl%16u));
printf("%08x %08x %016llx %016llx\n", (uint) x, (uint) __rev(x), (unsigned long long) xl,
(unsigned long long) __revll(xl));
}
test_builtin_bitops();
for (int i = 0; i < 8; i++) {
sleep_ms(500);
printf( "%" PRIu64 "\n", to_us_since_boot(get_absolute_time()));
}
absolute_time_t until = delayed_by_us(get_absolute_time(), 500000);
printf("\n");
for (int i = 0; i < 8; i++) {
sleep_until(until);
printf("%" PRIu64 "\n", to_us_since_boot(get_absolute_time()));
until = delayed_by_us(until, 500000);
}
puts("DONE");
}