|
Обязательный префикс функции. |
|
|
|
 |
Ответов
|
Aug 4 2016, 06:59
|

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

|
Цитата(jcxz @ Aug 4 2016, 09:29)  По этому слову в доке IAR тоже ничего не находится....  Специально залез в доку IAR посмотреть наличие проблемы, потому как немыслимо чтобы IAR не выделял внимания контролю стека. Ну и точно, там море возможностей прецизионно контролировать стек. Читайте EWARM_DevelopmentGuide.ENU.pdf со страницы 92 Цитата(jcxz @ Aug 4 2016, 05:58)  Не поверите, но sprintf() не использую нигде в embedded (в IAR и CCS по-крайней мере). В IAR-проектах вместо неё использую _Printf() - она удобнее. Почему же, верю. В моих проектах можно найти по 3-4 отдельных автономных реализаций sprintf. Ибо каждая RTOS, каждый пакет претендующий на мультиплатформенность содержит файлы с переписанными стандартными библиотеками C-и. Это не удобство, а трагедия, поскольку возникает еще один повод для путаницы.
|
|
|
|
|
Aug 4 2016, 08:23
|
Гуру
     
Группа: Свой
Сообщений: 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, когда проект привязан даже не только к ядру, но и более сильно - периферии.
|
|
|
|
|
Aug 4 2016, 08:40
|

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

|
Цитата(jcxz @ Aug 4 2016, 11:23)  Не сочтите за труд указать название главы?
Я не гонюсь за мультиплатформенностью. Она малополезна в embedded, когда проект привязан даже не только к ядру, но и более сильно - периферии. "Stack usage analysis" А кто гонится? Все мы работаем одинаково. Поэтому я и знаю где реальная проблема обсуждается, а где надуманная или несущественная. Открытые проекты с исходниками все поголовно мультиплатформенные, это не нам решать, это их природа такая, иначе они не выживают. Мы их берем и затачиваем. А если не можем заточить, то юзаем GCC и говорим что это круто.
|
|
|
|
|
Aug 4 2016, 10:11
|
Гуру
     
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Aug 4 2016, 12:38
|

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

|
Цитата(jcxz @ Aug 4 2016, 13:11)  Не подходит. Толку от него мало. В коде куча косвенных вызовов функций.
Так как не я один пишу этот код, а есть товарищи, любящие всякие классы с виртуальными член-функциями и пихающие их куда нужно и не нужно. А заставить их делать это для своего кода - нереально. Да и малоэффективно. Не куча, а где нибудь в районе сотни. IAR все косвенные вызовы аккуратно показывает в Call graph-е. Если у вас есть к тому же товарищи, то раздать им по десятку таких вызовов и вы за день сделаете управляющий файл для анализатора вызовов. По любому косвенные вызовы надо знать в лицо, как самые граблеопасные места. Про эффективность не понял. Анализатор вызовов абсолютно точно считает стек. И если стоит задача урезать максимально стек лучшего способа не существует.
|
|
|
|
|
Aug 5 2016, 08:28
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(AlexandrY @ Aug 4 2016, 18:38)  Если у вас есть к тому же товарищи, то раздать им по десятку таких вызовов и вы за день сделаете управляющий файл для анализатора вызовов. По любому косвенные вызовы надо знать в лицо, как самые граблеопасные места. Это Вы так считаете. И я. А товарищам объяснить невозможно - они всё равно делают как делали и не хотят ни в чём разбираться. А ПО потом глючить начинает совсем в другом месте, не там где набыдлокодили. Цитата(AlexandrY @ Aug 4 2016, 18:38)  Про эффективность не понял. Неэффективно, так как требует постоянного контроля кода, заполнения чего-то там при каждом изменении/добавлении/убирании этих самых функций. Да и ещё и правильного заполнения. 100% что забудут добавить или неправильно добавят или.... и всё насмарку - опять ищи почему глючит. Механизм контроля должен быть внешний, не требующий постояных трудозатрат на его поддержание и чтобы его один раз реализовал и забыл. И только включать быстро (одним дефайном или ещё чем) когда надо и отключать когда не надо. А иначе проще тогда уж по-старинке: залить стеки шаблоном и глазами проконтролировать затёртость шаблона.
|
|
|
|
|
Aug 5 2016, 10:52
|

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

