Перейти к содержанию
    

Отследить переменные на стеке.

9 минут назад, haker_fox сказал:

давать ссылку на документацию и раздел

Окей. Например, документ PM0056, страницы 13-17, 37-39. Таблица 1: "Handler Exception -  handlers  - Always privileged Main stack"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 и сразу же этот буфер передаю в следующую ф-цию для обработки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, jenya7 said:

а если не сработает?  стек перегрузиться и таск будет работать дальше?

Да что угодно произойдёт. Если после стека задачи память не занята ничем, то можно вообще переполнение не заметить. Хотя по факту оно будет. А если за стеком лежат полезные данные, которые используются программой - тут можно только пофантазировать, что произойдёт.

2 minutes ago, jenya7 said:

стек вроде достаточный

То, что величина стека довольно большая - не показатель. Стек должен быть необходимой величины. Это может быть 64 слова (в FreeRTOS стек задаётся 32-битными словами, ЕМНИП), но их должно быть достаточно для нужд задачи. А другой задаче может не хватить и 10 Кслов. Тут уж действительно всё от задачи зависит😜

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И более того, каждая вызываемая из задачи функция отбирает свою долю от стека задачи. При работе RTOS используется PSP-указатель стека (Process Stack Pointer) (взято из показанной выше документации, из личных наблюдений в отладчике и из анализа исходников FreeRTOS). А во время прерываний работает MSP-указатель стека. Поэтому эти стеки не накладываются и не пересекаются. Ну конечно если они не вышли за определенные для них границы. 
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, jenya7 said:

я использую Queue но в данном случаю я данные вытаскиваю из FPGA по SPI и сразу же этот буфер передаю в следующую ф-цию для обработки.

Вот честно - причин неадекватной работы программы может быть очень много. Вам нужно попридумывать способы отыскания проблемы. В числе подобных причин может быть неправильно понятая документация на аппаратное обеспечение или обеспечение программное (API той же ОСРВ).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Variant99 сказал:

И более того, каждая вызываемая из задачи функция отбирает свою долю от стека задачи.

Опять ахинею несёте. Функции не обязаны что либо "отбирать из стека".

1 час назад, haker_fox сказал:

Как я понимаю, у Вас - FreeRTOS. Там для Cortex-Mx

ТС вроде нигде не указывал - какое у него именно ARM-ядро.

Видимо тут собрались одни ясновидящие.... Кто-то прорицает тип ядра, другие так и вообще - вангуют конфигурацию стека(-ов) даже не зная какое ядро у ТСа и в каком режиме оно работает....  :shok:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 1/4/2023 at 4:40 PM, jcxz said:

Опять ахинею несёте. Функции не обязаны что либо "отбирать из стека".

ТС вроде нигде не указывал - какое у него именно ARM-ядро.

Видимо тут собрались одни ясновидящие.... Кто-то прорицает тип ядра, другие так и вообще - вангуют конфигурацию стека(-ов) даже не зная какое ядро у ТСа и в каком режиме оно работает....  :shok:

Cortex-M4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 минут назад, jcxz сказал:

Функции не обязаны что либо "отбирать из стека".

 

То есть? Потрудитесь привести ссылки на документацию по RTOS в части содержимого стека задачи, а так же процитируйте АРМ-мануал в части назначения Process Stack Pointer. Сделайте уж милость, без пустых споров, а по документам.

Я же, в свою очередь, могу привести из отладчика скрины реальной работы всех этих стеков. Однако, если вы это сделаете сами, это будет гораздо полезнее как для вас, так и более значимо для окружающих. Вы ж "гуру" типа.

14 минут назад, jcxz сказал:

вангуют конфигурацию стека(-ов) даже не зная какое ядро

Достаточно упоминания о смотрированной FreeRTOS (кстати, я точно угадал её наличие), чтобы понять, что работают два указателя стека - PSP и MSP. Для этого надо просто знать, как работает FreeRTOS, знать её внутрянку. Я могу привести ссылки на документы и фрагменты исходников самой РТОС, но лучше будет, если это сделаете вы. Так вы хоть сами перестанете раздувать спор ради спора.

Изменено пользователем Variant99

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 минут назад, Variant99 сказал:

То есть?

То и есть: в архитектуре ARM функция в общем случае может вообще не использовать стек.

26 минут назад, Variant99 сказал:

Достаточно упоминания о смотрированной FreeRTOS

Упоминание было уже после ваших гаданий.

26 минут назад, Variant99 сказал:

(кстати, я точно угадал её наличие)

Да ладно? Может не будем врать? А это:

2 часа назад, Variant99 сказал:

и навряд ли используется RTOS

кто писал?

26 минут назад, Variant99 сказал:

чтобы понять, что работают два указателя стека - PSP и MSP.

В начале темы вы вообще не знали, что в Cortex-M есть 2 указателя стека. :biggrin:

Кроме того - только буквально пару сообщений назад ТС признался, что у него Cortex-M. А не ARM9 или Cortex-A например. А в начале темы тип ядра был совершенно не известен. О чём я и писал. Но вы не поняли о чём идёт речь. Впрочем какая разница - вам ведь всё равно, что прерывания и стеки в тех ядрах работают совсем иначе, чем в Cortex-M.

Но уже переобулись в воздухе и начали нести следующую галиматью. Про:

37 минут назад, jcxz сказал:

каждая вызываемая из задачи функция отбирает свою долю от стека задачи.

:punish:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...