Advertisement
petrdynin

8 bit

Feb 28th, 2025
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.81 KB | None | 0 0
  1. #ifdef BRANCH_PREDICTION
  2.  
  3. #define ARRAY_SIZE 256
  4. #define MIN   2               //sorted - 0x261a, random - 0x2620
  5. #define MID   ARRAY_SIZE/2    //sorted - 0x2716, random - 0x272c
  6. #define MAX   ARRAY_SIZE-2    //sorted - 0x2812, random - 0x2812
  7.  
  8.  
  9. volatile uint32_t time_unsorted;
  10. volatile uint32_t time_sort_min, time_sort_max, time_sort_mid;
  11.  
  12. volatile uint32_t start_time, end_time;
  13.  
  14. volatile uint8_t sorted_array[ARRAY_SIZE];
  15. volatile uint8_t unsorted_array[ARRAY_SIZE];
  16.  
  17. volatile uint32_t cnt_tick;
  18.  
  19.  
  20. volatile uint32_t dummy = 0;
  21.  
  22. void SysTick_Init(void){
  23.    SysTick->SR = 0;
  24.    SysTick->CNT = 0;
  25.    SysTick->CTLR = 5;
  26. }
  27.  
  28.  
  29. static uint32_t random_seed = 123456789;
  30.  
  31. uint16_t rand_xorshift() {
  32.     random_seed ^= random_seed << 13;
  33.     random_seed ^= random_seed >> 17;
  34.     random_seed ^= random_seed << 5;
  35.     return (uint16_t)(random_seed & 0x00FF);
  36. }
  37.  
  38. uint32_t measure_time(volatile uint8_t *array, uint16_t treshold) {
  39.  
  40.    start_time = SysTick->CNT;
  41.    for (uint32_t i = 0; i < ARRAY_SIZE; i++) {
  42.         if (array[i] > (uint8_t)treshold){
  43.             dummy++;
  44.          } else {
  45.            asm volatile("nop");
  46.            dummy--;
  47.          }
  48.     }
  49.     end_time = SysTick->CNT;
  50.     return end_time - start_time;
  51. }
  52.  
  53. int main() {
  54.  
  55.    SysTick_Init();
  56.  
  57.    for (uint32_t i = 0; i < ARRAY_SIZE; i++) {
  58.         sorted_array[i] = (uint8_t)i;
  59.         //unsorted_array[i] = (uint16_t)rand_xorshift();
  60.         unsorted_array[i] = 1;
  61.        }
  62.  
  63.    while (1){
  64.       time_unsorted = measure_time(unsorted_array,(uint16_t)MID);
  65.       time_sort_min = measure_time(sorted_array,  (uint16_t)MIN);
  66.       time_sort_mid = measure_time(sorted_array,  (uint16_t)MID);
  67.       time_sort_max = measure_time(sorted_array,  (uint16_t)MAX);
  68.  
  69.       cnt_tick = SysTick->CNT;
  70.       asm("nop");
  71.     }
  72. }
  73. #endif
  74.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement