ON Semiconductor / mbed-os

Dependents:   mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510

Committer:
jacobjohnson
Date:
Mon Feb 27 17:45:05 2017 +0000
Revision:
1:f30bdcd2b33b
Parent:
0:098463de4c5d
changed the inputscale from 1 to 7 in analogin_api.c.  This will need to be changed later, and accessed from the main level, but for now this allows the  adc to read a value from 0 to 3.7V, instead of just up to 1V.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-onsemi 0:098463de4c5d 1 /*
group-onsemi 0:098463de4c5d 2 * Profiling framework for the events library
group-onsemi 0:098463de4c5d 3 *
group-onsemi 0:098463de4c5d 4 * Copyright (c) 2016 Christopher Haster
group-onsemi 0:098463de4c5d 5 *
group-onsemi 0:098463de4c5d 6 * Licensed under the Apache License, Version 2.0 (the "License");
group-onsemi 0:098463de4c5d 7 * you may not use this file except in compliance with the License.
group-onsemi 0:098463de4c5d 8 * You may obtain a copy of the License at
group-onsemi 0:098463de4c5d 9 *
group-onsemi 0:098463de4c5d 10 * http://www.apache.org/licenses/LICENSE-2.0
group-onsemi 0:098463de4c5d 11 *
group-onsemi 0:098463de4c5d 12 * Unless required by applicable law or agreed to in writing, software
group-onsemi 0:098463de4c5d 13 * distributed under the License is distributed on an "AS IS" BASIS,
group-onsemi 0:098463de4c5d 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
group-onsemi 0:098463de4c5d 15 * See the License for the specific language governing permissions and
group-onsemi 0:098463de4c5d 16 * limitations under the License.
group-onsemi 0:098463de4c5d 17 */
group-onsemi 0:098463de4c5d 18 #include "equeue.h"
group-onsemi 0:098463de4c5d 19 #include <unistd.h>
group-onsemi 0:098463de4c5d 20 #include <stdio.h>
group-onsemi 0:098463de4c5d 21 #include <setjmp.h>
group-onsemi 0:098463de4c5d 22 #include <stdint.h>
group-onsemi 0:098463de4c5d 23 #include <stdlib.h>
group-onsemi 0:098463de4c5d 24 #include <inttypes.h>
group-onsemi 0:098463de4c5d 25 #include <sys/time.h>
group-onsemi 0:098463de4c5d 26
group-onsemi 0:098463de4c5d 27
group-onsemi 0:098463de4c5d 28 // Performance measurement utils
group-onsemi 0:098463de4c5d 29 #define PROF_RUNS 5
group-onsemi 0:098463de4c5d 30 #define PROF_INTERVAL 100000000
group-onsemi 0:098463de4c5d 31
group-onsemi 0:098463de4c5d 32 #define prof_volatile(t) __attribute__((unused)) volatile t
group-onsemi 0:098463de4c5d 33
group-onsemi 0:098463de4c5d 34 typedef uint64_t prof_cycle_t;
group-onsemi 0:098463de4c5d 35
group-onsemi 0:098463de4c5d 36 static volatile prof_cycle_t prof_start_cycle;
group-onsemi 0:098463de4c5d 37 static volatile prof_cycle_t prof_stop_cycle;
group-onsemi 0:098463de4c5d 38 static prof_cycle_t prof_accum_cycle;
group-onsemi 0:098463de4c5d 39 static prof_cycle_t prof_baseline_cycle;
group-onsemi 0:098463de4c5d 40 static prof_cycle_t prof_iterations;
group-onsemi 0:098463de4c5d 41 static const char *prof_units;
group-onsemi 0:098463de4c5d 42
group-onsemi 0:098463de4c5d 43 #define prof_cycle() ({ \
group-onsemi 0:098463de4c5d 44 uint32_t a, b; \
group-onsemi 0:098463de4c5d 45 __asm__ volatile ("rdtsc" : "=a" (a), "=d" (b)); \
group-onsemi 0:098463de4c5d 46 ((uint64_t)b << 32) | (uint64_t)a; \
group-onsemi 0:098463de4c5d 47 })
group-onsemi 0:098463de4c5d 48
group-onsemi 0:098463de4c5d 49 #define prof_loop() \
group-onsemi 0:098463de4c5d 50 for (prof_iterations = 0; \
group-onsemi 0:098463de4c5d 51 prof_accum_cycle < PROF_INTERVAL; \
group-onsemi 0:098463de4c5d 52 prof_iterations++)
group-onsemi 0:098463de4c5d 53
group-onsemi 0:098463de4c5d 54 #define prof_start() ({ \
group-onsemi 0:098463de4c5d 55 prof_start_cycle = prof_cycle(); \
group-onsemi 0:098463de4c5d 56 })
group-onsemi 0:098463de4c5d 57
group-onsemi 0:098463de4c5d 58 #define prof_stop() ({ \
group-onsemi 0:098463de4c5d 59 prof_stop_cycle = prof_cycle(); \
group-onsemi 0:098463de4c5d 60 prof_accum_cycle += prof_stop_cycle - prof_start_cycle; \
group-onsemi 0:098463de4c5d 61 })
group-onsemi 0:098463de4c5d 62
group-onsemi 0:098463de4c5d 63 #define prof_result(value, units) ({ \
group-onsemi 0:098463de4c5d 64 prof_accum_cycle = value+prof_baseline_cycle; \
group-onsemi 0:098463de4c5d 65 prof_iterations = 1; \
group-onsemi 0:098463de4c5d 66 prof_units = units; \
group-onsemi 0:098463de4c5d 67 })
group-onsemi 0:098463de4c5d 68
group-onsemi 0:098463de4c5d 69 #define prof_measure(func, ...) ({ \
group-onsemi 0:098463de4c5d 70 printf("%s: ...", #func); \
group-onsemi 0:098463de4c5d 71 fflush(stdout); \
group-onsemi 0:098463de4c5d 72 \
group-onsemi 0:098463de4c5d 73 prof_units = "cycles"; \
group-onsemi 0:098463de4c5d 74 prof_cycle_t runs[PROF_RUNS]; \
group-onsemi 0:098463de4c5d 75 for (int i = 0; i < PROF_RUNS; i++) { \
group-onsemi 0:098463de4c5d 76 prof_accum_cycle = 0; \
group-onsemi 0:098463de4c5d 77 prof_iterations = 0; \
group-onsemi 0:098463de4c5d 78 func(__VA_ARGS__); \
group-onsemi 0:098463de4c5d 79 runs[i] = prof_accum_cycle / prof_iterations; \
group-onsemi 0:098463de4c5d 80 } \
group-onsemi 0:098463de4c5d 81 \
group-onsemi 0:098463de4c5d 82 prof_cycle_t res = runs[0]; \
group-onsemi 0:098463de4c5d 83 for (int i = 0; i < PROF_RUNS; i++) { \
group-onsemi 0:098463de4c5d 84 if (runs[i] < res) { \
group-onsemi 0:098463de4c5d 85 res = runs[i]; \
group-onsemi 0:098463de4c5d 86 } \
group-onsemi 0:098463de4c5d 87 } \
group-onsemi 0:098463de4c5d 88 res -= prof_baseline_cycle; \
group-onsemi 0:098463de4c5d 89 printf("\r%s: %"PRIu64" %s", #func, res, prof_units); \
group-onsemi 0:098463de4c5d 90 \
group-onsemi 0:098463de4c5d 91 if (!isatty(0)) { \
group-onsemi 0:098463de4c5d 92 prof_cycle_t prev; \
group-onsemi 0:098463de4c5d 93 while (scanf("%*[^0-9]%"PRIu64, &prev) == 0); \
group-onsemi 0:098463de4c5d 94 int64_t perc = 100*((int64_t)prev - (int64_t)res) / (int64_t)prev; \
group-onsemi 0:098463de4c5d 95 \
group-onsemi 0:098463de4c5d 96 if (perc > 10) { \
group-onsemi 0:098463de4c5d 97 printf(" (\e[32m%+"PRId64"%%\e[0m)", perc); \
group-onsemi 0:098463de4c5d 98 } else if (perc < -10) { \
group-onsemi 0:098463de4c5d 99 printf(" (\e[31m%+"PRId64"%%\e[0m)", perc); \
group-onsemi 0:098463de4c5d 100 } else { \
group-onsemi 0:098463de4c5d 101 printf(" (%+"PRId64"%%)", perc); \
group-onsemi 0:098463de4c5d 102 } \
group-onsemi 0:098463de4c5d 103 } \
group-onsemi 0:098463de4c5d 104 \
group-onsemi 0:098463de4c5d 105 printf("\n"); \
group-onsemi 0:098463de4c5d 106 res; \
group-onsemi 0:098463de4c5d 107 })
group-onsemi 0:098463de4c5d 108
group-onsemi 0:098463de4c5d 109 #define prof_baseline(func, ...) ({ \
group-onsemi 0:098463de4c5d 110 prof_baseline_cycle = 0; \
group-onsemi 0:098463de4c5d 111 prof_baseline_cycle = prof_measure(func, __VA_ARGS__); \
group-onsemi 0:098463de4c5d 112 })
group-onsemi 0:098463de4c5d 113
group-onsemi 0:098463de4c5d 114
group-onsemi 0:098463de4c5d 115 // Various test functions
group-onsemi 0:098463de4c5d 116 void no_func(void *eh) {
group-onsemi 0:098463de4c5d 117 }
group-onsemi 0:098463de4c5d 118
group-onsemi 0:098463de4c5d 119
group-onsemi 0:098463de4c5d 120 // Actual performance tests
group-onsemi 0:098463de4c5d 121 void baseline_prof(void) {
group-onsemi 0:098463de4c5d 122 prof_loop() {
group-onsemi 0:098463de4c5d 123 prof_start();
group-onsemi 0:098463de4c5d 124 __asm__ volatile ("");
group-onsemi 0:098463de4c5d 125 prof_stop();
group-onsemi 0:098463de4c5d 126 }
group-onsemi 0:098463de4c5d 127 }
group-onsemi 0:098463de4c5d 128
group-onsemi 0:098463de4c5d 129 void equeue_tick_prof(void) {
group-onsemi 0:098463de4c5d 130 prof_volatile(unsigned) res;
group-onsemi 0:098463de4c5d 131 prof_loop() {
group-onsemi 0:098463de4c5d 132 prof_start();
group-onsemi 0:098463de4c5d 133 res = equeue_tick();
group-onsemi 0:098463de4c5d 134 prof_stop();
group-onsemi 0:098463de4c5d 135 }
group-onsemi 0:098463de4c5d 136 }
group-onsemi 0:098463de4c5d 137
group-onsemi 0:098463de4c5d 138 void equeue_alloc_prof(void) {
group-onsemi 0:098463de4c5d 139 struct equeue q;
group-onsemi 0:098463de4c5d 140 equeue_create(&q, 32*EQUEUE_EVENT_SIZE);
group-onsemi 0:098463de4c5d 141
group-onsemi 0:098463de4c5d 142 prof_loop() {
group-onsemi 0:098463de4c5d 143 prof_start();
group-onsemi 0:098463de4c5d 144 void *e = equeue_alloc(&q, 8 * sizeof(int));
group-onsemi 0:098463de4c5d 145 prof_stop();
group-onsemi 0:098463de4c5d 146
group-onsemi 0:098463de4c5d 147 equeue_dealloc(&q, e);
group-onsemi 0:098463de4c5d 148 }
group-onsemi 0:098463de4c5d 149
group-onsemi 0:098463de4c5d 150 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 151 }
group-onsemi 0:098463de4c5d 152
group-onsemi 0:098463de4c5d 153 void equeue_alloc_many_prof(int count) {
group-onsemi 0:098463de4c5d 154 struct equeue q;
group-onsemi 0:098463de4c5d 155 equeue_create(&q, count*EQUEUE_EVENT_SIZE);
group-onsemi 0:098463de4c5d 156
group-onsemi 0:098463de4c5d 157 void *es[count];
group-onsemi 0:098463de4c5d 158
group-onsemi 0:098463de4c5d 159 for (int i = 0; i < count; i++) {
group-onsemi 0:098463de4c5d 160 es[i] = equeue_alloc(&q, (i % 4) * sizeof(int));
group-onsemi 0:098463de4c5d 161 }
group-onsemi 0:098463de4c5d 162
group-onsemi 0:098463de4c5d 163 for (int i = 0; i < count; i++) {
group-onsemi 0:098463de4c5d 164 equeue_dealloc(&q, es[i]);
group-onsemi 0:098463de4c5d 165 }
group-onsemi 0:098463de4c5d 166
group-onsemi 0:098463de4c5d 167 prof_loop() {
group-onsemi 0:098463de4c5d 168 prof_start();
group-onsemi 0:098463de4c5d 169 void *e = equeue_alloc(&q, 8 * sizeof(int));
group-onsemi 0:098463de4c5d 170 prof_stop();
group-onsemi 0:098463de4c5d 171
group-onsemi 0:098463de4c5d 172 equeue_dealloc(&q, e);
group-onsemi 0:098463de4c5d 173 }
group-onsemi 0:098463de4c5d 174
group-onsemi 0:098463de4c5d 175 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 176 }
group-onsemi 0:098463de4c5d 177
group-onsemi 0:098463de4c5d 178 void equeue_post_prof(void) {
group-onsemi 0:098463de4c5d 179 struct equeue q;
group-onsemi 0:098463de4c5d 180 equeue_create(&q, EQUEUE_EVENT_SIZE);
group-onsemi 0:098463de4c5d 181
group-onsemi 0:098463de4c5d 182 prof_loop() {
group-onsemi 0:098463de4c5d 183 void *e = equeue_alloc(&q, 0);
group-onsemi 0:098463de4c5d 184
group-onsemi 0:098463de4c5d 185 prof_start();
group-onsemi 0:098463de4c5d 186 int id = equeue_post(&q, no_func, e);
group-onsemi 0:098463de4c5d 187 prof_stop();
group-onsemi 0:098463de4c5d 188
group-onsemi 0:098463de4c5d 189 equeue_cancel(&q, id);
group-onsemi 0:098463de4c5d 190 }
group-onsemi 0:098463de4c5d 191
group-onsemi 0:098463de4c5d 192 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 193 }
group-onsemi 0:098463de4c5d 194
group-onsemi 0:098463de4c5d 195 void equeue_post_many_prof(int count) {
group-onsemi 0:098463de4c5d 196 struct equeue q;
group-onsemi 0:098463de4c5d 197 equeue_create(&q, count*EQUEUE_EVENT_SIZE);
group-onsemi 0:098463de4c5d 198
group-onsemi 0:098463de4c5d 199 for (int i = 0; i < count-1; i++) {
group-onsemi 0:098463de4c5d 200 equeue_call(&q, no_func, 0);
group-onsemi 0:098463de4c5d 201 }
group-onsemi 0:098463de4c5d 202
group-onsemi 0:098463de4c5d 203 prof_loop() {
group-onsemi 0:098463de4c5d 204 void *e = equeue_alloc(&q, 0);
group-onsemi 0:098463de4c5d 205
group-onsemi 0:098463de4c5d 206 prof_start();
group-onsemi 0:098463de4c5d 207 int id = equeue_post(&q, no_func, e);
group-onsemi 0:098463de4c5d 208 prof_stop();
group-onsemi 0:098463de4c5d 209
group-onsemi 0:098463de4c5d 210 equeue_cancel(&q, id);
group-onsemi 0:098463de4c5d 211 }
group-onsemi 0:098463de4c5d 212
group-onsemi 0:098463de4c5d 213 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 214 }
group-onsemi 0:098463de4c5d 215
group-onsemi 0:098463de4c5d 216 void equeue_post_future_prof(void) {
group-onsemi 0:098463de4c5d 217 struct equeue q;
group-onsemi 0:098463de4c5d 218 equeue_create(&q, EQUEUE_EVENT_SIZE);
group-onsemi 0:098463de4c5d 219
group-onsemi 0:098463de4c5d 220 prof_loop() {
group-onsemi 0:098463de4c5d 221 void *e = equeue_alloc(&q, 0);
group-onsemi 0:098463de4c5d 222 equeue_event_delay(e, 1000);
group-onsemi 0:098463de4c5d 223
group-onsemi 0:098463de4c5d 224 prof_start();
group-onsemi 0:098463de4c5d 225 int id = equeue_post(&q, no_func, e);
group-onsemi 0:098463de4c5d 226 prof_stop();
group-onsemi 0:098463de4c5d 227
group-onsemi 0:098463de4c5d 228 equeue_cancel(&q, id);
group-onsemi 0:098463de4c5d 229 }
group-onsemi 0:098463de4c5d 230
group-onsemi 0:098463de4c5d 231 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 232 }
group-onsemi 0:098463de4c5d 233
group-onsemi 0:098463de4c5d 234 void equeue_post_future_many_prof(int count) {
group-onsemi 0:098463de4c5d 235 struct equeue q;
group-onsemi 0:098463de4c5d 236 equeue_create(&q, count*EQUEUE_EVENT_SIZE);
group-onsemi 0:098463de4c5d 237
group-onsemi 0:098463de4c5d 238 for (int i = 0; i < count-1; i++) {
group-onsemi 0:098463de4c5d 239 equeue_call(&q, no_func, 0);
group-onsemi 0:098463de4c5d 240 }
group-onsemi 0:098463de4c5d 241
group-onsemi 0:098463de4c5d 242 prof_loop() {
group-onsemi 0:098463de4c5d 243 void *e = equeue_alloc(&q, 0);
group-onsemi 0:098463de4c5d 244 equeue_event_delay(e, 1000);
group-onsemi 0:098463de4c5d 245
group-onsemi 0:098463de4c5d 246 prof_start();
group-onsemi 0:098463de4c5d 247 int id = equeue_post(&q, no_func, e);
group-onsemi 0:098463de4c5d 248 prof_stop();
group-onsemi 0:098463de4c5d 249
group-onsemi 0:098463de4c5d 250 equeue_cancel(&q, id);
group-onsemi 0:098463de4c5d 251 }
group-onsemi 0:098463de4c5d 252
group-onsemi 0:098463de4c5d 253 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 254 }
group-onsemi 0:098463de4c5d 255
group-onsemi 0:098463de4c5d 256 void equeue_dispatch_prof(void) {
group-onsemi 0:098463de4c5d 257 struct equeue q;
group-onsemi 0:098463de4c5d 258 equeue_create(&q, EQUEUE_EVENT_SIZE);
group-onsemi 0:098463de4c5d 259
group-onsemi 0:098463de4c5d 260 prof_loop() {
group-onsemi 0:098463de4c5d 261 equeue_call(&q, no_func, 0);
group-onsemi 0:098463de4c5d 262
group-onsemi 0:098463de4c5d 263 prof_start();
group-onsemi 0:098463de4c5d 264 equeue_dispatch(&q, 0);
group-onsemi 0:098463de4c5d 265 prof_stop();
group-onsemi 0:098463de4c5d 266 }
group-onsemi 0:098463de4c5d 267
group-onsemi 0:098463de4c5d 268 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 269 }
group-onsemi 0:098463de4c5d 270
group-onsemi 0:098463de4c5d 271 void equeue_dispatch_many_prof(int count) {
group-onsemi 0:098463de4c5d 272 struct equeue q;
group-onsemi 0:098463de4c5d 273 equeue_create(&q, count*EQUEUE_EVENT_SIZE);
group-onsemi 0:098463de4c5d 274
group-onsemi 0:098463de4c5d 275 prof_loop() {
group-onsemi 0:098463de4c5d 276 for (int i = 0; i < count; i++) {
group-onsemi 0:098463de4c5d 277 equeue_call(&q, no_func, 0);
group-onsemi 0:098463de4c5d 278 }
group-onsemi 0:098463de4c5d 279
group-onsemi 0:098463de4c5d 280 prof_start();
group-onsemi 0:098463de4c5d 281 equeue_dispatch(&q, 0);
group-onsemi 0:098463de4c5d 282 prof_stop();
group-onsemi 0:098463de4c5d 283 }
group-onsemi 0:098463de4c5d 284
group-onsemi 0:098463de4c5d 285 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 286 }
group-onsemi 0:098463de4c5d 287
group-onsemi 0:098463de4c5d 288 void equeue_cancel_prof(void) {
group-onsemi 0:098463de4c5d 289 struct equeue q;
group-onsemi 0:098463de4c5d 290 equeue_create(&q, EQUEUE_EVENT_SIZE);
group-onsemi 0:098463de4c5d 291
group-onsemi 0:098463de4c5d 292 prof_loop() {
group-onsemi 0:098463de4c5d 293 int id = equeue_call(&q, no_func, 0);
group-onsemi 0:098463de4c5d 294
group-onsemi 0:098463de4c5d 295 prof_start();
group-onsemi 0:098463de4c5d 296 equeue_cancel(&q, id);
group-onsemi 0:098463de4c5d 297 prof_stop();
group-onsemi 0:098463de4c5d 298 }
group-onsemi 0:098463de4c5d 299
group-onsemi 0:098463de4c5d 300 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 301 }
group-onsemi 0:098463de4c5d 302
group-onsemi 0:098463de4c5d 303 void equeue_cancel_many_prof(int count) {
group-onsemi 0:098463de4c5d 304 struct equeue q;
group-onsemi 0:098463de4c5d 305 equeue_create(&q, count*EQUEUE_EVENT_SIZE);
group-onsemi 0:098463de4c5d 306
group-onsemi 0:098463de4c5d 307 for (int i = 0; i < count-1; i++) {
group-onsemi 0:098463de4c5d 308 equeue_call(&q, no_func, 0);
group-onsemi 0:098463de4c5d 309 }
group-onsemi 0:098463de4c5d 310
group-onsemi 0:098463de4c5d 311 prof_loop() {
group-onsemi 0:098463de4c5d 312 int id = equeue_call(&q, no_func, 0);
group-onsemi 0:098463de4c5d 313
group-onsemi 0:098463de4c5d 314 prof_start();
group-onsemi 0:098463de4c5d 315 equeue_cancel(&q, id);
group-onsemi 0:098463de4c5d 316 prof_stop();
group-onsemi 0:098463de4c5d 317 }
group-onsemi 0:098463de4c5d 318
group-onsemi 0:098463de4c5d 319 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 320 }
group-onsemi 0:098463de4c5d 321
group-onsemi 0:098463de4c5d 322 void equeue_alloc_size_prof(void) {
group-onsemi 0:098463de4c5d 323 size_t size = 32*EQUEUE_EVENT_SIZE;
group-onsemi 0:098463de4c5d 324
group-onsemi 0:098463de4c5d 325 struct equeue q;
group-onsemi 0:098463de4c5d 326 equeue_create(&q, size);
group-onsemi 0:098463de4c5d 327 equeue_alloc(&q, 0);
group-onsemi 0:098463de4c5d 328
group-onsemi 0:098463de4c5d 329 prof_result(size - q.slab.size, "bytes");
group-onsemi 0:098463de4c5d 330
group-onsemi 0:098463de4c5d 331 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 332 }
group-onsemi 0:098463de4c5d 333
group-onsemi 0:098463de4c5d 334 void equeue_alloc_many_size_prof(int count) {
group-onsemi 0:098463de4c5d 335 size_t size = count*EQUEUE_EVENT_SIZE;
group-onsemi 0:098463de4c5d 336
group-onsemi 0:098463de4c5d 337 struct equeue q;
group-onsemi 0:098463de4c5d 338 equeue_create(&q, size);
group-onsemi 0:098463de4c5d 339
group-onsemi 0:098463de4c5d 340 for (int i = 0; i < count; i++) {
group-onsemi 0:098463de4c5d 341 equeue_alloc(&q, (i % 4) * sizeof(int));
group-onsemi 0:098463de4c5d 342 }
group-onsemi 0:098463de4c5d 343
group-onsemi 0:098463de4c5d 344 prof_result(size - q.slab.size, "bytes");
group-onsemi 0:098463de4c5d 345
group-onsemi 0:098463de4c5d 346 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 347 }
group-onsemi 0:098463de4c5d 348
group-onsemi 0:098463de4c5d 349 void equeue_alloc_fragmented_size_prof(int count) {
group-onsemi 0:098463de4c5d 350 size_t size = count*EQUEUE_EVENT_SIZE;
group-onsemi 0:098463de4c5d 351
group-onsemi 0:098463de4c5d 352 struct equeue q;
group-onsemi 0:098463de4c5d 353 equeue_create(&q, size);
group-onsemi 0:098463de4c5d 354
group-onsemi 0:098463de4c5d 355 void *es[count];
group-onsemi 0:098463de4c5d 356
group-onsemi 0:098463de4c5d 357 for (int i = 0; i < count; i++) {
group-onsemi 0:098463de4c5d 358 es[i] = equeue_alloc(&q, (i % 4) * sizeof(int));
group-onsemi 0:098463de4c5d 359 }
group-onsemi 0:098463de4c5d 360
group-onsemi 0:098463de4c5d 361 for (int i = 0; i < count; i++) {
group-onsemi 0:098463de4c5d 362 equeue_dealloc(&q, es[i]);
group-onsemi 0:098463de4c5d 363 }
group-onsemi 0:098463de4c5d 364
group-onsemi 0:098463de4c5d 365 for (int i = count-1; i >= 0; i--) {
group-onsemi 0:098463de4c5d 366 es[i] = equeue_alloc(&q, (i % 4) * sizeof(int));
group-onsemi 0:098463de4c5d 367 }
group-onsemi 0:098463de4c5d 368
group-onsemi 0:098463de4c5d 369 for (int i = count-1; i >= 0; i--) {
group-onsemi 0:098463de4c5d 370 equeue_dealloc(&q, es[i]);
group-onsemi 0:098463de4c5d 371 }
group-onsemi 0:098463de4c5d 372
group-onsemi 0:098463de4c5d 373 for (int i = 0; i < count; i++) {
group-onsemi 0:098463de4c5d 374 equeue_alloc(&q, (i % 4) * sizeof(int));
group-onsemi 0:098463de4c5d 375 }
group-onsemi 0:098463de4c5d 376
group-onsemi 0:098463de4c5d 377 prof_result(size - q.slab.size, "bytes");
group-onsemi 0:098463de4c5d 378
group-onsemi 0:098463de4c5d 379 equeue_destroy(&q);
group-onsemi 0:098463de4c5d 380 }
group-onsemi 0:098463de4c5d 381
group-onsemi 0:098463de4c5d 382
group-onsemi 0:098463de4c5d 383 // Entry point
group-onsemi 0:098463de4c5d 384 int main() {
group-onsemi 0:098463de4c5d 385 printf("beginning profiling...\n");
group-onsemi 0:098463de4c5d 386
group-onsemi 0:098463de4c5d 387 prof_baseline(baseline_prof);
group-onsemi 0:098463de4c5d 388
group-onsemi 0:098463de4c5d 389 prof_measure(equeue_tick_prof);
group-onsemi 0:098463de4c5d 390 prof_measure(equeue_alloc_prof);
group-onsemi 0:098463de4c5d 391 prof_measure(equeue_post_prof);
group-onsemi 0:098463de4c5d 392 prof_measure(equeue_post_future_prof);
group-onsemi 0:098463de4c5d 393 prof_measure(equeue_dispatch_prof);
group-onsemi 0:098463de4c5d 394 prof_measure(equeue_cancel_prof);
group-onsemi 0:098463de4c5d 395
group-onsemi 0:098463de4c5d 396 prof_measure(equeue_alloc_many_prof, 1000);
group-onsemi 0:098463de4c5d 397 prof_measure(equeue_post_many_prof, 1000);
group-onsemi 0:098463de4c5d 398 prof_measure(equeue_post_future_many_prof, 1000);
group-onsemi 0:098463de4c5d 399 prof_measure(equeue_dispatch_many_prof, 100);
group-onsemi 0:098463de4c5d 400 prof_measure(equeue_cancel_many_prof, 100);
group-onsemi 0:098463de4c5d 401
group-onsemi 0:098463de4c5d 402 prof_measure(equeue_alloc_size_prof);
group-onsemi 0:098463de4c5d 403 prof_measure(equeue_alloc_many_size_prof, 1000);
group-onsemi 0:098463de4c5d 404 prof_measure(equeue_alloc_fragmented_size_prof, 1000);
group-onsemi 0:098463de4c5d 405
group-onsemi 0:098463de4c5d 406 printf("done!\n");
group-onsemi 0:098463de4c5d 407 }