artemkad 69 26 января, 2019 Опубликовано 26 января, 2019 · Жалоба Возник тут вопросик... Если инициализировать массив к примеру во Флеше МК, то все что явно не указано iar заполнит нулями. Т.е. вот так: __flash uint8_t hello_world_buf[1000] = "hello world"; все кроме первых 11 байт будет забито нулями. А как-бы заставить компилятор забить чем-то другим(например 0xFF)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 26 января, 2019 Опубликовано 26 января, 2019 · Жалоба 34 minutes ago, artemkad said: А как-бы заставить компилятор забить чем-то другим(например 0xFF)? В случае частичной инициализации массива/структуры - никак, по стандарту должны быть нули. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 228 26 января, 2019 Опубликовано 26 января, 2019 · Жалоба 47 минут назад, artemkad сказал: все кроме первых 11 байт будет забито нулями. А как-бы заставить компилятор забить чем-то другим(например 0xFF)? Переопределить секцию на какую-нить свою, в icf-файле указать её как неинициализируемую, а потом в стартап-файле - заполнить чем надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 января, 2019 Опубликовано 29 января, 2019 · Жалоба On 1/27/2019 at 1:58 AM, jcxz said: а потом в стартап-файле - заполнить чем надо Не получится. Там же флешь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 29 января, 2019 Опубликовано 29 января, 2019 · Жалоба Если заранее известно, что надо это [1000] Определите сегмент, например, MY_THOUSAND_SEG из 1000 байт. В этом сегменте разместите Ваш массив uint8_t @MY_THOUSAND_SEG hello_world_buf[] = "hello world"; Если не пользоваться для массива sizeof, зная, что он реально 1000, то можно индексировать по всему сегменту исходя из его (сегмента) размера. Для сегмента можно извратиться и сделать аналог sizeof Совершенно "не через то место", но все-же. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 228 29 января, 2019 Опубликовано 29 января, 2019 · Жалоба 6 часов назад, haker_fox сказал: Не получится. Там же флешь. Если флешь, то тогда вообще нет никакого смысла объявлять такой массив в 1000 байт, а использовать из него только 11. Зачем так делать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 29 января, 2019 Опубликовано 29 января, 2019 · Жалоба В 26.01.2019 в 20:10, artemkad сказал: А как-бы заставить компилятор забить чем-то другим(например 0xFF)? В gcc можно так: volatile BYTE video_cfg[DIGIT_NUM + 1] = {[0 ... (DIGIT_NUM-1)] = '3'}; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 30 января, 2019 Опубликовано 30 января, 2019 · Жалоба 7 hours ago, jcxz said: Зачем так делать? Ну это вопрос для ТС. 6 hours ago, adnega said: В gcc можно так: И снова On 1/27/2019 at 1:10 AM, artemkad said: Если инициализировать массив к примеру во Флеше МК Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 30 января, 2019 Опубликовано 30 января, 2019 · Жалоба 6 часов назад, haker_fox сказал: И снова Дык, без разницы. У ТС было бы так (будь у него gcc): __flash uint8_t hello_world_buf[1000] = {[0 ... (1000 - 1)] = 0xFF}; Или я не понимаю в чем проблема... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 228 30 января, 2019 Опубликовано 30 января, 2019 · Жалоба 7 часов назад, haker_fox сказал: Ну это вопрос для ТС. ТС свою задачу не озвучил. А озвучил какое странное и кривое её решение которое смог придумать. Вообще нет необходимости так делать. Для чего угодно. Можно 100500 раз обсуждать способы доставки лодки на Луну, только воды там нет, и средства передвижения там другие. Тогда какой смысл это обсуждать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 30 января, 2019 Опубликовано 30 января, 2019 · Жалоба 1 hour ago, jcxz said: . . . Можно 100500 раз обсуждать способы доставки лодки на Луну, только воды там нет, и средства передвижения там другие. Тогда какой смысл это обсуждать? Ну ..... это как "прижало в сортир по-крупному". Думал не-надо и не-надо, а как приспичило - так любое решение подойдет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 30 января, 2019 Опубликовано 30 января, 2019 · Жалоба Одна "0xFF," это 5 символов. В одной строке (80 символов) помещается таких 16 штук. Итого, чтобы инициализировать 1000 элементов массива надо всего 63 строки кода. Легко делается копипастами :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 69 30 января, 2019 Опубликовано 30 января, 2019 · Жалоба 18 hours ago, jcxz said: Если флешь, то тогда вообще нет никакого смысла объявлять такой массив в 1000 байт, а использовать из него только 11. Зачем так делать? Автономный программатор. "1000" байт потом зальются в другой МК. Если страница содержит одни 0xFF её можно игнорировать, а вот нули писать надо обязательно. Естественно, потом уже в процессе работы содержимое 1000 байт может меняться своим загрузчиком. В общем, единственное пока вменяемое решение это прилинкование внешнего бинарника... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 30 января, 2019 Опубликовано 30 января, 2019 · Жалоба 2 hours ago, artemkad said: а вот нули писать надо обязательно. А чем это плохо? Скоростью записи? Износом флеша? Может быть у задачи есть и другое решение? Например, указать сколько байт записывать и куда (в какие страницы, с какого адреса)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 30 января, 2019 Опубликовано 30 января, 2019 · Жалоба 2 часа назад, artemkad сказал: В общем, единственное пока вменяемое решение это прилинкование внешнего бинарника... Вовсе не единственное: - можно в скрипте линкера явно проинициализировать секцию 0xFF; - но, по указанной вами логике, правильнее объявить секцию как NOLOAD. Шить, разумеется, можно не одним файлом, а секторами. У меня так обычно эмуляция eeprom делается - есть секция под хранение данных eeprom, она никак не инициализируется, а только дописывается и при необходимости посекторно стирается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться