Dmitriy
1. Это ниразу не вариант. Это противоречит модульной структуре 2. Ну да, я не понял, что нужно подключить, что бы TCB_t структура появилась. 3. Ну вот я пока без этого телеметрию сделал, а так было бы интересно выводить загрузку cpu и сколько стека осталось в % например.
Alexey
Какая разница, сколько осталось стэка? Он рассчитывается единожды на этапе разработки. Использовали больше - канарейки вам об этом сообщат, пересматривайте расчеты. Это же мк, там крутится постоянный набор однотипных задач. Какая разница, сколько в текущий момент времени утилизировано проца и стэка? Тупое перепечатывание кода - путь вникуда. Посмотрите в какую структуру "переименовал" idf TCB (принцип сущности не особо поменялся). В оф доке даже явно написано, что есть отличия от vanilla freertos. Имхо, изначально идея бесполезная и бредовая
Dr Zlo
На все твои вопросы ответ в одном и том же проекте
Dr Zlo
Вот в такое оно разворачивается, там ватермарк есть. Там даже текущий уровень стека есть, просто я его не вывожу в табличку.
Dmitriy
Dr Zlo
вотермарк я достал, на общий забил
Да, ватермарк сильно полезнее
Dr Zlo
Поправил
Dmitriy
А указатели доставать - а что от них толку то в вебе?
Dr Zlo
pxStackBase - это разве не указатель?
Примерно понимать что и где лежит и куда кто может протечь
Dmitriy
Тоже верно
Dr Zlo
Хз, вообще эта страница чисто для профилирования самой прошивки
Dmitriy
Ну вот так же решил себе компонент запилить
Николай
Dr Zlo
Ну вот так же решил себе компонент запилить
Ватермарк так же как я достаешь?
Dmitriy
Ток я текущую загрузку проца ещё считаю
Dmitriy
Тоже полезно
Dmitriy
Ну измеряешь количество тиков на задачу скажем за 200мс и говоришь, что вот 200мс назад средняя загрузка была столько то %
Dr Zlo
valid until counter overflow
Dmitriy
valid until counter overflow
Ну это типа для справки, в финальной версии скорее всего это выпил бы
Dmitriy
Типа первые пару часов посмотреть что там происходит.
᠌ Андрей
я вот где-то в инете недавно находил как сделать строку в несколько рядов типа так String str = " 1 2 3 " они писали какое-то слово перед кавычкой или символ, но я забыл, напомните?
Алексей
поподробнее, что значит строка в несколько рядов? Вывод строки?
᠌ Андрей
нет, что-бы можно было в коде написать строку в несколько буквальных строк как в примере
Алексей
"Строка1" "Строка2"
Алексей
Если это С++
Dmitriy
Если это С++
Какая хрен разница \n и там и там есть.
Алексей
Написание "стр1" "стр2" и там и там работает? Я не знаю.
Алексей
Поэтому уточнил.
᠌ Андрей
"Строка1" "Строка2"
я искал R"SONG()SONG"
Алексей
"стр1\nстр2" - в выводе две строки, в коде одна. не совсем понятно, что надо.
Алексей
А "стр1" "стр2" В коде 2 строки, в выводе одна
Marat
Когда размер имеет значение. :)
Dr Zlo
А "стр1" "стр2" В коде 2 строки, в выводе одна
Да, меня отвлекли. Я хотел сказать что лучше будет "Строка1\r\n" "Строка2\r\n"
Dmitriy
из недр idf typedef struct tskTaskControlBlock* TaskHandle_t;
и какой заголовочеый подключать?
ok-home
ты спрашивал как получить tcb - это то же самое что и taskhandle, который ты получаешь из uxTaskGetSystemState().
Dmitriy
там есть указатель на начало стека и вотермарк, из этого нельзя узнать, а сколько там всего было
Dmitriy
на самом деле, я уже забил, потому что более важно, сколько осталось, а сколько было всегда можно в исходниках посмотреть
Dmitriy
т.е. если там 16кб осталось, наверное слишком дохрена выделили памяти, если там 100 байт осталось, ну как то это опасно, лучше еще подкинуть, если общей памяти хватает. У меня со всеми наворотами 190кб свободной памяти остается.
ok-home
да вот не скажи, там нет полей pxTCB->pxEndOfStack – pxTCB->pxStack
Of course, there is a reason for FreeRTOS not storing that pxEndOfStack by default: It is not needed by the Kernel. So enabling configRECORD_STACK_HIGH_ADDRESS will need 4 more bytes of RAM for each task, plus a few code bytes to set that value. But for debugging purposes, this is very well spent.
ok-home
Спасибо, я это не нарыл.
#if ( ( portSTACK_GROWTH > 0 ) || ( configRECORD_STACK_HIGH_ADDRESS == 1 ) ) StackType_t * pxEndOfStack; /*< Points to the highest valid address for the stack. */ #endif
Dmitriy
Супер, теперь дополню полную диагностику....
ok-home
Супер, теперь дополню полную диагностику....
ну тогда уже и это добавь esp_dump_per_task_heap_info(); Task: Pre-Scheduler allocs -> CAP_8BIT: 1924 CAP_32BIT: 0 Task: main -> CAP_8BIT: 4516 CAP_32BIT: 0 Task: ipc_isr_init -> CAP_8BIT: 2212 CAP_32BIT: 0 Task: ipc0 -> CAP_8BIT: 10588 CAP_32BIT: 0 Task: ipc1 -> CAP_8BIT: 28 CAP_32BIT: 0 Task: example_task -> CAP_8BIT: 5116 CAP_32BIT: 516
ok-home
это реальное потребление памяти из кучи по задачам
Dmitriy
это реальное потребление памяти из кучи по задачам
esp_dump_per_task_heap_info - не гуглится, это твоя функция?
Dmitriy
не очень понял откуда эту инфу брать
Dmitriy
heap_caps_get_info это что ли?
ok-home
https://github.com/espressif/esp-idf/tree/1cb31e50943bb757966ca91ed7f4852692a5b0ed/examples/system/heap_task_tracking
ok-home
heap_caps_get_info это что ли?
да, это я из примера выдернул
Dmitriy
Прикольно, прикручу себе. Не знаю, есть ли смысл п 8 и 32 байт группировать, сразу бы выводил сколько байт на задачу потребляется...
ok-home
Прикольно, прикручу себе. Не знаю, есть ли смысл п 8 и 32 байт группировать, сразу бы выводил сколько байт на задачу потребляется...
это немного другое ram & iram, но учти что он показывает память выделяемую при создании задачи - если ты из main создаешь task, то память относится к main, потому что main запрашивает память на task ( stack,tcb....)
Dmitriy
да
ну это логично. прикручу. Надо подумать как это все объединить и сделать красивую вебку....
᠌ Андрей
можете подсказать, почему? код полностью взят отсюда:
᠌ Андрей
https://randomnerdtutorials.com/esp8266-nodemcu-stepper-motor-28byj-48-uln2003/
᠌ Андрей
тоже точно такая же как по ссылке
тоже точно такая же как по ссылке
Все всегда так говорят
Daniil
Всем привет. Кто в курсе, как программировать мультиконтроллеры? Например kb9012qf
᠌ Андрей
Все всегда так говорят
собственно вот так
᠌ Андрей
D5 - IN1 D2 - IN2 D1 - IN3 D6 - IN4 ну и конечно пины указываю в соответствующем порядке AccelStepper stepper(AccelStepper::HALF4WIRE, D5, D2, D1, D6);
᠌ Андрей
и питание на драйвер и на ноду
᠌ Андрей
да
Serg
А почему по схеме не подключили?
Serg
Вот так.
᠌ Андрей
Вот так.
о том что логические пины не в том порядке? думал не имеет значения если указал соответствующий порядок при инициализации
Serg
Может и не имеет, но если не работает проще повторить как в статье.
Serg
᠌ Андрей
ага