|
|
  |
Применение буферов больше 256 байт глючит sprintf, Камень stm32L476 |
|
|
|
Aug 22 2017, 22:02
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Димон Безпарольный @ Aug 23 2017, 00:43)  Похоже. У меня в sprintf строка в 290байт. Как это ограничение обойти? 1. Увеличить размер стека И еще постараться: 2. Не держать локальные буферы по полкилобайта 3. Не формировать sprintf'ом строки по 290 байт Это весьма расточительно, если всей памяти десятки килобайт.
|
|
|
|
|
Aug 22 2017, 22:11
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
1. Буду благодарен если намекнете как. 2,3 Что делать если надо сформировать строку: Цитата { "d" : {"deviceid":"<deviceid>","param5":"<dw>","param6":"<fullw> ",”param7”:”<kk>”,”param8”:”<diff>”,”param9”:”<maxt>” ,”param11”:”<mint>”,”param12”:”<msisdn>”,”param13”:”<imei>”,”param14”:”<mac>”,”param15”:”<ccid>”,”param16”:”<rmod>”,”param17”:”<ssid>”,”param18”:”<lin>”,,”param19”:”<uptime>”}} Бред конечно - но не я диктую моду...
|
|
|
|
|
Aug 22 2017, 22:53
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Димон Безпарольный @ Aug 23 2017, 01:11)  1. Буду благодарен если намекнете как. Даже намекнуть не могу, так как это зависит от используемого инструментария, структуры проекта и т.п., и по-хорошему должно быть известно только вам. Посмотрите документацию на компилятор, там наверняка описан некий традиционный способ установки размера стека. Сравните с тем, что имеете в своем проекте и внесите коррективы. Димон, складывается впечатление, что вы пытаетесь собрать что-то монструозное, но при этом стараетесь обходить стороной фундаментальные основы. Не получится так  Цитата(Димон Безпарольный @ Aug 23 2017, 01:11)  2,3 Что делать если надо сформировать строку: Разделить её на кучу мелких по числу param.
|
|
|
|
|
Aug 23 2017, 05:29
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
Цитата(jcxz @ Aug 23 2017, 03:00)  Надо начать с вопроса: "А зачем её формировать в этом буфере"? И можно ли без этого обойтись? Я вот тоже сейчас например в текущем проекте распарсиваю и формирую "модные" JSON-сообщения в несколько кБ (а возможно вырастут до сотен кБ), обходясь буферами в десятки-сотни байт. Без каких-либо проблем. Парсить можно разбивая строку. Но это отправляемая строка. Она целиком должна быть запихнута в сериализатор и далее на отправку. Представить не могу как частями это сделать. Заказчик очень хочет чтобы эта кишка не разбивалась.
|
|
|
|
|
Aug 23 2017, 07:24
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Димон Безпарольный @ Aug 23 2017, 08:29)  Парсить можно разбивая строку. Но это отправляемая строка. Она целиком должна быть запихнута в сериализатор и далее на отправку. Представить не могу как частями это сделать. Вот точно так же можно и отправляемую строку по частям напечатать. Я именно так и делаю. Писал выше. У меня строки размером до десятка кБ (а будут много больше). И печатают они в Ethernet-кадры, размер которых 576 байт Цитата(Димон Безпарольный @ Aug 23 2017, 09:04)  Согласен. Но буфер должен быть единым. Т.е. больше 256 байт. Нет. Если включить голову, то печатать можно окнами через тот же ..printf. И кучу тоже не использую - печать сразу в Ethernet-кадры.
|
|
|
|
|
Aug 23 2017, 07:39
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
Цитата(scifi @ Aug 23 2017, 11:27)  Я правильно понял, что ТС не выяснил, сколько у него стека, и сколько его расходуется? И не планирует этим заниматься? Если так, помочь тут нечем, сушите вёсла. Ковырялся. Пока не получилось. Методику ищу, изучаю. Не факт что осилю. й Цитата(jcxz @ Aug 23 2017, 11:24)  И кучу тоже не использую - печать сразу в Ethernet-кадры. Она сериализатором по частям не обрабатывается. Т.е. можно и свой сериализатор написать. Но боюсь времени не хватит.
|
|
|
|
|
Aug 23 2017, 13:12
|
Частый гость
 
Группа: Участник
Сообщений: 161
Регистрация: 29-09-10
Пользователь №: 59 816

|
Есть полезная штука по крайней мере у Кейла: При компиляции опасные функции обрамляются ватермарком и при его повреждении - вызывается специальная функция. http://www.keil.com/support/man/docs/armcc...59124940593.htm
|
|
|
|
|
Aug 23 2017, 15:04
|
Частый гость
 
Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118

|
Если компилятор - IAR, то там есть встроенная функция контроля переполнения стека.
--------------------
ASB
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|