как заполнить сразу массив нулями при инициализации?

SadiQ228
Offline
Зарегистрирован: 10.04.2017

int arr [100] = {}; так ведь не работает?

b707
Offline
Зарегистрирован: 26.05.2017

SadiQ228 пишет:

int arr [100] = {}; так ведь не работает?

а зачем это вообще нужно?

По стандарту языка Си числовые типы инициализируются нулями автоматически.

SadiQ228
Offline
Зарегистрирован: 10.04.2017

и такие тоже? uint8_t

SadiQ228
Offline
Зарегистрирован: 10.04.2017

чтоб не плодить темы спрошу сразу....

а как присваивать несколько значений массивву? делаю так но не работает

uint8_t tmp[32];

tmp = {0x00, 0xA4, 0x04, 0x00};

как сделать похитрее?

reticular
Offline
Зарегистрирован: 09.06.2016

uint8_t tmp[32] = {0x00, 0xA4, 0x04, 0x00, 0x00, 0xA4, 0x04, 0x00, 0x00, 0xA4, 0x04, 0x00, 0x00, 0xA4, 0x04, 0x00, 0x00, 0xA4, 0x04, 0x00, 0x00, 0xA4, 0x04, 0x00, 0x00, 0xA4, 0x04, 0x00, 0x00, 0xA4, 0x04, 0x00};

SadiQ228
Offline
Зарегистрирован: 10.04.2017

это каждый раз будет создаваться массив, а хотелось бы использовать один и тот же

типо

tmp = {0xAA, 0xA4, 0x04, 0x00};

tmp = {0xАD, 0xA4, 0x04, 0x00};

tmp = {0xDD, 0xA4, 0x04, 0x00};

reticular
Offline
Зарегистрирован: 09.06.2016

uint8_t tmp[4] = {0x00, 0xA4, 0x04, 0x00};

reticular
Offline
Зарегистрирован: 09.06.2016

SadiQ228 пишет:

чтоб не плодить темы спрошу сразу....

а как присваивать несколько значений массивву? делаю так но не работает

uint8_t tmp[32];

tmp = {0x00, 0xA4, 0x04, 0x00};

как сделать похитрее?

присваивать значения массиву можно только при создании.

придется tmp[0]=0x00; tmp[1]=0xA4; tmp[2]=0x04; tmp[3]=0x00;

5N62V
Offline
Зарегистрирован: 25.02.2016

SadiQ228 пишет:

 

как сделать похитрее?

написать функцию присваивания, если Вам лень каждый раз индексы писать.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

reticular пишет:

SadiQ228 пишет:

присваивать значения массиву можно только при создании.

придется tmp[0]=0x00; tmp[1]=0xA4; tmp[2]=0x04; tmp[3]=0x00;

Никогда бы не догадался что оператор присваивания умеет работать только один раз.... :)

Logik
Offline
Зарегистрирован: 05.08.2014

SadiQ228 пишет:

это каждый раз будет создаваться массив, а хотелось бы использовать один и тот же

типо

tmp = {0xAA, 0xA4, 0x04, 0x00};

tmp = {0xАD, 0xA4, 0x04, 0x00};

tmp = {0xDD, 0xA4, 0x04, 0x00};

Судя по примеру достаточно менять tmp[0]. А так, в общем случае, поможет memcpy.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Да вот тоже интересно как заполнить массив данными .. Интересно, в плане допиливания тестовой проги под ATmega2560: надо объявить массив в PROGMEM для заливки скетча до упора флеш, которой там 256килов. Сам тест умещается в пару килобайт, а надо убедится что шьются все 256кб (уже имел опыт битого флеш) .. как-то руками приписывать лениво. :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Arhat109-2, не совсем понял, что Вам нужно.

Если просто сформировать массив, который нужно залить во флешь, то проще всего написать маленькую программу (для ПК) которая сформирует исходник или его фрагмент в текстовом файле.

