cохранение строк в static-переменных
От: Hard_Club  
Дата: 12.08.11 08:04
Оценка:
Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.
Re: cохранение строк в static-переменных
От: jazzer Россия Skype: enerjazzer
Дата: 12.08.11 08:59
Оценка:
Здравствуйте, Hard_Club, Вы писали:

H_C>Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.


платформа платформе рознь, зависит от того, в какую секцию компилятор поместит этот буфер.
Но если он не константный, то он и не должен в константном сегменте лежать.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: cохранение строк в static-переменных
От: Raytheon Украина  
Дата: 12.08.11 09:27
Оценка:
Здравствуйте, Hard_Club, Вы писали:

H_C>Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.


Сколько у вас потоков? Не лучше ли функции вернуть std::string или std::wstring? Или принимать на вход указатель на буфер и размер буфера и заполняет его?
Re: cохранение строк в static-переменных
От: abdab Россия  
Дата: 12.08.11 09:37
Оценка:
Здравствуйте, Hard_Club, Вы писали:

H_C>Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.


Если функция не будет вызываться из разных потоков, то можно. Однако нормальные люди так не пишут
Re[2]: cохранение строк в static-переменных
От: Hard_Club  
Дата: 12.08.11 09:42
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, Hard_Club, Вы писали:


H_C>>Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.


J>платформа платформе рознь, зависит от того, в какую секцию компилятор поместит этот буфер.

J>Но если он не константный, то он и не должен в константном сегменте лежать.

что такое константный сегмент?
Re[2]: cохранение строк в static-переменных
От: Hard_Club  
Дата: 12.08.11 09:43
Оценка:
Здравствуйте, abdab, Вы писали:

A>Здравствуйте, Hard_Club, Вы писали:


H_C>>Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.


A>Если функция не будет вызываться из разных потоков, то можно. Однако нормальные люди так не пишут :)


Уже решили отказаться от этой идеи.
Re: cохранение строк в static-переменных
От: ilnar Россия  
Дата: 12.08.11 09:46
Оценка:
Здравствуйте, Hard_Club, Вы писали:

H_C>Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.


можно, если только функция не должна быть reentrant и/или thread-safe
Re[3]: cохранение строк в static-переменных
От: abdab Россия  
Дата: 12.08.11 09:48
Оценка:
Здравствуйте, Hard_Club, Вы писали:

H_C>что такое константный сегмент?


Сегмент, который readonly, в embedded он обычно размещается во внутреннем флеше, то есть при попытке записи в него контроллер упадет.
Re[3]: cохранение строк в static-переменных
От: jazzer Россия Skype: enerjazzer
Дата: 12.08.11 09:50
Оценка:
Здравствуйте, Hard_Club, Вы писали:

J>>Но если он не константный, то он и не должен в константном сегменте лежать.


H_C>что такое константный сегмент?


сорри, оговорился. read-only.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: cохранение строк в static-переменных
От: Hard_Club  
Дата: 12.08.11 09:56
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, Hard_Club, Вы писали:


J>>>Но если он не константный, то он и не должен в константном сегменте лежать.


H_C>>что такое константный сегмент?


J>сорри, оговорился. read-only.


а в Windows or Linux бівают такие сегменты?
Re[5]: cохранение строк в static-переменных
От: jazzer Россия Skype: enerjazzer
Дата: 12.08.11 10:10
Оценка:
Здравствуйте, Hard_Club, Вы писали:

J>>сорри, оговорился. read-only.


H_C>а в Windows or Linux бівают такие сегменты?


Бывают, конечно.

http://book.opensourceproject.org.cn/embedded/embeddedprime/opensource/0136130550/ch13lev1sec5.html
.rodata — это как раз оно
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: cохранение строк в static-переменных
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.08.11 11:26
Оценка: 1 (1) +2
Здравствуйте, Hard_Club, Вы писали:

H_C>Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.


Можно с тремя оговорками:
1. Если вы в char[10] засунете строку из 20-и байт, случится чего-нибудь нехорошее
2. Если в вашей программе больше одного потока, они могут подраться за этот буфер
3. Рано или поздно вы наткнетесь на ситуацию, когда функция, возвращающая строку через этот буфер, захочет позвать другую функцию, которая тоже использует этот буфер. Тогда вы столкнетесь с проблемой, упомянутой в пункте 2, даже в одном потоке.
Re: cохранение строк в static-переменных
От: MasterZiv СССР  
Дата: 12.08.11 13:13
Оценка:
On 12.08.2011 12:04, Hard_Club wrote:
> Можно ли использовать static-переменную типа char [10], задекларированную в теле
> функции, для формирования в ней строки, которую должна возвращать функция. Речь
> идет об embeded.

Можно.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: cохранение строк в static-переменных
От: MasterZiv СССР  
Дата: 12.08.11 13:14
Оценка:
On 12.08.2011 13:43, Hard_Club wrote:

> A>Если функция не будет вызываться из разных потоков, то можно. Однако

> нормальные люди так не пишут
>
> Уже решили отказаться от этой идеи.

Я рад за вас.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: cохранение строк в static-переменных
От: gegMOPO4  
Дата: 13.08.11 16:11
Оценка:
Здравствуйте, Pzz, Вы писали:
Pzz>3. Рано или поздно вы наткнетесь на ситуацию, когда функция, возвращающая строку через этот буфер, захочет позвать другую функцию, которая тоже использует этот буфер. Тогда вы столкнетесь с проблемой, упомянутой в пункте 2, даже в одном потоке.

А для этого случая можно завести массив буфферов (размером, заведомо большим количества одновременно используемх результатов функции) и использовать их циклически. Если только эта функция не используется в рекурсии (но и тут можно оценить максимальную глубину).

Понятно, что использовать с осторожностью, ведь ошибку нельзя отдетектить, но эффективность иногда стоит того.
Re[3]: cохранение строк в static-переменных
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.08.11 15:21
Оценка:
Здравствуйте, gegMOPO4, Вы писали:

MOP>А для этого случая можно завести массив буфферов (размером, заведомо большим количества одновременно используемх результатов функции) и использовать их циклически. Если только эта функция не используется в рекурсии (но и тут можно оценить максимальную глубину).


Я знаю, да — в ядре FreeBSD подглядел
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.