Вт апр 26, 2022 21:44:34
unsigned long millis();
Вт апр 26, 2022 22:09:47
Ср апр 27, 2022 09:40:30
#define __DELAY_ROUND_DOWN__
void _delay_ms(double __ms)
{
double __tmp ;
#if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && \
!defined(__DELAY_BACKWARD_COMPATIBLE__) && \
__STDC_HOSTED__
uint32_t __ticks_dc;
extern void __builtin_avr_delay_cycles(unsigned long);
__tmp = ((F_CPU) / 1e3) * __ms;
#if defined(__DELAY_ROUND_DOWN__)
__ticks_dc = (uint32_t)fabs(__tmp);
#elif defined(__DELAY_ROUND_CLOSEST__)
__ticks_dc = (uint32_t)(fabs(__tmp)+0.5);
#else
//round up by default
__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
#endif
__builtin_avr_delay_cycles(__ticks_dc);
#else
uint16_t __ticks;
__tmp = ((F_CPU) / 4e3) * __ms;
if (__tmp < 1.0)
__ticks = 1;
else if (__tmp > 65535)
{
// __ticks = requested delay in 1/10 ms
__ticks = (uint16_t) (__ms * 10.0);
while(__ticks)
{
// wait 1/10 ms
_delay_loop_2(((F_CPU) / 4e3) / 10);
__ticks --;
}
return;
}
else
__ticks = (uint16_t)__tmp;
_delay_loop_2(__ticks);
#endif
}
Ср апр 27, 2022 10:31:46
Ср апр 27, 2022 10:46:10
Ср апр 27, 2022 11:31:04
Ср апр 27, 2022 11:39:45
Ср апр 27, 2022 13:15:40
Ср апр 27, 2022 16:07:48
Ср апр 27, 2022 16:14:58
void delay(unsigned long ms)
{
if (ms < 1) return;
uit32_t m = millis();
while (millis() - m < ms);
}
Ср апр 27, 2022 16:19:24
alex68md писал(а):короче написал свой дилей
void delay(unsigned long ms)
{
ms += millis();
while (millis() < ms);
}
Ср апр 27, 2022 16:30:30
Ср апр 27, 2022 16:52:08
typedef enum{
STATE_RELAX,
...
STATE_SOMETH,
STATE_WAIT,
...
} SM_state;
static SM_state st = STATE_RELAX;
void SM(){
static uint32_t tlocal; // Tms - счетчик миллисекунд, который по прерыванию таймера инкрементируется
switch(st){
case ...
case STATE_SOMETH:
...
st = STATE_WAIT;
tlocal = Tms;
break;
case STATE_WAIT:
if(Tms - tlocal >= WAIT_PAUSE){
st = ...;
...
}
case ...
default: // STATE_RELAX - do nothing
}
}
Ср апр 27, 2022 16:55:17
Ср апр 27, 2022 17:02:36
Ср апр 27, 2022 17:08:10
Ср апр 27, 2022 19:41:22
Ср апр 27, 2022 20:23:49
слишком категорично! можно делать все, что приводит к желаемому результату. а категорически что-либо заявлять, как истину на все времена - недальновидноEddy_Em писал(а):А еще нельзя жирные функции за один присест запускать. Скажем, если у вас экранный буфер заполняется в течение 10мс, нужно разбить это на процедуры и выполнять по одной за каждый проход суперлупа. В этом случае все будет работать четко и слаженно.
Ср апр 27, 2022 20:34:20
Ср апр 27, 2022 21:26:51