#include <stdio.h>
#include <stdint.h>
#define POLY_PWM_PERIOD (1500)
int main(void) {
// your code goes here
// for (int i = 0; i > -1 << 31; i--)
// {
// int rate = i;
// // int32_t phaseAccumEL += rate;
// int32_t phaseAccumEL = rate;
// const int adjustEL = phaseAccumEL / (1 << 24);
// uint32_t phase_accum_el_uint = phaseAccumEL;
// phase_accum_el_uint &= (1 << 24) - 1;
// phaseAccumEL = phase_accum_el_uint;
// uint32_t el_period = POLY_PWM_PERIOD - adjustEL;
// // int32_t phaseAccumAZ += rate;
// int32_t phaseAccumAZ = rate;
// const int adjustAZ = phaseAccumAZ / (1 << 25);
// uint32_t phase_accum_az_uint = phaseAccumAZ;
// phase_accum_az_uint &= (1 << 25) - 1;
// phaseAccumAZ = phase_accum_az_uint;
// uint32_t az_period = (POLY_PWM_PERIOD / 2) - adjustAZ;
// if (el_period / 2 != az_period)
// {
// printf("Period mismatch, AZ=%u, EL=%u, rate=%d, adjustAz=%d, adjustEl=%d\n", az_period, el_period, rate, adjustAZ, adjustEL);
// phaseAccumAZ += rate;
// const int adjustAZ_2 = phaseAccumAZ / (1 << 25);
// uint32_t phase_accum_az_uint = phaseAccumAZ;
// phase_accum_az_uint &= (1 << 25) - 1;
// phaseAccumAZ = phase_accum_az_uint;
// uint32_t az_period_2 = (POLY_PWM_PERIOD / 2) - adjustAZ_2;
// printf("az_period_2=%d, adjustAZ_2=%d\n", az_period_2, adjustAZ_2);
// }
// }
int32_t rate = -252476432;
// int32_t phaseAccumEL += rate;
int32_t phaseAccumEL = 11118352;
phaseAccumEL += rate;
const int32_t adjustEL = phaseAccumEL / (1 << 24);
uint32_t phase_accum_el_uint = phaseAccumEL;
phase_accum_el_uint &= (1 << 24) - 1;
phaseAccumEL = phase_accum_el_uint;
uint32_t el_period = POLY_PWM_PERIOD - adjustEL;
// int32_t phaseAccumAZ += rate;
int32_t phaseAccumAZ = 11118352;
phaseAccumAZ += rate;
const int32_t adjustAZ = phaseAccumAZ / (1 << 25);
uint32_t phase_accum_az_uint = phaseAccumAZ;
phase_accum_az_uint &= (1 << 25) - 1;
phaseAccumAZ = phase_accum_az_uint;
uint32_t az_period = (POLY_PWM_PERIOD / 2) - adjustAZ;
if (el_period / 2 != az_period)
{
printf("Period mismatch, AZ=%u, EL=%u, rate=%d, adjustAz=%d, adjustEl=%d\n", az_period
, el_period
, rate
, adjustAZ
, adjustEL
); }
else
{
printf("AZ=%u, EL=%u, rate=%d, adjustAz=%d, adjustEl=%d, phaseAccumEL=%u, phaseAccumAZ=%u\n", az_period
, el_period
, rate
, adjustAZ
, adjustEL
, phaseAccumEL
, phaseAccumAZ
); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KI2RlZmluZSBQT0xZX1BXTV9QRVJJT0QgKDE1MDApCmludCBtYWluKHZvaWQpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCS8vIGZvciAoaW50IGkgPSAwOyBpID4gLTEgPDwgMzE7IGktLSkKCS8vIHsKCS8vICAgICBpbnQgcmF0ZSA9IGk7CgkvLyAgICAgLy8gaW50MzJfdCBwaGFzZUFjY3VtRUwgKz0gcmF0ZTsKCS8vICAgICBpbnQzMl90IHBoYXNlQWNjdW1FTCA9IHJhdGU7CgkvLyAgICAgY29uc3QgaW50IGFkanVzdEVMID0gcGhhc2VBY2N1bUVMIC8gKDEgPDwgMjQpOwoJLy8gICAgIHVpbnQzMl90IHBoYXNlX2FjY3VtX2VsX3VpbnQgPSBwaGFzZUFjY3VtRUw7CgkvLyAgICAgcGhhc2VfYWNjdW1fZWxfdWludCAmPSAoMSA8PCAyNCkgLSAxOwoJLy8gICAgIHBoYXNlQWNjdW1FTCA9IHBoYXNlX2FjY3VtX2VsX3VpbnQ7CgkvLyAgICAgdWludDMyX3QgZWxfcGVyaW9kID0gUE9MWV9QV01fUEVSSU9EIC0gYWRqdXN0RUw7CgkgICAgCgkvLyAgICAgLy8gaW50MzJfdCBwaGFzZUFjY3VtQVogKz0gcmF0ZTsKCS8vICAgICBpbnQzMl90IHBoYXNlQWNjdW1BWiA9IHJhdGU7CgkvLyAgICAgY29uc3QgaW50IGFkanVzdEFaID0gcGhhc2VBY2N1bUFaIC8gKDEgPDwgMjUpOwoJLy8gICAgIHVpbnQzMl90IHBoYXNlX2FjY3VtX2F6X3VpbnQgPSBwaGFzZUFjY3VtQVo7CgkvLyAgICAgcGhhc2VfYWNjdW1fYXpfdWludCAmPSAoMSA8PCAyNSkgLSAxOwoJLy8gICAgIHBoYXNlQWNjdW1BWiA9IHBoYXNlX2FjY3VtX2F6X3VpbnQ7CgkvLyAgICAgdWludDMyX3QgYXpfcGVyaW9kID0gKFBPTFlfUFdNX1BFUklPRCAvIDIpIC0gYWRqdXN0QVo7CgkvLyAgICAgaWYgKGVsX3BlcmlvZCAvIDIgIT0gYXpfcGVyaW9kKQoJLy8gICAgIHsKCS8vICAgICAJcHJpbnRmKCJQZXJpb2QgbWlzbWF0Y2gsIEFaPSV1LCBFTD0ldSwgcmF0ZT0lZCwgYWRqdXN0QXo9JWQsIGFkanVzdEVsPSVkXG4iLCBhel9wZXJpb2QsIGVsX3BlcmlvZCwgcmF0ZSwgYWRqdXN0QVosIGFkanVzdEVMKTsKCS8vICAgICAJcGhhc2VBY2N1bUFaICs9IHJhdGU7CgkvLyAgICAgCWNvbnN0IGludCBhZGp1c3RBWl8yID0gcGhhc2VBY2N1bUFaIC8gKDEgPDwgMjUpOwoJLy8gICAgICAgICB1aW50MzJfdCBwaGFzZV9hY2N1bV9hel91aW50ID0gcGhhc2VBY2N1bUFaOwoJLy8gICAgICAgICBwaGFzZV9hY2N1bV9hel91aW50ICY9ICgxIDw8IDI1KSAtIDE7CgkvLyAgICAgICAgIHBoYXNlQWNjdW1BWiA9IHBoYXNlX2FjY3VtX2F6X3VpbnQ7CgkvLyAgICAgICAgIHVpbnQzMl90IGF6X3BlcmlvZF8yID0gKFBPTFlfUFdNX1BFUklPRCAvIDIpIC0gYWRqdXN0QVpfMjsJICAgIAkKCS8vICAgICAgICAgcHJpbnRmKCJhel9wZXJpb2RfMj0lZCwgYWRqdXN0QVpfMj0lZFxuIiwgYXpfcGVyaW9kXzIsIGFkanVzdEFaXzIpOwoJICAgIAkKCS8vICAgICB9CgkvLyB9CgkgICAgaW50MzJfdCByYXRlID0gLTI1MjQ3NjQzMjsKCSAgICAvLyBpbnQzMl90IHBoYXNlQWNjdW1FTCArPSByYXRlOwoJICAgIGludDMyX3QgcGhhc2VBY2N1bUVMID0gMTExMTgzNTI7CgkgICAgcGhhc2VBY2N1bUVMICs9IHJhdGU7CgkgICAgY29uc3QgaW50MzJfdCBhZGp1c3RFTCA9IHBoYXNlQWNjdW1FTCAvICgxIDw8IDI0KTsKCSAgICB1aW50MzJfdCBwaGFzZV9hY2N1bV9lbF91aW50ID0gcGhhc2VBY2N1bUVMOwoJICAgIHBoYXNlX2FjY3VtX2VsX3VpbnQgJj0gKDEgPDwgMjQpIC0gMTsKCSAgICBwaGFzZUFjY3VtRUwgPSBwaGFzZV9hY2N1bV9lbF91aW50OwoJICAgIHVpbnQzMl90IGVsX3BlcmlvZCA9IFBPTFlfUFdNX1BFUklPRCAtIGFkanVzdEVMOwoJICAgIAoJICAgIC8vIGludDMyX3QgcGhhc2VBY2N1bUFaICs9IHJhdGU7CgkgICAgaW50MzJfdCBwaGFzZUFjY3VtQVogPSAxMTExODM1MjsKCSAgICBwaGFzZUFjY3VtQVogKz0gcmF0ZTsKCSAgICBjb25zdCBpbnQzMl90IGFkanVzdEFaID0gcGhhc2VBY2N1bUFaIC8gKDEgPDwgMjUpOwoJICAgIHVpbnQzMl90IHBoYXNlX2FjY3VtX2F6X3VpbnQgPSBwaGFzZUFjY3VtQVo7CgkgICAgcGhhc2VfYWNjdW1fYXpfdWludCAmPSAoMSA8PCAyNSkgLSAxOwoJICAgIHBoYXNlQWNjdW1BWiA9IHBoYXNlX2FjY3VtX2F6X3VpbnQ7CgkgICAgdWludDMyX3QgYXpfcGVyaW9kID0gKFBPTFlfUFdNX1BFUklPRCAvIDIpIC0gYWRqdXN0QVo7CgkgICAgaWYgKGVsX3BlcmlvZCAvIDIgIT0gYXpfcGVyaW9kKQoJICAgIHsKCSAgICAJcHJpbnRmKCJQZXJpb2QgbWlzbWF0Y2gsIEFaPSV1LCBFTD0ldSwgcmF0ZT0lZCwgYWRqdXN0QXo9JWQsIGFkanVzdEVsPSVkXG4iLCBhel9wZXJpb2QsIGVsX3BlcmlvZCwgcmF0ZSwgYWRqdXN0QVosIGFkanVzdEVMKTsKCSAgICB9CgkgICAgZWxzZQoJICAgIHsKCSAgICAJcHJpbnRmKCJBWj0ldSwgRUw9JXUsIHJhdGU9JWQsIGFkanVzdEF6PSVkLCBhZGp1c3RFbD0lZCwgcGhhc2VBY2N1bUVMPSV1LCBwaGFzZUFjY3VtQVo9JXVcbiIsIGF6X3BlcmlvZCwgZWxfcGVyaW9kLCByYXRlLCBhZGp1c3RBWiwgYWRqdXN0RUwsIHBoYXNlQWNjdW1FTCwgcGhhc2VBY2N1bUFaKTsKCSAgICB9CgoKCXJldHVybiAwOwp9Cg==