Logik
Offline
Зарегистрирован: 05.08.2014

Проще всего сгенерить длинную последовательност, как ПСЧ генерят. Пару строк кода в цикле залупят хоть гектар оригинальными данными. Проверить ею же.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Все так, только для проверки нужны не "оригинальные" данные.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Да, всё верно: надо сгенерить заполнение флеша размером на 256 килобайт для заливки и последующего чтения, хотя бы силами avrdude во время заливки. Убедится что ВЕСЬ флеш пишется и читается как надо.

Ну я вот тоже пока не вижу иного способа как привлечь внешние системы для автогенерации "объемного" скетча - "написать программку для чего-либо", которая автосоздаст такой скетч.

Ещё пока мучаюсь с вариантом как проверить периферию в режиме "самотестирования" .. уж больно много ножек у этой меги. На каждую "светодиод" не повесишь.. и если UART порты ещё можно прогнать самотестированием, то вот замкнуть также I2C и SPI не очень понимаю получится ли то что хотелось..

P.S. Тест 512 килобайт памяти оказалось самой простой частью .. :)

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Arhat109-2 пишет:

Ну я вот тоже пока не вижу иного способа как привлечь внешние системы для автогенерации "объемного" скетча - "написать программку для чего-либо", которая автосоздаст такой скетч.

Снова на арене?  Мне не хватает ЧЮ, чтобы отличить - когда ты дурачишься, а когда и правда дурак.

В режиме бутлоадера тебе доступня вся память. Бери первый бутлоадер, в каталоге atmega, он проще, чем оптибут. Добавь туда проверку хоть всей памяти перед загрузкой или вместо загрузки, можешь ошибки в сериал вывести или и2с инициализировать...Там даже вариант для 128 учтен. С учетом размера кода придется корректировать фьюзы. В одном из бутлоадеров в ИДЕ закомментирована "интерактивная" часть. можешь посмотреть на ее примере.

После установки всех тулзов в Линухе, а ты вроде умеешь им пользоваться, бутлоадер просто собирается make ИМЯ_ЦЕЛИ. Только цель свою в мейкфайле создаешь.

Я писать тебе код более не стану - опять соврешь, что у тебя была "другая задача".

=====================

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

Опять же, после неоднократных проявлений говнистости характера - показывать - "как такое сделать" - не стану. А то опять будет "не та задача".

arduinec
Offline
Зарегистрирован: 01.09.2015

Arhat109-2 пишет:

надо сгенерить заполнение флеша размером на 256 килобайт для заливки и последующего чтения

Сделать побольше массивов типа:

static const unsigned char temp0001[] PROGMEM = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

 

Arhat109-2 пишет:

Ещё пока мучаюсь с вариантом как проверить периферию в режиме "самотестирования" .. уж больно много ножек у этой меги. На каждую "светодиод" не повесишь.. и если UART порты ещё можно прогнать самотестированием, то вот замкнуть также I2C и SPI не очень понимаю получится ли то что хотелось..

Вариант с тестированием пинов из SysInfo for Arduino не подходит?
http://arduino.ru/forum/programmirovanie/sysinfo-arduino

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

arduinec пишет:
Вариант с тестированием пинов из SysInfo for Arduino не подходит?
http://arduino.ru/forum/programmirovanie/sysinfo-arduino

Посмотрю, не видел этого. Спасибки.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

wdrakula пишет:
В режиме бутлоадера тебе доступня вся память. Бери первый бутлоадер, в каталоге atmega, он проще, чем оптибут. Добавь туда проверку хоть всей памяти перед загрузкой или вместо загрузки, ... более того, ... Сможешь добавить в меню своей платы хитрый пункт для самотестирования, при это заливаться будет программа самотестирования(о которой я написал выше) в режиме бутлоадера.

А вот это, ценная идея - сделать хитрый пункт в Меню для тестирования плат .. и выдавать результ обратно же в монитор ИДЕ.

Пасибки.