#include <stdio.h>
#include <stdint.h>
#define INT_MAX 0x7fffffff
#define SCALED_ADC_AT_ZERO_VOLTS (65536 * 390 / (390 + 10))
int32_t hv_volts_to_adc(float v)
{
return (int32_t)(v * 65536 / 3.3 * 10 / (390 + 10)) +
(65536 * 390.0 / (390 + 10));
}
int main(void) {
// your code goes here
uint32_t hvTargetAdcReal = hv_volts_to_adc(-55);
printf("Before clamp=%u\n", hvTargetAdcReal
); if (hvTargetAdcReal > INT_MAX)
{
hvTargetAdcReal = INT_MAX;
}
printf("INT_MAX=%u", INT_MAX
); printf("-INT_MAX=%u", -INT_MAX
); printf("After clamp=%u\n", hvTargetAdcReal
); int32_t adcAtZero = SCALED_ADC_AT_ZERO_VOLTS;
int32_t result = (adcAtZero - (int32_t)hvTargetAdcReal);
int32_t result2 = (int32_t)(adcAtZero - hvTargetAdcReal);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KCiNkZWZpbmUgSU5UX01BWCAgIDB4N2ZmZmZmZmYKI2RlZmluZSBTQ0FMRURfQURDX0FUX1pFUk9fVk9MVFMgKDY1NTM2ICogMzkwIC8gKDM5MCArIDEwKSkKCmludDMyX3QgaHZfdm9sdHNfdG9fYWRjKGZsb2F0IHYpCnsKICAgIHJldHVybiAoaW50MzJfdCkodiAqIDY1NTM2IC8gMy4zICogMTAgLyAoMzkwICsgMTApKSArCiAgICAgICAgICAgKDY1NTM2ICogMzkwLjAgLyAoMzkwICsgMTApKTsKfQoKaW50IG1haW4odm9pZCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJdWludDMyX3QgaHZUYXJnZXRBZGNSZWFsID0gaHZfdm9sdHNfdG9fYWRjKC01NSk7CglwcmludGYoIkJlZm9yZSBjbGFtcD0ldVxuIiwgaHZUYXJnZXRBZGNSZWFsKTsKICAgIAlpZiAoaHZUYXJnZXRBZGNSZWFsID4gSU5UX01BWCkKICAgICAgICB7CiAgICAgICAgICAgIGh2VGFyZ2V0QWRjUmVhbCA9IElOVF9NQVg7CiAgICAgICAgfQogICAgICAgIHByaW50ZigiSU5UX01BWD0ldSIsIElOVF9NQVgpOwogICAgICAgIHByaW50ZigiLUlOVF9NQVg9JXUiLCAtSU5UX01BWCk7CiAgICBwcmludGYoIkFmdGVyIGNsYW1wPSV1XG4iLCBodlRhcmdldEFkY1JlYWwpOwoJaW50MzJfdCBhZGNBdFplcm8gPSBTQ0FMRURfQURDX0FUX1pFUk9fVk9MVFM7CglpbnQzMl90IHJlc3VsdCA9IChhZGNBdFplcm8gLSAoaW50MzJfdClodlRhcmdldEFkY1JlYWwpOwoJaW50MzJfdCByZXN1bHQyID0gKGludDMyX3QpKGFkY0F0WmVybyAtIGh2VGFyZ2V0QWRjUmVhbCk7CgoJcmV0dXJuIDA7Cn0K