Andy
Serg
Anonymous
А как впиндюрить таймер в цикл ?
Anonymous
Чтобы интервал был равный на 8 реле
Andy
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/timer.html
Anonymous
Я имел ввиду милис
Andy
Не знаю что такое "милис", но догадываюсь, что миллисекунды. Таймер по ссылке можно настроить с точностью до 1/80 MHz
romanetz
нужно сформулировать задачу точнее
Andy
? не понял :( мне это зачем?
Vitaliy
сорян. мимо
SetPf
Выручайте дурака.
Sprintf(dest, "%u", 1 );
Печатает миллионы.
SetPf
hhu, i и прочее пробовал.
SetPf
Причем же в лог и прочее печатает нормально =\
Alexey
как вариант, стоит memset сделать перед печатью
SetPf
У меня стоит несколько макросов с VA_ARGS
SetPf
до него
Alexey
Задача - обеспечить нультерминатор
Alexey
Теста ради его можно прямо в строку вписать
SetPf
Да там не с нулем дело. Оно в середине строки впечатывается.
SetPf
Текст нормально, а конверсия числа - хрень
Alexey
У меня на пиках с флотами было такое, нули печатал в буфер. На есп вроде норм работало всегда
Alexey
Ещё момент, в буфере есть utf-8 символы? Встречал проблемму некорректной работы sprintf с кириллицей (ютф) в буфере
Dr Zlo
Dr Zlo
и куда потом отправляется?
SetPf
Короче. Я все там костылю свой велосипедный выкидышь эксепшенов.
Alexey
😄
SetPf
Там примерно следующий говнокод
void ThrowException(
const char* const function,
size_t line,
const char* const subject,
const char* content,
...
)
{
static size_t nesting_level = 0;
static char formated_content[4][256] = {};
static portMUX_TYPE myMutex = portMUX_INITIALIZER_UNLOCKED;
// Nesting handling
portENTER_CRITICAL(&myMutex);
char* destination = formated_content[nesting_level];
nesting_level++;
portEXIT_CRITICAL(&myMutex);
va_list args;
va_start(args, content);
sprintf(destination, content, args);
va_end(args);
FatalException exception = {subject, destination, function, line};
throw exception;
}
SetPf
Давайте пожалуйста не будем обсуждать говнокодовость =)
SetPf
Спсибо.
SetPf
И вот такое макро
#define THROW_EXCEPTION(subject, content, ...) ThrowException((__FUNCTION__), (__LINE__), (subject), (content), ##__VA_ARGS__)
SetPf
Собственно при
THROW_EXCEPTION("Test", "Test %u", 1);
Печатаются миллионы
SetPf
Как обычно сам себя перемакросил =\
Alexey
Какое конкретно число печатается?
SetPf
1073435424
Alexey
ну вот, в хексе это 0x3FFB5320. Слишком уж на адрес похоже, да?
SetPf
Есть такое.
Alexey
Может я хреново знаю си, но строчки
static char formated_content[4][256] = {};
char* destination = formated_content[nesting_level];
мне кажутся подозрительными.
Для чего двумерный массив там?
SetPf
Что бы была возможность в нескольких тасках параллельно эт осделать и все к черту не полетело.
SetPf
Если бы с указателем на это были бы проблемы - мне бы текст нормально не вывело.
SetPf
я думаю проблема в va_list
SetPf
vsprinf надо использовать
SetPf
SetPf
Alexey
именно, посмотрел свой код, но не заметил что не sprintf, а vsprintf использую 🙈
SetPf
Только сейчас обратил внимание
SetPf
SetPf
SetPf
pdTRUE == 0?
SetPf
Все узрил, прекрасный кодстайл =\
Dr Zlo
Dr Zlo
чтобы случайно не перезаписать что-то в памяти
Dr Zlo
void ProtocolHelper::printf(const char* format, ...)
{
const uint16_t buffer_size = 256;
char buffer[buffer_size];
uint16_t length = 0;
va_list args;
va_start(args, format);
length = vsnprintf(buffer, buffer_size, format, args);
va_end(args);
this->write(buffer, length);
}
Henadz
Anton
SetPf
Dr Zlo
Для читаемости
Yuriy
вот скажите - а как посчитать и ворнинг не получить? без дублирования - цикла - итератор же
Yuriy
а с чем подобное связано? ничего не было - пять минут назад шилось на отлично. ошибка ( и новая частота тоже) стабильно - не сбой какой
Anonymous
Как обозначить одной переменной сразу много пинов
Anonymous
???
Yuriy
использовать массив uint8_t pin[n]
Anonymous
Напишите пример с int
Anonymous
И pinmode
Yuriy
зачем int?
Anonymous
Понял, спасибо
Yuriy
class Relay : {
private:
uint8_t _pin;
bool _inverted;
public:
Relay(uint8_t pin) :, _pin{pin} {
pinMode(_pin, OUTPUT);
digitalWrite(_pin, _inverted ? HIGH : LOW);
};
void setOn() {
digitalWrite(_pin, _inverted ? LOW : HIGH);
}
};
std::vector<Relay*> _relay; // сколько памяти хватит можно - сделать
Anonymous
А можно просто присвоить имя на 8 пинов одной строкой?
Anonymous
Вы объясняете из рассчёта на кодера
Anonymous
Как перечислить правильно все пины которые я хочу задействовать одним именем
Yuriy
Anonymous
Int rele8shtuk = 15,16,17,5,18,19,21,23
Yuriy
int rele[] ={тоже самое};
Anonymous
Еапп
Anonymous
:)
Yuriy
а дальше чего?
Anonymous
Между квадратами пропуск?