fork download
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #define POLY_PWM_PERIOD (1500)
  4. int main(void) {
  5. // your code goes here
  6. // for (int i = 0; i > -1 << 31; i--)
  7. // {
  8. // int rate = i;
  9. // // int32_t phaseAccumEL += rate;
  10. // int32_t phaseAccumEL = rate;
  11. // const int adjustEL = phaseAccumEL / (1 << 24);
  12. // uint32_t phase_accum_el_uint = phaseAccumEL;
  13. // phase_accum_el_uint &= (1 << 24) - 1;
  14. // phaseAccumEL = phase_accum_el_uint;
  15. // uint32_t el_period = POLY_PWM_PERIOD - adjustEL;
  16.  
  17. // // int32_t phaseAccumAZ += rate;
  18. // int32_t phaseAccumAZ = rate;
  19. // const int adjustAZ = phaseAccumAZ / (1 << 25);
  20. // uint32_t phase_accum_az_uint = phaseAccumAZ;
  21. // phase_accum_az_uint &= (1 << 25) - 1;
  22. // phaseAccumAZ = phase_accum_az_uint;
  23. // uint32_t az_period = (POLY_PWM_PERIOD / 2) - adjustAZ;
  24. // if (el_period / 2 != az_period)
  25. // {
  26. // printf("Period mismatch, AZ=%u, EL=%u, rate=%d, adjustAz=%d, adjustEl=%d\n", az_period, el_period, rate, adjustAZ, adjustEL);
  27. // phaseAccumAZ += rate;
  28. // const int adjustAZ_2 = phaseAccumAZ / (1 << 25);
  29. // uint32_t phase_accum_az_uint = phaseAccumAZ;
  30. // phase_accum_az_uint &= (1 << 25) - 1;
  31. // phaseAccumAZ = phase_accum_az_uint;
  32. // uint32_t az_period_2 = (POLY_PWM_PERIOD / 2) - adjustAZ_2;
  33. // printf("az_period_2=%d, adjustAZ_2=%d\n", az_period_2, adjustAZ_2);
  34.  
  35. // }
  36. // }
  37. int32_t rate = -252476432;
  38. // int32_t phaseAccumEL += rate;
  39. int32_t phaseAccumEL = 11118352;
  40. phaseAccumEL += rate;
  41. const int32_t adjustEL = phaseAccumEL / (1 << 24);
  42. uint32_t phase_accum_el_uint = phaseAccumEL;
  43. phase_accum_el_uint &= (1 << 24) - 1;
  44. phaseAccumEL = phase_accum_el_uint;
  45. uint32_t el_period = POLY_PWM_PERIOD - adjustEL;
  46.  
  47. // int32_t phaseAccumAZ += rate;
  48. int32_t phaseAccumAZ = 11118352;
  49. phaseAccumAZ += rate;
  50. const int32_t adjustAZ = phaseAccumAZ / (1 << 25);
  51. uint32_t phase_accum_az_uint = phaseAccumAZ;
  52. phase_accum_az_uint &= (1 << 25) - 1;
  53. phaseAccumAZ = phase_accum_az_uint;
  54. uint32_t az_period = (POLY_PWM_PERIOD / 2) - adjustAZ;
  55. if (el_period / 2 != az_period)
  56. {
  57. printf("Period mismatch, AZ=%u, EL=%u, rate=%d, adjustAz=%d, adjustEl=%d\n", az_period, el_period, rate, adjustAZ, adjustEL);
  58. }
  59. else
  60. {
  61. 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);
  62. }
  63.  
  64.  
  65. return 0;
  66. }
  67.  
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
AZ=757, EL=1514, rate=-252476432, adjustAz=-7, adjustEl=-14, phaseAccumEL=10300160, phaseAccumAZ=27077376