Dmitriy
1. Это ниразу не вариант. Это противоречит модульной структуре
2. Ну да, я не понял, что нужно подключить, что бы TCB_t структура появилась.
3. Ну вот я пока без этого телеметрию сделал, а так было бы интересно выводить загрузку cpu и сколько стека осталось в % например.
Alexey
Какая разница, сколько осталось стэка? Он рассчитывается единожды на этапе разработки. Использовали больше - канарейки вам об этом сообщат, пересматривайте расчеты. Это же мк, там крутится постоянный набор однотипных задач. Какая разница, сколько в текущий момент времени утилизировано проца и стэка?
Тупое перепечатывание кода - путь вникуда. Посмотрите в какую структуру "переименовал" idf TCB (принцип сущности не особо поменялся). В оф доке даже явно написано, что есть отличия от vanilla freertos. Имхо, изначально идея бесполезная и бредовая
Dr Zlo
На все твои вопросы ответ в одном и том же проекте
Dr Zlo
Вот в такое оно разворачивается, там ватермарк есть. Там даже текущий уровень стека есть, просто я его не вывожу в табличку.
Andy
Dmitriy
Dmitriy
Dr Zlo
Dr Zlo
Dmitriy
А указатели доставать - а что от них толку то в вебе?
Dmitriy
Тоже верно
Dr Zlo
Хз, вообще эта страница чисто для профилирования самой прошивки
Dmitriy
Ну вот так же решил себе компонент запилить
Николай
Dr Zlo
Dmitriy
Dmitriy
Ток я текущую загрузку проца ещё считаю
Dmitriy
Тоже полезно
Dr Zlo
Dmitriy
Ну измеряешь количество тиков на задачу скажем за 200мс и говоришь, что вот 200мс назад средняя загрузка была столько то %
Dr Zlo
valid until counter overflow
Dmitriy
Типа первые пару часов посмотреть что там происходит.
᠌ Андрей
я вот где-то в инете недавно находил как сделать строку в несколько рядов типа так
String str = "
1
2
3
"
они писали какое-то слово перед кавычкой или символ, но я забыл, напомните?
Алексей
поподробнее, что значит строка в несколько рядов? Вывод строки?
᠌ Андрей
нет, что-бы можно было в коде написать строку в несколько буквальных строк
как в примере
Dr Zlo
Алексей
"Строка1"
"Строка2"
Алексей
Если это С++
Dmitriy
Если это С++
Какая хрен разница \n и там и там есть.
Алексей
Написание "стр1" "стр2" и там и там работает? Я не знаю.
Алексей
Поэтому уточнил.
᠌ Андрей
Алексей
"стр1\nстр2" - в выводе две строки, в коде одна. не совсем понятно, что надо.
Алексей
А
"стр1"
"стр2"
В коде 2 строки, в выводе одна
Marat
Когда размер имеет значение. :)
ok-home
Dmitriy
ok-home
ты спрашивал как получить tcb - это то же самое что и taskhandle, который ты получаешь из uxTaskGetSystemState().
Dmitriy
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.
Dmitriy
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
не очень понял откуда эту инфу брать
Dmitriy
heap_caps_get_info это что ли?
ok-home
https://github.com/espressif/esp-idf/tree/1cb31e50943bb757966ca91ed7f4852692a5b0ed/examples/system/heap_task_tracking
Dmitriy
Прикольно, прикручу себе. Не знаю, есть ли смысл п 8 и 32 байт группировать, сразу бы выводил сколько байт на задачу потребляется...
Dmitriy
ok-home
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
Может и не имеет, но если не работает проще повторить как в статье.
᠌ Андрей
Serg
᠌ Андрей
ага