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

 
 
> Применение буферов больше 256 байт глючит sprintf, Камень stm32L476
Димон Безпарольн...
сообщение Aug 22 2017, 19:19
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Почему при использовании буферов (у меня их 4) в разных местах размером больше 256 (ставил 400) начинает рассыпаться sprintf - выводит глюки.

В чем может быть проблема?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Михась
сообщение Aug 23 2017, 13:12
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 161
Регистрация: 29-09-10
Пользователь №: 59 816



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

http://www.keil.com/support/man/docs/armcc...59124940593.htm
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 23 2017, 19:27
Сообщение #3


Гуру
******

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



Цитата(Михась @ Aug 23 2017, 16:12) *
При компиляции опасные функции обрамляются ватермарком и при его повреждении - вызывается специальная функция.

Малоэффективно. Вот пример перед глазами - случай автора топика: выставили ватермарк на 200 ниже SP перед входом в функцию, а автор взял и выделил в функции 400, (т.е. - начало этого массива оказалось на 200 байт ниже ватермарка) и напечатал в этот буфер скажем 150 байт - ватермарк остался нетронутым, а стек переполнился и затёр соседние данные (или они его).
Да и куда ставить этот ватермарк, если автор даже не знает размера своего стека?? smile3009.gif
Go to the top of the page
 
+Quote Post
Михась
сообщение Aug 24 2017, 02:16
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 161
Регистрация: 29-09-10
Пользователь №: 59 816



Цитата(jcxz @ Aug 24 2017, 01:27) *
Малоэффективно. Вот пример перед глазами - случай автора топика: выставили ватермарк на 200 ниже SP перед входом в функцию, а автор взял и выделил в функции 400, (т.е. - начало этого массива оказалось на 200 байт ниже ватермарка) и напечатал в этот буфер скажем 150 байт - ватермарк остался нетронутым, а стек переполнился и затёр соседние данные (или они его).


Эффективно как раз. У автора действительно тяжелый случай, но он явно выпаливается по внешним признакам. А --protect_stack как раз хорошо помогает, когда выделили для разных задач много маленьких буферов и потом в результате ошибки (не хватило пару байт потому что пролюбили пробел например) при печати в буфер портится соседнее значение, причем не каждый раз. И вот тут такое исключение чрезвычайно полезно. У меня раз такая ошибка в релизное ПО ушла. Одного чара в буфере не хватило.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Димон Безпарольный   Применение буферов больше 256 байт глючит sprintf   Aug 22 2017, 19:19
- - x893   Это ЧУДО !   Aug 22 2017, 19:23
- - Димон Безпарольный   Чисто поржать - мне не до смеха. Есть какая специф...   Aug 22 2017, 19:59
|- - aaarrr   Цитата(Димон Безпарольный @ Aug 22 2017, 22...   Aug 22 2017, 20:09
|- - jcxz   Цитата(Димон Безпарольный @ Aug 22 2017, 22...   Aug 22 2017, 20:42
|- - Димон Безпарольный   Цитата(jcxz @ Aug 23 2017, 00:42) Наприме...   Aug 22 2017, 20:44
|- - aaarrr   Цитата(Димон Безпарольный @ Aug 22 2017, 23...   Aug 22 2017, 21:06
||- - Димон Безпарольный   Цитата(aaarrr @ Aug 23 2017, 01:06) Тради...   Aug 22 2017, 21:20
|- - jcxz   Цитата(Димон Безпарольный @ Aug 22 2017, 23...   Aug 22 2017, 21:18
- - Lagman   а буфер наверно объявлен как char с размером [0xff...   Aug 22 2017, 20:01
|- - Димон Безпарольный   Цитата(Lagman @ Aug 23 2017, 00:01) а буф...   Aug 22 2017, 20:03
- - aaarrr   Цитата(jcxz @ Aug 23 2017, 00:18) В некот...   Aug 22 2017, 21:29
|- - Димон Безпарольный   Цитата(aaarrr @ Aug 23 2017, 01:29) buf -...   Aug 22 2017, 21:30
|- - jcxz   Цитата(aaarrr @ Aug 23 2017, 00:29) Цитат...   Aug 22 2017, 21:33
- - Димон Безпарольный   Полагаю есть ограничение? Уж не 255 ли?   Aug 22 2017, 21:36
|- - aaarrr   Цитата(Димон Безпарольный @ Aug 23 2017, 00...   Aug 22 2017, 21:41
|- - Димон Безпарольный   Цитата(aaarrr @ Aug 23 2017, 01:41) Локал...   Aug 22 2017, 21:43
|- - aaarrr   Цитата(Димон Безпарольный @ Aug 23 2017, 00...   Aug 22 2017, 22:02
- - Димон Безпарольный   1. Буду благодарен если намекнете как. 2,3 Что де...   Aug 22 2017, 22:11
|- - aaarrr   Цитата(Димон Безпарольный @ Aug 23 2017, 01...   Aug 22 2017, 22:53
|- - jcxz   Цитата(Димон Безпарольный @ Aug 23 2017, 01...   Aug 22 2017, 23:00
||- - Димон Безпарольный   Цитата(jcxz @ Aug 23 2017, 03:00) Надо на...   Aug 23 2017, 05:29
||- - jcxz   Цитата(Димон Безпарольный @ Aug 23 2017, 08...   Aug 23 2017, 07:24
|- - alag57   Цитата(Димон Безпарольный @ Aug 23 2017, 03...   Aug 24 2017, 08:35
|- - Димон Безпарольный   Цитата(alag57 @ Aug 24 2017, 12:35) start...   Aug 24 2017, 15:40
- - aaarrr   Заполнять буфер тоже можно частями. Посмотрите, чт...   Aug 23 2017, 05:48
|- - Димон Безпарольный   Цитата(aaarrr @ Aug 23 2017, 09:48) Запол...   Aug 23 2017, 06:04
|- - aaarrr   Цитата(Димон Безпарольный @ Aug 23 2017, 09...   Aug 23 2017, 06:31
- - scifi   Я правильно понял, что ТС не выяснил, сколько у не...   Aug 23 2017, 07:27
|- - Димон Безпарольный   Цитата(scifi @ Aug 23 2017, 11:27) Я прав...   Aug 23 2017, 07:39
|- - Aleksandr Baranov   Если компилятор - IAR, то там есть встроенная функ...   Aug 23 2017, 15:04
- - Димон Безпарольный   Keil 5   Aug 23 2017, 15:51
- - Димон Безпарольный   Пытаюсь работать с ключом --protect_stack Вставил...   Aug 23 2017, 17:44
|- - Михась   Цитата(Димон Безпарольный @ Aug 24 2017, 00...   Aug 24 2017, 05:57
- - x893   Можно включить автоматическое пошаговое выполнение...   Aug 24 2017, 13:32


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:08
Рейтинг@Mail.ru


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