Цитата(ViKo @ Jan 25 2017, 17:33)

Только ваша функция сравнения так не делает. Проверьте.
мда. понял. спасибо.
вобщем тут в чем проблема. переполнение можно отследить в while. как в этом примере.
Код
void delay_1us (void) {
uint32_t start, end;
start = DWT_CYCCNT;
end = start + HCLK/1000000;
if (end < start) while (dwt_cnt() > start);
while (end >= dwt_cnt());
}
но если как у меня - в одном месте установили порог а в другом сравниваем - без дополнительных флагов не обойтись.
скажем такой подход не решает проблему переполнения
Код
uint32_t DWT_Get(void)
{
return DWT_CYCCNT;
}
uint8_t DWT_Compare(int32_t tp)
{
return (((int32_t)DWT_Get() - tp) < 0);
}
void DWT_Delay(uint32_t us) // microseconds
{
int32_t tp = DWT_Get() + us * (SystemCoreClock/1000000));
while (DWT_Compare(tp));
}
Сообщение отредактировал Jenya7 - Jan 25 2017, 15:12