Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 13.11.2017, 21:40  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Re: Функция вывода на lcd и глобальные переменные

Сообщение от SashaBu Посмотреть сообщение
Почему-то никто не замечает, что вот это:
static char value[] = "";
хоть static, хоть без, резервирует в ОЗУ только один байт, т.е. создаёт массив из одного 0, или - в зависимости от реализации - из пары байтов 0x0d, 0x0a. Потом автор туда записывает неопределённое количество байтов - и вылезает за границы массива с непредсказуемыми последствиями: могут попортиться какие угодно переменные, которые размещены вслед за этим массивом. Надо же задавать размер массива!
А если я заранее не знаю размер того что туда сольётся? А оставлять пустые хвосты не хочется, что тогда?
Реклама:
supercelt вне форума  
Непрочитано 13.11.2017, 21:49  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,861
Сказал спасибо: 2,532
Сказали Спасибо 11,773 раз(а) в 5,897 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Функция вывода на lcd и глобальные переменные

Сообщение от supercelt Посмотреть сообщение
А если я заранее не знаю размер того что ТУДА сольётся?
Куда "туда"? Правильно Вам сказали, что Вы пытаетесь что-то вливать в пустую строку размером в 1 байт. Компилятор не экстрасекс и тоже не знает, но хорошо видит, что Вы просите.
Для большей понятности: "char value[]=" означает, что размер массива определяется содержимым после знака "=", т.е., пустой строкой длиной в один байт.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 13.11.2017, 21:50  
AlexWonder
Частый гость
 
Регистрация: 06.11.2007
Сообщений: 47
Сказал спасибо: 1
Сказали Спасибо 12 раз(а) в 5 сообщении(ях)
AlexWonder на пути к лучшему
По умолчанию Re: Функция вывода на lcd и глобальные переменные

Тогда пиши свою функцию для работы с динамическими строками.

SashaBu прав. Динамические массивы в контроллерах лучше не использовать (ну или для них писать отдельную процедуру). Фиг его знает сколько компиллер решит выделить для нее места. Да и у тебя нет проверки на конец области. Так что вполне возможно что ты портишь данные, которые находятся за массивом.

По поводу глобальных переменных и указателей.
Если тебе надо обрабатывать одну и ту же переменную из разных модулей - то лучше объявить ее глобальной. Но с другой стороны, с ней нужно быть осторожным - так сказать, учитывать атомарный доступ. Для указателей другой пример - надо найти позицию символа в строке. Ведь не будешь писать для каждой строки поиск. Проще написать одну функцию. в которую будешь передавать через указатель адрес строки и искомый символ.
AlexWonder вне форума  
Непрочитано 14.11.2017, 00:50  
H4LF
Вид на жительство
 
Аватар для H4LF
 
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
H4LF на пути к лучшему
По умолчанию Re: Функция вывода на lcd и глобальные переменные

Сообщение от supercelt Посмотреть сообщение
А если я заранее не знаю размер того что туда сольётся? А оставлять пустые хвосты не хочется, что тогда?
А Вы верите, что стоит только что-то сильно пожелать (например, что Си каким-то образом будет сам увеличивать размер массива в рантайме или угадывать максимальный во время компиляции), то так оно и станет?

AlexWonder, уточню, на всякий случай, что в Си запись вида
PHP код:
static char value[] = ""
не обозначает динамический массив, это просто инициализация безразмерного массива. В микроконтроллерах это использовать можно и это удобно просто потому, что не нужно самому вычислять размер уже написанной строки и писать его в квадратные скобочки, пусть этой рутиной занимается компилятор. А вот ждать чудес действительно не стоит.
http://www.c-cpp.ru/books/inicializa...ernyh-massivov
H4LF вне форума  
Непрочитано 14.11.2017, 01:02  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,861
Сказал спасибо: 2,532
Сказали Спасибо 11,773 раз(а) в 5,897 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Функция вывода на lcd и глобальные переменные

Сообщение от H4LF Посмотреть сообщение
это просто инициализация безразмерного массива.
Вот здесь слово "безразмерный" вносит сумятицу в умы.
Гораздо корректней - "без указания размера". Потому как массив не безразмерен после компиляции, его размер определяется размером помещенных туда данных ДО компиляции.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 14.11.2017, 03:30  
H4LF
Вид на жительство
 
Аватар для H4LF
 
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
H4LF на пути к лучшему
По умолчанию Re: Функция вывода на lcd и глобальные переменные

akegor, его, видимо, безразмерным назвали потому, что размер в скобочках не указывается (там пусто), а вычисляется на этапе компиляции. Можно назвать это как-то по другому, например: "инициализация массива с автоматическим определением размера на этапе компиляции", но это как-то слишком длинно для названия. "массив без указания размера" - тоже как-то не совсем однозначно. Сумятицу много чего вносит, поэтому надо читать и понимать - что, как и почему.

PS: да и название "безразмерный массив" как-то редко встречается, видимо не очень и нужно отдельное название для этого.

Последний раз редактировалось H4LF; 14.11.2017 в 03:32.
H4LF вне форума  
Непрочитано 14.11.2017, 11:24  
AlexWonder
Частый гость
 
Регистрация: 06.11.2007
Сообщений: 47
Сказал спасибо: 1
Сказали Спасибо 12 раз(а) в 5 сообщении(ях)
AlexWonder на пути к лучшему
По умолчанию Re: Функция вывода на lcd и глобальные переменные

В общем, как эту запись (
PHP код:
static char value[] = ""
) не называйте, а выполнять задуманное автором она не будет. У нее фиксированный размер и с этим придется смириться.

Выхода вижу 2: В куче играться с выделением места под новую строку или же делать фиксированный массив с максимальной длиной и учитывать сколько туда символов положили (если же там только текст, конец можно определять по коду 0х00).
AlexWonder вне форума  
Непрочитано 14.11.2017, 15:39  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,861
Сказал спасибо: 2,532
Сказали Спасибо 11,773 раз(а) в 5,897 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Функция вывода на lcd и глобальные переменные

Сообщение от AlexWonder Посмотреть сообщение
конец можно определять по коду 0х00
Только если строку сформировала функция строковой направленности. Скажем, модем, выдавая текстовую строку, нулем ее не заканчивает.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 14.11.2017, 19:50  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Re: Функция вывода на lcd и глобальные переменные

Вобщем я сделал фиксированный. Пусть 1-2 элемента не заполнятся, зато память не затрётся. Спасибо!
supercelt вне форума  
Непрочитано 14.11.2017, 20:35  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,861
Сказал спасибо: 2,532
Сказали Спасибо 11,773 раз(а) в 5,897 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Функция вывода на lcd и глобальные переменные

Сообщение от supercelt Посмотреть сообщение
Вобщем...
А результат-то где? Рецептик помог?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ускорить компьютер 7Fantomas7 Ремонт оргтехники 111 08.08.2018 05:27
PIC16F876a+Nokia 5110 LCD+PICKit2 AndGrig PIC 31 02.11.2016 09:18
ЖКИ и CodeVision: 8-ми битный режим vikpol Микроконтроллеры, АЦП, память и т.д 33 09.03.2009 21:55
На чём написано ??? Koka Proteus, KiCAD и другие ECAD 18 08.10.2006 15:50
Не могу разобраться с LCD init_sub Информация по радиокомпонентам 6 02.04.2004 04:40


Часовой пояс GMT +4, время: 05:46.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot