Scale a 16-bit unsigned value by an 8-bit value, which is treated as the numerator of a fraction whose denominator is 256.
468 {
470 return 0;
471
472 }
473#if SCALE16BY8_C == 1
474 uint16_t result;
475#if FASTLED_SCALE8_FIXED == 1
476 result = (((uint32_t)(i) * (1 + ((uint32_t)
scale))) >> 8);
477#else
478 result = (i *
scale) / 256;
479#endif
480 return result;
481#elif SCALE16BY8_AVRASM == 1
482#if FASTLED_SCALE8_FIXED == 1
483 uint16_t result = 0;
484 asm volatile(
485
486 " mul %A[i], %[scale] \n\t"
487 " add r0, %A[i] \n\t"
488
489
490 " adc %A[result], r1 \n\t"
491
492
493 " mul %B[i], %[scale] \n\t"
494 " add %A[result], r0 \n\t"
495 " adc %B[result], r1 \n\t"
496
497
498 " clr __zero_reg__ \n\t"
499
500
501 " add %A[result], %B[i] \n\t"
502 " adc %B[result], __zero_reg__ \n\t"
503
504 : [result] "+r"(result)
506 : "r0", "r1");
507 return result;
508#else
509 uint16_t result = 0;
510 asm volatile(
511
512 " mul %A[i], %[scale] \n\t"
513 " mov %A[result], r1 \n\t"
514
515
516
517 " mul %B[i], %[scale] \n\t"
518 " add %A[result], r0 \n\t"
519 " adc %B[result], r1 \n\t"
520
521
522 " clr __zero_reg__ \n\t"
523
524 : [result] "+r"(result)
526 : "r0", "r1");
527 return result;
528#endif
529#else
530#error "No implementation for scale16by8 available."
531#endif
532}
UISlider scale("Scale", 4,.1, 4,.1)