|
Цитата(jcxz @ Aug 5 2016, 11:28)  Неэффективно, так как требует постоянного контроля кода, заполнения чего-то там ... Т.е. хотите забабахать статистический движок как в линуксах? И стека не жалко, и ресурсов процессорного времени и риалтайма? Я думаю если даже Segger этого не сделал, то это никому и не надо. Старых добрых методов хватает. Да и статистика дело тонкое. Не скажете же заказчику после того как все рухнуло, что вероятность переполнения стека была всего то 0.1% с уровнем доверия 95% при эмпирической гипотезе о распределении.
|
|
|
|
|
Aug 8 2016, 11:24
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(AlexandrY @ Aug 5 2016, 16:52)  Т.е. хотите забабахать статистический движок как в линуксах? И стека не жалко, и ресурсов процессорного времени и риалтайма? Причём тут какой-то движок? Причём тут заказчик??? Речь идёт об отладке ПО и средствах отладки. Идея простейшая: при каждом изменении SP (в си - после входа в функцию и выделения стекового фрейма), проверять SP на допустимость (нахождение в некотором диапазоне адресов). Переменные, хранящие контролируемый диапазон, обновлять при каждом переключении задач (в соответствующем хуке ОС). Это если бы была возможность написать свой пролог функции. Если нет, другой способ: так же контролировать SP на нахождение в диапазоне только периодически, как можно чаще, в высокочастотном таймерном прерывании. Дополнительного стека для этого не нужно. Процессорное время конечно нужно, но этот контроль нужно включать только тогда когда нужно - при отладке, при возникновении подозрения на переполнение стека, при каком-то непонятном поведении ПО, чтобы отбросить вариант переполнения стека. Когда проверять не нужно - просто комментируем соответствующий #define и всё. У меня сейчас так же уже реализована проверка на максимальную длительность запрета прерываний в ПО: запускается ВЧ прерывание и контролируются интервалы времени между прерываниями. Работает отлично - уже не одно место нашёл, где коллеги кривыми ручками надолго запрещали прерывания, нарушая тем самым работу драйверов периферии. Можно конечно по-старинке: просматривать затёртость шаблона заполнения стека. Но это менее удобно и самое главное - высока вероятность пропуска некоторых случаев переполнения стека. Идеально было-бы если бы процессорное ядро имело средства контроля выхода SP за некий диапазон - генерило какое-либо исключение в таком случае. Но разработчики ядра не позаботились об этом, жаль...
|
|
|
|
|
Aug 9 2016, 13:07
|

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

|
Цитата(jcxz @ Aug 9 2016, 14:42)  А каким образом с его помощью можно контролировать SP или доступ к памяти через SP? Да никак, никому это не нужно. Сначала скажите, вы боретесь с ошибкой или с саботажем? Если с ошибкой, то ставите watchpoint на проблемном месте и находите баг за считанные минуты. Тут даже говорит не о чем. Подбирать нужную глубину стека новички учатся на первый год стажировки. Другое дело с конфликтами прерываний. Но не вижу способа чем может помочь в этом еще одно высокочастотное прерывание. Какое бы оно не было высокочастотное оно все равно случится постфактум, когда все уже сбилось и рухнуло. В таких вещах просто вставляется диагностический код, но не тотально везде, а целевой, на поиск только определенной ошибки по известному диагнозу. Скажем засекаем метки времени в своем прерывании и делаем останов когда время затянулось дольше обычного. Правда без таймлайна JLink тут тоже мало толку будет. Таймлайн это все!
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|