_lexa_ 0 17 февраля, 2020 Опубликовано 17 февраля, 2020 (изменено) · Жалоба Доброе время суток! Для примера, объявляю глобальную константу: const uint32_t my_const; константа, как и задумывалось, располагается в ROM, но при этом прошивается нулем, а хотелось бы 0xffffffff. Как в IAR EWARM 8.3 это настроить? Можно, конечно, сделать и так: const uint32_t my_const = 0xffffffff; но мне не нравится, да и для больших массивов это совсем плохо смотрится. Изменено 17 февраля, 2020 пользователем _lexa_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 17 февраля, 2020 Опубликовано 17 февраля, 2020 · Жалоба 5 минут назад, _lexa_ сказал: но мне не нравится Не нравится, зато по стандарту. Можно, конечно, сделать __no_init const uint32_t my_const; и молиться, чтобы место расположения константы стёрто было. А если завтра не FF понадобится? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_lexa_ 0 17 февраля, 2020 Опубликовано 17 февраля, 2020 (изменено) · Жалоба 17 minutes ago, VladislavS said: __no_init const uint32_t my_const; компилятор выдает ошибку. 17 minutes ago, VladislavS said: и молиться, чтобы место расположения константы стёрто было. А если завтра не FF понадобится? Если понадобится не FF, значит буду инициализировать тем, что понадобится. Неиспользуемая область ROM стирается, почему бы не стирать не инициализируемые константы? Изменено 17 февраля, 2020 пользователем _lexa_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 17 февраля, 2020 Опубликовано 17 февраля, 2020 · Жалоба 1 час назад, _lexa_ сказал: почему бы не стирать не инициализируемые константы? Потому что они не "не инициализируемые". Они по-умолчанию проинициализированы нулем в соответствии со Стандартом языка. Не нравится - жалуйтесь в лигу сексуальных реформ коммитет по стандартизации языка C. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 17 февраля, 2020 Опубликовано 17 февраля, 2020 · Жалоба 1 час назад, _lexa_ сказал: компилятор выдает ошибку. volatile Но бляха-муха, если компилятор будет знать что в константе, то вероятно оптимизирует алгоритм с ней, а так будешь каждый раз читать её из флэшь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба 7 hours ago, _lexa_ said: но мне не нравится, да и для больших массивов это совсем плохо смотрится. А если захочется не ноль и не 0xffffffff, а, например, 0xaa55aa55, то как быть? Инициализируйте сами. "Нравится" и "плохо" смотрится - это весьма субъективно. Вот пример из моего кода. Смотрится красиво! static const unsigned long crc_table [ 256 ] = { 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба Да-да, подтверждаю личным опытом, 0xFFFF'FFFF смотрится намного приятнее 0xffffffff. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба 1 hour ago, ViKo said: Да-да, подтверждаю личным опытом, 0xFFFF'FFFF смотрится намного приятнее 0xffffffff. ИМХО, а какая разница по=большому? Как правило, эти данные всё равно непроверяемые человеческим взглядом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба Когда пишешь, тогда и проверяешь. Цифры считать легче и приятней. Культурный человек - эстэт во всём. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба 17 minutes ago, ViKo said: Когда пишешь, тогда и проверяешь. Табличку из 16 числе по 32 бита ещё можно и написать и проверить. Но в моём случае табличка сгенерирована скриптом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба 9 минут назад, haker_fox сказал: Табличку из 16 числе по 32 бита ещё можно и написать и проверить. Но в моём случае табличка сгенерирована скриптом. Я целиком file.h файл создавал в Matlab. Полностью готовый к употреблению в форме #include "file.h" Но это не рутинная работа. А в обыденной программистской жизни константы пишутся по нескольку раз на дню. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба Just now, ViKo said: Я целиком file.h файл создавал в Matlab. Полностью готовый к употреблению в форме #include "file.h" Я имел в виду, что когда табличка создана автоматически, чем угодно и где угодно, проверять её уже смысла особого нет. И написан там маленький регистр, или большой тоже по-барабану. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба 1 минуту назад, haker_fox сказал: Я имел в виду, что когда табличка создана автоматически, чем угодно и где угодно, проверять её уже смысла особого нет. И написан там маленький регистр, или большой тоже по-барабану. У меня считались числа с плавающей точкой, тем не менее, порядок я задавал символом 'E' а не 'e'. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_lexa_ 0 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба 13 hours ago, Сергей Борщ said: Потому что они не "не инициализируемые". Они по-умолчанию проинициализированы нулем в соответствии со Стандартом языка. Не нравится - жалуйтесь в лигу сексуальных реформ коммитет по стандартизации языка C. А я и не собираюсь никуда жаловаться, мне понадобилась, чтобы константы по умолчанию были стерты. Я тут и пытаюсь у знающих людей узнать, есть ли в IAR такая возможность. Например для переменных есть __no_init. Это, кстати, тоже выходит за рамки стандарта. 12 hours ago, VladislavS said: volatile Но бляха-муха, если компилятор будет знать что в константе, то вероятно оптимизирует алгоритм с ней, а так будешь каждый раз читать её из флэшь. volatile размещает константу в RAM. Мне не нужно оптимизировать для нее код, мне нужно однажды сохранить туда информацию, потом при необходимости считывать 7 hours ago, haker_fox said: "Нравится" и "плохо" смотрится - это весьма субъективно. Вот пример из моего кода. Смотрится красиво! По сути получается инициализация мне не нужна, мне необходимо, чтобы константа была стерта после загрузки программы, т.е. НЕ инициализировалась. Да, не согласуется с названием темы, ну да ладно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба 13 minutes ago, _lexa_ said: чтобы константа была стерта после загрузки программы, т.е. НЕ инициализировалась. "Стёрта" и "не инициализировалась" - это вещи ортогональные. Вы привязываетесь к типу памяти. __no_init указывает линкеру не размещать ваши данные в секции .noinit (за инициализацию отвечает стартовый код), которые расположены в ОЗУ. Константу вы не можете "не инициализировать", т.к. она располагается в ROM, на которую код повлиять не может. А про стёртую память линкер и компилятор ничего не знают, и знать не обязаны. Я бы сделал инициализацию и забыл бы об этом. Какие-то ваши аргументы в виде "но мне не нравится, да и для больших массивов это совсем плохо смотрится" непонятные. Завтра перейдёте на МК у которого стёртая флешка имеет 0x00. И будете долго искать проблему)))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться