реклама на сайте
подробности

 
 
> Обязательный префикс функции.
jcxz
сообщение Aug 3 2016, 08:47
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Интересно - есть-ли у IAR возможность вставки префикса в начало каждой функции при компиляции?
Т.е. - чтобы после входа в каждую функцию в проекте, после PUSH, он вставлял некий фиксированный код (hook). Возможно это несколько ассемблерных строк или просто вызов функции BL (естественно с предварительным сохранением исходного LR на стеке). Видел такую возможность у какого-то компилятора, не помню точно, но вроде у CCS.
Думаю добавить в проект функционал контроля стеков задач. И думаю как это удобнее всего сделать. С помощью такого хука это можно было-бы реализовать.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Aug 4 2016, 05:37
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Вроде бы всю жизнь это называлось "пролог".
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 4 2016, 06:29
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(scifi @ Aug 4 2016, 11:37) *
Вроде бы всю жизнь это называлось "пролог".

По этому слову в доке IAR тоже ничего не находится.... sad.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 4 2016, 06:59
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(jcxz @ Aug 4 2016, 09:29) *
По этому слову в доке IAR тоже ничего не находится.... sad.gif


Специально залез в доку IAR посмотреть наличие проблемы, потому как немыслимо чтобы IAR не выделял внимания контролю стека.
Ну и точно, там море возможностей прецизионно контролировать стек.
Читайте EWARM_DevelopmentGuide.ENU.pdf со страницы 92

Цитата(jcxz @ Aug 4 2016, 05:58) *
Не поверите, но sprintf() не использую нигде в embedded (в IAR и CCS по-крайней мере). В IAR-проектах вместо неё использую _Printf() - она удобнее.


Почему же, верю.
В моих проектах можно найти по 3-4 отдельных автономных реализаций sprintf.
Ибо каждая RTOS, каждый пакет претендующий на мультиплатформенность содержит файлы с переписанными стандартными библиотеками C-и.
Это не удобство, а трагедия, поскольку возникает еще один повод для путаницы.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 4 2016, 08:23
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AlexandrY @ Aug 4 2016, 12:59) *
Специально залез в доку IAR посмотреть наличие проблемы, потому как немыслимо чтобы IAR не выделял внимания контролю стека.
Ну и точно, там море возможностей прецизионно контролировать стек.
Читайте EWARM_DevelopmentGuide.ENU.pdf со страницы 92

Именно эту доку я и изучал. На этой странице у меня "CHOOSING A LINKER CONFIGURATION FILE" и др. мало относящиеся к контролю стека главы.
Не сочтите за труд указать название главы?

Цитата(AlexandrY @ Aug 4 2016, 12:59) *
Ибо каждая RTOS, каждый пакет претендующий на мультиплатформенность содержит файлы с переписанными стандартными библиотеками C-и.
Это не удобство, а трагедия, поскольку возникает еще один повод для путаницы.

Я не гонюсь за мультиплатформенностью. Она малополезна в embedded, когда проект привязан даже не только к ядру, но и более сильно - периферии.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 4 2016, 08:40
Сообщение #6


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(jcxz @ Aug 4 2016, 11:23) *
Не сочтите за труд указать название главы?

Я не гонюсь за мультиплатформенностью. Она малополезна в embedded, когда проект привязан даже не только к ядру, но и более сильно - периферии.


"Stack usage analysis"

А кто гонится? Все мы работаем одинаково.
Поэтому я и знаю где реальная проблема обсуждается, а где надуманная или несущественная.

Открытые проекты с исходниками все поголовно мультиплатформенные, это не нам решать, это их природа такая, иначе они не выживают.
Мы их берем и затачиваем.
А если не можем заточить, то юзаем GCC и говорим что это круто. biggrin.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 4 2016, 10:11
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AlexandrY @ Aug 4 2016, 14:40) *
"Stack usage analysis"

Не подходит. Толку от него мало. В коде куча косвенных вызовов функций.
И это не подходит: but if there are indirect calls (calls using function pointers) in your application, you must supply a list of possible functions that can be called from each calling function.
Так как не я один пишу этот код, а есть товарищи, любящие всякие классы с виртуальными член-функциями и пихающие их куда нужно и не нужно. А заставить их делать это для своего кода - нереально. Да и малоэффективно.
Да и опять-же - в случае использования чужого кода (всяких стеков и либ), что делать? Шерстить весь этот код для supply a list of possible functions???
Нужен именно run-time контроль, а не build-time.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 4 2016, 12:38
Сообщение #8


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(jcxz @ Aug 4 2016, 13:11) *
Не подходит. Толку от него мало. В коде куча косвенных вызовов функций.

