Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: если массив объявлен static , будут ли у него начльные нулевые значения?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Serj78
Я понимаю, что CV- "недокомпилятор",
но все же, я полагаю, что если я объявил глобальный массив

static char arr[64]; он будет изначально заполнен нулями?

или надо объявлять так :

static char arr[64]={0,0,0} ; ?

ну или так:

static char arr[64]={0} ;
zhevak
В startup-файле находится код, который чистит ВСЮ оперативу, так что
неинициализированные глобальные переменные по любому примут нулевые значения.

Посмотрите листинг (ассемблерный файл), поищите в нем __CLEAR_SRAM.
Nick_Shl
Цитата(Serj78 @ Feb 24 2009, 19:49) *
Я понимаю, что CV- "недокомпилятор", но все же, я полагаю, что если я объявил глобальный массив
static char arr[64]; он будет изначально заполнен нулями?
А вы "советский инженер"(второй за последние сутки) сначала делаем, потом думаем.
Для чего пишут документацию?
Открываем "Help"(по F1, если е знаете). Далее "CodeVisionAVR C Compiler Reference-> Variables" и читаем: If not specifically initialized, static variables are automatically set to 0 at program startup.

Ничего не читаем, а потом везде говорим "плохой компилятор"...
defunct
Цитата(Nick_Shl @ Feb 24 2009, 20:05) *
А вы "советский инженер"(второй за последние сутки) сначала делаем, потом думаем.

Чтобы не напрягать думалку от компилятора к компилятору по пустякам, и не заглядывать в документацию по вопросам по которым не нужно туда заглядывать, ничто не мешает всегда писать так:
static char arr[64]={0};
ничего плохого это не сделает, переменная занесется в Zero-Init сегмент. Да и в коде сразу видно чем проинициализировано.
demiurg_spb
Возник попутно вопросик.
Если надо инициализировать длинный массив однородными величинами отличными от нуля, то это весьма утомительное занятие:
int arr[350] = {33,33,33,33,33,33,..... и так 350 раз};
Точно не поню то ли я где-то видел, то ли приглючило мне, но может кто подкинет такой макрос, чтоб было примерно так:
int arr[350] = {CLONE(33,350)};
uriy
Что-то вы совсем детские вопросы задаете. Функция memset(arr, 33, 350), или если не хотите искать чем вас цикл не устраивеает for(i=0; i<350; i++)
Serj78
Цитата(Nick_Shl @ Feb 24 2009, 21:05) *
А вы "советский инженер"(второй за последние сутки) сначала делаем, потом думаем.
Для чего пишут документацию?
Открываем "Help"(по F1, если е знаете). Далее "CodeVisionAVR C Compiler Reference-> Variables" и читаем: If not specifically initialized, static variables are automatically set to 0 at program startup.
Ничего не читаем, а потом везде говорим "плохой компилятор"...


Все я читал, по этому и спрашиваю! Дело в том что один раз вылезла такая бяка за пару лет работы устройства- в 0-м элементе массива, куда в коде всей программы ничего не пишется, оказалась пятерка. Я знаю, что по правилам языка я сделал все правильно. А вот как на самом деле? У CV есть некоторые особенности, в отличие от других компиляторов, поэтому и спросил-может, кто сталкивался...
demiurg_spb
2 uriy:Ну Вы право меня за школьника не держитеsmile.gif Обо всём этом я прекрасно знаю.
Я веду речь о константных данных расположенных в ПЗУ или ЕЕPROM.
Меня интересует именно то о чём я спрашиваю, т.е. инициализация при объявлении константы.
ReAl
Цитата(demiurg_spb @ Feb 26 2009, 08:15) *
Я веду речь о константных данных расположенных в ПЗУ или ЕЕPROM.
Меня интересует именно то о чём я спрашиваю, т.е. инициализация при объявлении константы.

Увы, С сам по себе такими возможностями не обладает.
Если компилятор позволяет делать достаточно сложные ассемблерные вставки, то можно ими.
Например, для avr-gcc

Ещё есть такое хорошее слово COG от Ned Batchelder, вставка в исходник в комментарии специального вида скрипта на питоне, который генерирует фрагмент исходника.
Как этим нормально пользоваться из сред "вещь в себе" не знаю, а в makefile просто прописывается зависимость файла mytables.c от mytables.cog с соответствующи правилом и всё генерируется по мере потребности при вызове make
Когда мне наконец-то понадобится в С-шном файле что-то в духе таблицы синусов - вероятно, я таки разберусь с COG а не буду в электронной таблице генерировать :-)
demiurg_spb
Цитата(ReAl @ Feb 26 2009, 22:50) *
Увы, С сам по себе такими возможностями не обладает.
Значит приглючило. Мне казалось что я давно чуть-ли не в книге с названием похожим на "СИ глазами хакера" читал о подобном, но тогда это было не нужно...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.