소스 검색

analogWrite() can fail with LTO. Fix casts with undefined behavior.

main
Tilo Nitzsche 7 년 전
부모
커밋
56b2af9f9a
1개의 변경된 파일7개의 추가작업 그리고 4개의 파일을 삭제
  1. +7
    -4
      teensy3/analog.c

+ 7
- 4
teensy3/analog.c 파일 보기

@@ -501,7 +501,7 @@ startADC1:
#endif
}

typedef int16_t __attribute__((__may_alias__)) aliased_int16_t;

void analogWriteDAC0(int val)
{
@@ -514,7 +514,8 @@ void analogWriteDAC0(int val)
}
if (val < 0) val = 0; // TODO: saturate instruction?
else if (val > 4095) val = 4095;
*(int16_t *)&(DAC0_DAT0L) = val;

*(volatile aliased_int16_t *)&(DAC0_DAT0L) = val;
#elif defined(__MKL26Z64__)
SIM_SCGC6 |= SIM_SCGC6_DAC0;
if (analog_reference_internal == 0) {
@@ -526,7 +527,8 @@ void analogWriteDAC0(int val)
}
if (val < 0) val = 0;
else if (val > 4095) val = 4095;
*(int16_t *)&(DAC0_DAT0L) = val;

*(volatile aliased_int16_t *)&(DAC0_DAT0L) = val;
#endif
}

@@ -542,7 +544,8 @@ void analogWriteDAC1(int val)
}
if (val < 0) val = 0; // TODO: saturate instruction?
else if (val > 4095) val = 4095;
*(int16_t *)&(DAC1_DAT0L) = val;

*(volatile aliased_int16_t *)&(DAC1_DAT0L) = val;
}
#endif


Loading…
취소
저장