Так как не я один пишу этот код, а есть товарищи, любящие всякие классы с виртуальными член-функциями и пихающие их куда нужно и не нужно. А заставить их делать это для своего кода - нереально. Да и малоэффективно.


Не куча, а где нибудь в районе сотни.
IAR все косвенные вызовы аккуратно показывает в Call graph-е.

Если у вас есть к тому же товарищи, то раздать им по десятку таких вызовов и вы за день сделаете управляющий файл для анализатора вызовов.
По любому косвенные вызовы надо знать в лицо, как самые граблеопасные места.

Про эффективность не понял. Анализатор вызовов абсолютно точно считает стек.
И если стоит задача урезать максимально стек лучшего способа не существует.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 5 2016, 08:28
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AlexandrY @ Aug 4 2016, 18:38) *
Если у вас есть к тому же товарищи, то раздать им по десятку таких вызовов и вы за день сделаете управляющий файл для анализатора вызовов.
По любому косвенные вызовы надо знать в лицо, как самые граблеопасные места.

Это Вы так считаете. И я. А товарищам объяснить невозможно - они всё равно делают как делали и не хотят ни в чём разбираться. А ПО потом глючить начинает совсем в другом месте, не там где набыдлокодили.

Цитата(AlexandrY @ Aug 4 2016, 18:38) *
Про эффективность не понял.

Неэффективно, так как требует постоянного контроля кода, заполнения чего-то там при каждом изменении/добавлении/убирании этих самых функций. Да и ещё и правильного заполнения. 100% что забудут добавить или неправильно добавят или.... и всё насмарку - опять ищи почему глючит.
Механизм контроля должен быть внешний, не требующий постояных трудозатрат на его поддержание и чтобы его один раз реализовал и забыл. И только включать быстро (одним дефайном или ещё чем) когда надо и отключать когда не надо.
А иначе проще тогда уж по-старинке: залить стеки шаблоном и глазами проконтролировать затёртость шаблона.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 5 2016, 10:52
Сообщение #10


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(jcxz @ Aug 5 2016, 11:28) *
Неэффективно, так как требует постоянного контроля кода, заполнения чего-то там ...


Т.е. хотите забабахать статистический движок как в линуксах?
И стека не жалко, и ресурсов процессорного времени и риалтайма?

Я думаю если даже Segger этого не сделал, то это никому и не надо.
Старых добрых методов хватает.

Да и статистика дело тонкое.
Не скажете же заказчику после того как все рухнуло, что вероятность переполнения стека была всего то 0.1% с уровнем доверия 95% при эмпирической гипотезе о распределении.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 8 2016, 11:24
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AlexandrY @ Aug 5 2016, 16:52) *
Т.е. хотите забабахать статистический движок как в линуксах?
И стека не жалко, и ресурсов процессорного времени и риалтайма?

Причём тут какой-то движок? Причём тут заказчик??? Речь идёт об отладке ПО и средствах отладки.
Идея простейшая: при каждом изменении SP (в си - после входа в функцию и выделения стекового фрейма), проверять SP на допустимость (нахождение в некотором диапазоне адресов). Переменные, хранящие контролируемый диапазон, обновлять при каждом переключении задач (в соответствующем хуке ОС).
Это если бы была возможность написать свой пролог функции.
Если нет, другой способ: так же контролировать SP на нахождение в диапазоне только периодически, как можно чаще, в высокочастотном таймерном прерывании.

Дополнительного стека для этого не нужно. Процессорное время конечно нужно, но этот контроль нужно включать только тогда когда нужно - при отладке, при возникновении подозрения на переполнение стека, при каком-то непонятном поведении ПО, чтобы отбросить вариант переполнения стека.
Когда проверять не нужно - просто комментируем соответствующий #define и всё. У меня сейчас так же уже реализована проверка на максимальную длительность запрета прерываний в ПО: запускается ВЧ прерывание и контролируются интервалы времени между прерываниями. Работает отлично - уже не одно место нашёл, где коллеги кривыми ручками надолго запрещали прерывания, нарушая тем самым работу драйверов периферии.
Можно конечно по-старинке: просматривать затёртость шаблона заполнения стека. Но это менее удобно и самое главное - высока вероятность пропуска некоторых случаев переполнения стека.

Идеально было-бы если бы процессорное ядро имело средства контроля выхода SP за некий диапазон - генерило какое-либо исключение в таком случае. Но разработчики ядра не позаботились об этом, жаль...
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 9 2016, 11:29
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(jcxz @ Aug 8 2016, 14:24) *
Идеально было-бы если бы процессорное ядро имело средства контроля выхода SP за некий диапазон - генерило какое-либо исключение в таком случае. Но разработчики ядра не позаботились об этом, жаль...

Ну здрассте. Есть же watchpoint, он же data breakpoint.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 9 2016, 11:42
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(scifi @ Aug 9 2016, 17:29) *
Ну здрассте. Есть же watchpoint, он же data breakpoint.

А каким образом с его помощью можно контролировать SP или доступ к памяти через SP?
Оно вроде насколько я знаю только контролирует доступ к памяти вне зависимости от регистра из которого была запись/чтение. Или у меня J-Link какой-то урезанный???
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 9 2016, 13:07
Сообщение #14


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(jcxz @ Aug 9 2016, 14:42) *
А каким образом с его помощью можно контролировать SP или доступ к памяти через SP?


Да никак, никому это не нужно.

Сначала скажите, вы боретесь с ошибкой или с саботажем?
Если с ошибкой, то ставите watchpoint на проблемном месте и находите баг за считанные минуты. Тут даже говорит не о чем.
Подбирать нужную глубину стека новички учатся на первый год стажировки.

Другое дело с конфликтами прерываний. Но не вижу способа чем может помочь в этом еще одно высокочастотное прерывание.
Какое бы оно не было высокочастотное оно все равно случится постфактум, когда все уже сбилось и рухнуло.

В таких вещах просто вставляется диагностический код, но не тотально везде, а целевой, на поиск только определенной ошибки по известному диагнозу.

Скажем засекаем метки времени в своем прерывании и делаем останов когда время затянулось дольше обычного.
Правда без таймлайна JLink тут тоже мало толку будет.
Таймлайн это все!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- jcxz   Обязательный префикс функции.   Aug 3 2016, 08:47
- - ig_z   QUOTE (jcxz @ Aug 3 2016, 11:47) Т.е. - ч...   Aug 3 2016, 08:58
|- - demiurg_spb   Цитата(ig_z @ Aug 3 2016, 11:58) Такое то...   Aug 3 2016, 13:36
- - ViKo   Цитата(jcxz @ Aug 3 2016, 11:47) Думаю до...   Aug 3 2016, 09:08
|- - jcxz   Цитата(ViKo @ Aug 3 2016, 15:08) А в idle...   Aug 3 2016, 10:05
- - ViKo   Да, вроде, ни первое ни второе не помеха хорошему ...   Aug 3 2016, 10:08
|- - jcxz   Цитата(ViKo @ Aug 3 2016, 16:08) Да, врод...   Aug 3 2016, 10:23
|- - scifi   Цитата(jcxz @ Aug 3 2016, 13:23) Других с...   Aug 3 2016, 10:44
|- - AlexandrY   Цитата(jcxz @ Aug 3 2016, 13:23) Забитие ...   Aug 3 2016, 10:47
|- - jcxz   Цитата(AlexandrY @ Aug 3 2016, 16:47) J-L...   Aug 3 2016, 11:11
- - k155la3   да простят меня .... переобразовать return в Retu...   Aug 3 2016, 13:16
|- - jcxz   Цитата(k155la3 @ Aug 3 2016, 19:16) да пр...   Aug 3 2016, 15:20
|- - demiurg_spb   Цитата(jcxz @ Aug 3 2016, 18:20) Прошерст...   Aug 3 2016, 16:00
|- - AlexandrY   Цитата(demiurg_spb @ Aug 3 2016, 19:00) В...   Aug 3 2016, 16:11
|- - demiurg_spb   Цитата(AlexandrY @ Aug 3 2016, 19:11) Сде...   Aug 3 2016, 17:01
|- - jcxz   Цитата(AlexandrY @ Aug 3 2016, 22:11) А и...   Aug 3 2016, 18:14
|- - AlexandrY   Цитата(jcxz @ Aug 3 2016, 21:14) Терпимо:...   Aug 3 2016, 19:46
|- - jcxz   Цитата(AlexandrY @ Aug 4 2016, 01:46) Т.е...   Aug 4 2016, 02:58
|- - AlexandrY   Цитата(jcxz @ Aug 8 2016, 14:24) Идея про...   Aug 8 2016, 12:47
||- - jcxz   Цитата(AlexandrY @ Aug 8 2016, 18:47) Это...   Aug 9 2016, 10:55
|- - scifi   Цитата(jcxz @ Aug 9 2016, 14:42) А каким ...   Aug 9 2016, 11:49
|- - jcxz   Цитата(AlexandrY @ Aug 9 2016, 19:07) Да ...   Aug 10 2016, 06:37
|- - scifi   Цитата(jcxz @ Aug 10 2016, 09:37) Каким о...   Aug 10 2016, 06:57
||- - demiurg_spb   Цитата(scifi @ Aug 10 2016, 09:57) Коллег...   Aug 10 2016, 09:07
||- - zltigo   QUOTE (scifi @ Aug 10 2016, 09:57) У меня...   Aug 10 2016, 09:41
|||- - scifi   Цитата(zltigo @ Aug 10 2016, 12:41) Ну Вы...   Aug 10 2016, 09:50
||- - jcxz   Цитата(scifi @ Aug 10 2016, 12:57) У меня...   Aug 10 2016, 10:07
||- - scifi   Цитата(jcxz @ Aug 10 2016, 13:07) Вообще-...   Aug 10 2016, 10:12
|- - AlexandrY   Цитата(jcxz @ Aug 10 2016, 09:37) Мне каж...   Aug 10 2016, 09:22
|- - jcxz   Цитата(AlexandrY @ Aug 10 2016, 15:22) Си...   Aug 10 2016, 10:34
|- - scifi   Цитата(jcxz @ Aug 10 2016, 13:34) И нет в...   Aug 10 2016, 11:10
||- - jcxz   Цитата(scifi @ Aug 10 2016, 17:10) О госп...   Aug 10 2016, 11:43
||- - AlexandrY   Цитата(jcxz @ Aug 10 2016, 14:43) Не вижу...   Aug 10 2016, 11:48
|||- - jcxz   Цитата(AlexandrY @ Aug 10 2016, 17:48) Пр...   Aug 10 2016, 11:52
|||- - AlexandrY   Цитата(jcxz @ Aug 10 2016, 14:52) Я так и...   Aug 10 2016, 12:10
|||- - jcxz   Цитата(AlexandrY @ Aug 10 2016, 18:10) Ну...   Aug 10 2016, 12:25
||- - scifi   Цитата(jcxz @ Aug 10 2016, 14:43) Хорошо....   Aug 10 2016, 20:06
||- - jcxz   Цитата(scifi @ Aug 11 2016, 02:06) Пока я...   Aug 11 2016, 01:58
||- - AlexandrY   Цитата(jcxz @ Aug 11 2016, 04:58) И причи...   Aug 11 2016, 06:30
||- - jcxz   Цитата(AlexandrY @ Aug 11 2016, 12:30) 70...   Aug 11 2016, 08:23
||- - AlexandrY   Цитата(jcxz @ Aug 11 2016, 11:23) Только ...   Aug 11 2016, 09:15
||- - jcxz   Цитата(AlexandrY @ Aug 11 2016, 15:15) Ви...   Aug 12 2016, 03:35
|- - AlexandrY   Цитата(jcxz @ Aug 10 2016, 13:34) А её пр...   Aug 10 2016, 11:42
|- - zltigo   QUOTE (jcxz @ Aug 10 2016, 13:34) char b[...   Aug 10 2016, 12:53
|- - jcxz   Цитата(zltigo @ Aug 10 2016, 18:53) Из ли...   Aug 10 2016, 13:44
- - ViKo   В Кейловской РТОС можно включить контроль переполн...   Aug 12 2016, 05:25
- - Kabdim   Может попробовать использовать MPU? Расставить за ...   Aug 12 2016, 07:54
- - AlexandrY   Цитата(Kabdim @ Aug 12 2016, 10:54) Может...   Aug 12 2016, 08:08
- - jcxz   Цитата(Kabdim @ Aug 12 2016, 13:54) Может...   Aug 12 2016, 08:48
- - ViKo   Цитата(jcxz @ Aug 12 2016, 11:48) Как это...   Aug 12 2016, 09:31
|- - jcxz   Цитата(ViKo @ Aug 12 2016, 15:31) Нет. Та...   Aug 12 2016, 09:45
|- - scifi   Цитата(jcxz @ Aug 12 2016, 12:45) хм... с...   Aug 12 2016, 09:59
|- - zltigo   QUOTE (scifi @ Aug 12 2016, 12:59) Мануал...   Aug 12 2016, 10:47
- - AlexandrY   Цитата(jcxz @ Aug 12 2016, 11:48) Ну-ну п...   Aug 12 2016, 13:36
- - jcxz   Цитата(AlexandrY @ Aug 12 2016, 19:36) А ...   Aug 13 2016, 08:16
- - zltigo   QUOTE (jcxz @ Aug 13 2016, 11:16) В динам...   Aug 13 2016, 20:09


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 14:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01777 секунд с 7
ELECTRONIX ©2004-2016