Variant99 7 4 января, 2023 Опубликовано 4 января, 2023 · Жалоба 9 минут назад, haker_fox сказал: давать ссылку на документацию и раздел Окей. Например, документ PM0056, страницы 13-17, 37-39. Таблица 1: "Handler Exception - handlers - Always privileged Main stack" 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 4 января, 2023 Опубликовано 4 января, 2023 · Жалоба On 1/4/2023 at 3:04 PM, Variant99 said: Оооо, нуууу воооот, вот. Хехе, вот вам и объяснение. Размер стека задачи, в которой записаны эти функции с массивом, он какой? И кстати, коль уж работает RTOS, то используйте её инструменты - очереди (Queue), отправку в очередь и прием из очереди для перемещения данных. стек вроде достаточный rtos_stat = FRTOS1_xTaskCreate((TaskFunction_t)operation_task, (signed char*) "oper_task", 2048, NULL, 2, NULL); я использую Queue но в данном случаю я данные вытаскиваю из FPGA по SPI и сразу же этот буфер передаю в следующую ф-цию для обработки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 4 января, 2023 Опубликовано 4 января, 2023 · Жалоба 3 minutes ago, jenya7 said: а если не сработает? стек перегрузиться и таск будет работать дальше? Да что угодно произойдёт. Если после стека задачи память не занята ничем, то можно вообще переполнение не заметить. Хотя по факту оно будет. А если за стеком лежат полезные данные, которые используются программой - тут можно только пофантазировать, что произойдёт. 2 minutes ago, jenya7 said: стек вроде достаточный То, что величина стека довольно большая - не показатель. Стек должен быть необходимой величины. Это может быть 64 слова (в FreeRTOS стек задаётся 32-битными словами, ЕМНИП), но их должно быть достаточно для нужд задачи. А другой задаче может не хватить и 10 Кслов. Тут уж действительно всё от задачи зависит😜 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Variant99 7 4 января, 2023 Опубликовано 4 января, 2023 · Жалоба И более того, каждая вызываемая из задачи функция отбирает свою долю от стека задачи. При работе RTOS используется PSP-указатель стека (Process Stack Pointer) (взято из показанной выше документации, из личных наблюдений в отладчике и из анализа исходников FreeRTOS). А во время прерываний работает MSP-указатель стека. Поэтому эти стеки не накладываются и не пересекаются. Ну конечно если они не вышли за определенные для них границы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 4 января, 2023 Опубликовано 4 января, 2023 · Жалоба 9 minutes ago, jenya7 said: я использую Queue но в данном случаю я данные вытаскиваю из FPGA по SPI и сразу же этот буфер передаю в следующую ф-цию для обработки. Вот честно - причин неадекватной работы программы может быть очень много. Вам нужно попридумывать способы отыскания проблемы. В числе подобных причин может быть неправильно понятая документация на аппаратное обеспечение или обеспечение программное (API той же ОСРВ). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 4 января, 2023 Опубликовано 4 января, 2023 · Жалоба 1 час назад, Variant99 сказал: И более того, каждая вызываемая из задачи функция отбирает свою долю от стека задачи. Опять ахинею несёте. Функции не обязаны что либо "отбирать из стека". 1 час назад, haker_fox сказал: Как я понимаю, у Вас - FreeRTOS. Там для Cortex-Mx ТС вроде нигде не указывал - какое у него именно ARM-ядро. Видимо тут собрались одни ясновидящие.... Кто-то прорицает тип ядра, другие так и вообще - вангуют конфигурацию стека(-ов) даже не зная какое ядро у ТСа и в каком режиме оно работает.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 4 января, 2023 Опубликовано 4 января, 2023 · Жалоба On 1/4/2023 at 4:40 PM, jcxz said: Опять ахинею несёте. Функции не обязаны что либо "отбирать из стека". ТС вроде нигде не указывал - какое у него именно ARM-ядро. Видимо тут собрались одни ясновидящие.... Кто-то прорицает тип ядра, другие так и вообще - вангуют конфигурацию стека(-ов) даже не зная какое ядро у ТСа и в каком режиме оно работает.... Cortex-M4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Variant99 7 4 января, 2023 Опубликовано 4 января, 2023 (изменено) · Жалоба 11 минут назад, jcxz сказал: Функции не обязаны что либо "отбирать из стека". То есть? Потрудитесь привести ссылки на документацию по RTOS в части содержимого стека задачи, а так же процитируйте АРМ-мануал в части назначения Process Stack Pointer. Сделайте уж милость, без пустых споров, а по документам. Я же, в свою очередь, могу привести из отладчика скрины реальной работы всех этих стеков. Однако, если вы это сделаете сами, это будет гораздо полезнее как для вас, так и более значимо для окружающих. Вы ж "гуру" типа. 14 минут назад, jcxz сказал: вангуют конфигурацию стека(-ов) даже не зная какое ядро Достаточно упоминания о смотрированной FreeRTOS (кстати, я точно угадал её наличие), чтобы понять, что работают два указателя стека - PSP и MSP. Для этого надо просто знать, как работает FreeRTOS, знать её внутрянку. Я могу привести ссылки на документы и фрагменты исходников самой РТОС, но лучше будет, если это сделаете вы. Так вы хоть сами перестанете раздувать спор ради спора. Изменено 4 января, 2023 пользователем Variant99 1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 4 января, 2023 Опубликовано 4 января, 2023 · Жалоба 26 минут назад, Variant99 сказал: То есть? То и есть: в архитектуре ARM функция в общем случае может вообще не использовать стек. 26 минут назад, Variant99 сказал: Достаточно упоминания о смотрированной FreeRTOS Упоминание было уже после ваших гаданий. 26 минут назад, Variant99 сказал: (кстати, я точно угадал её наличие) Да ладно? Может не будем врать? А это: 2 часа назад, Variant99 сказал: и навряд ли используется RTOS кто писал? 26 минут назад, Variant99 сказал: чтобы понять, что работают два указателя стека - PSP и MSP. В начале темы вы вообще не знали, что в Cortex-M есть 2 указателя стека. Кроме того - только буквально пару сообщений назад ТС признался, что у него Cortex-M. А не ARM9 или Cortex-A например. А в начале темы тип ядра был совершенно не известен. О чём я и писал. Но вы не поняли о чём идёт речь. Впрочем какая разница - вам ведь всё равно, что прерывания и стеки в тех ядрах работают совсем иначе, чем в Cortex-M. Но уже переобулись в воздухе и начали нести следующую галиматью. Про: 37 минут назад, jcxz сказал: каждая вызываемая из задачи функция отбирает свою долю от стека задачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться