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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> WinAVR инициализирует все переменные!, Нельзя ли избавить его от этого глупого занятия?
777777
сообщение Apr 25 2008, 11:27
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



сабж, собсно...
Go to the top of the page
 
+Quote Post
aesok
сообщение Apr 25 2008, 11:39
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(777777 @ Apr 25 2008, 15:27) *
сабж, собсно...


Это гупостью он занимаеться, для того чтобы соответствовать стандарту языка С.

Анатолий.
Go to the top of the page
 
+Quote Post
777777
сообщение Apr 25 2008, 11:56
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(aesok @ Apr 25 2008, 15:39) *
Это гупостью он занимаеться, для того чтобы соответствовать стандарту языка С.


Да ну, давно ли? Может еще пунктик стандарта укажете, в котором это предписывается? Значит такое понятие как "неинициализированная переменная" уже не существует? А если мне нужно инициализировать не нулем, а другим числом?

А в С++ он тоже инициализирует? Сначала обнуляет всю память, а котом начинает вызывать конструкторы? Несколько глупо, не так ли?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 25 2008, 12:56
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



где-то я это уже видел...
не помню где...
вроде как перед объявлением переменной без инициализации надо писать _no_init или чё-то в этом духе


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 25 2008, 13:16
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(777777 @ Apr 25 2008, 13:56) *
Значит такое понятие как "неинициализированная переменная" уже не существует?

Существует - для определенности она инициализируется нулем. Для инициализвции случайным числом существуют генераторы случайных чисел, однако.
Цитата
А если мне нужно инициализировать не нулем, а другим числом?

Инициализируйте. Никто не запрещает.
Цитата
Несколько глупо, не так ли?

Глупо, это то, что Вы тут пропагандируете.



Цитата(MrYuran @ Apr 25 2008, 14:56) *
вроде как перед объявлением переменной без инициализации надо писать _no_init или чё-то в этом духе

Смотреть документацию на конкретный компилятор в части расширений языка. Для садомазохистов правится startup и убирается инициализация, вообще.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Aleksandr Barano...
сообщение Apr 25 2008, 13:43
Сообщение #6


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

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



Так ведь это уже обсуждалось пару дней назад.

The .noinit Section
This sections is a part of the .bss section. What makes the .noinit section special is that variables which are defined as such:

int foo __attribute__ ((section (".noinit")));
will not be initialized to zero during startup as would normal .bss data.


Все, что не подлежит инициализации размещается а секции noinit. Подробности - в avr-libc/avr-libc-user-manual/mem_sections.html


--------------------
ASB
Go to the top of the page
 
+Quote Post
aesok
сообщение Apr 25 2008, 13:56
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(777777 @ Apr 25 2008, 15:56) *
Да ну, давно ли? Может еще пунктик стандарта укажете, в котором это предписывается?


JTC1/SC22/WG14 - C

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

Цитата
WG14/N1124 Committee Draft — May 6, 2005 ISO/IEC 9899:TC2
...
6.7.8 Initialization
...
10 If an object that has automatic storage duration is not initialized explicitly, its value is
indeterminate. If an object that has static storage duration is not initialized explicitly,
then:
— if it has pointer type, it is initialized to a null pointer;
— if it has arithmetic type, it is initialized to (positive or unsigned) zero;
— if it is an aggregate, every member is initialized (recursively) according to these rules;
— if it is a union, the first named member is initialized (recursively) according to these
rules.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 25 2008, 14:09
Сообщение #8


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Aleksandr Baranov @ Apr 25 2008, 17:43) *
Так ведь это уже обсуждалось пару дней назад.
А вот здесь более подробно обсуждалось про секции и их размещение:
http://electronix.ru/forum/index.php?showtopic=44607
Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 25 2008, 14:48
Сообщение #9


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(777777 @ Apr 25 2008, 14:56) *
Да ну, давно ли? Может еще пунктик стандарта укажете, в котором это предписывается?
...
А в С++ он тоже инициализирует? Сначала обнуляет всю память, а котом начинает вызывать конструкторы? Несколько глупо, не так ли?

А разве avr-gcc зануляет ВСЮ память?


Цитата(aesok @ Apr 25 2008, 16:56) *
До кучи, стандарт С 1989 года (почти 20 лет!):
http://megaton.obfuscated.net/~orange/deve...raft.html#3.5.7
Цитата
3.5.7 Initialization
...
If an object that has static storage duration is not initialized explicitly, it is initialized implicitly as if every ember that has arithmetic type were assigned 0 and every member that has pointer type were assigned a null pointer constant. If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate.

Насколько я помню, в до-ansi-шном С на "Электронике-60" было так же.

Теперь стандарт С++
Цитата
8.5 Initializers
...
5 To zero-initialize an object of type T means:
— if T is a scalar type (3.9), the object is set to the value of 0 (zero) converted to T;
— if T is a non-union class type, each nonstatic data member and each base-class subobject is zeroinitialized;
— if T is a union type, the object’s first named data member89) is zero-initialized;
— if T is an array type, each element is zero-initialized;
— if T is a reference type, no initialization is performed.
To default-initialize an object of type T means:
— if T is a non-POD class type (clause 9), the default constructor for T is called (and the initialization is
ill-formed if T has no accessible default constructor);
— if T is an array type, each element is default-initialized;
— otherwise, the object is zero-initialized.
default-инициализация применяется тогда, когда инициализатор не задан явно.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
777777
сообщение Apr 25 2008, 15:16
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(zltigo @ Apr 25 2008, 17:16) *
Существует - для определенности она инициализируется нулем. Для инициализвции случайным числом существуют генераторы случайных чисел, однако.

Очень смешно.
Цитата(zltigo @ Apr 25 2008, 17:16) *
Инициализируйте. Никто не запрещает.
Глупо, это то, что Вы тут пропагандируете.

Вообще-то инициализация занимает программную память, которой и так немного. Вы считаете глупостью желание ее сэкономить?

Сообщение отредактировал 777777 - Apr 25 2008, 15:17
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 25 2008, 15:24
Сообщение #11


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(777777 @ Apr 25 2008, 18:16) *
Вообще-то инициализация занимает программную память, которой и так немного. Вы считаете глупостью желание ее сэкономить?

Откройте любой учебник по си.
ВСЕГДА рекомендуется инициализировать переменные, иначе в них может находиться всё что угодно.
Хорошо, если компилятор туда хотя бы 0 занесёт.
ЗАТО:
будет 100% уверенность в том, что находится в переменной


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 25 2008, 16:08
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(777777 @ Apr 25 2008, 17:16) *
Вообще-то инициализация занимает программную память, которой и так немного.

Программной памяти по нынешним временам "немного" бывает крайне редко. Процедура инициализации занимает порядка 5-10 команд.
Цитата
Вы считаете глупостью желание ее сэкономить?

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 25 2008, 16:40
Сообщение #13


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Apr 25 2008, 20:08) *
Программной памяти по нынешним временам "немного" бывает крайне редко.
бывает и еще как...
Цитата
С учетом эффектов, которых придется получить при работе с неициализированной памятью - это глупость. А с учетом того, что с неициализированной памятью вообще работать невозможно, то ручная индивидуальная инициализация (даже нескольких переменных) займет ресурсов больше, нежели простейшее обнуление всего массива переменных чохом в цикле. И это уже глупость в квадрате.
Атлична, тогда попробуйте обосновать наличие Retention памяти на некотоорых продвинутых
чипах ...
This LSI has an on-chip high-speed RAM, which achieves fast access, and an on-chip RAM for
data retention, which can retain data in deep standby mode. These memory units can be used to
store instructions or data.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 25 2008, 16:55
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Apr 25 2008, 18:40) *
бывает и еще как...

Типа пишите на "C", не хватает 10 байт, где ужать не знаете - последний шанс убрать инициализацию памяти и посмотреть что получится. Извините, так, не бывает. (От комментариев у кого так бывает воздержусь smile.gif )
Цитата
Атлична, тогда попробуйте обосновать наличие Retention памяти на некотоорых продвинутых
чипах ...

Это вы вообще к чему а? К тому, что бывает неинициализированная память? Так я ее десять раз на дню пользую - получаю от мененджера памяти на любом, а не только на 'продвинутом' чипе и пользую с ОСТОРОЖНОСТЬЮ и трачу РЕСУРСЫ на начальную инициализацию, там где не обойтись. Какое это отношение имеет к желанию "сэкономить" на инициализации сегмента с "неициализированными" переменными в startup?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 25 2008, 18:42
Сообщение #15


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Apr 25 2008, 20:55) *
Типа пишите на "C", не хватает 10 байт, где ужать не знаете - последний шанс убрать инициализацию памяти и посмотреть что получится. Извините, так, не бывает. (От комментариев у кого так бывает воздержусь smile.gif )
Ну ваще-то бывает, ну ни как не получится разместить 16 армов на одной плате,
вот 16 тини24 влезают, а 16 даже минимальных арм + обвязка ну ни как не влезут sad.gif
Цитата
Это вы вообще к чему а? К тому, что бывает неинициализированная память? Так я ее десять раз на дню пользую - получаю от мененджера памяти на любом, а не только на 'продвинутом' чипе и пользую с ОСТОРОЖНОСТЬЮ и трачу РЕСУРСЫ на начальную инициализацию, там где не обойтись. Какое это отношение имеет к желанию "сэкономить" на инициализации сегмента с "неициализированными" переменными в startup?
А разьве кто-то собирался экономить ? кажись Вы не внимательно читали топик,
задачка не экономить а сохранить значения после перезагрузки, например после WDT
Go to the top of the page
 
+Quote Post

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

 


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


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