![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Robus |
|
||||
Entire Профиль Группа: Участник Сообщений: 32 Регистрация: 15.12.2005 Репутация: нет Всего: 1 |
Здравствуйте.
Возникла проблема в создании массива на классическом СИ. Задача: Есть множество #define'ов, которые должны указывать на индекс массива. Я хочу создать массив в ROM, то есть это const, из 256 байт. Каждая ячейка по индексу из define'а должна быть заполнена заданным значением из другого define'а, не заполненные индексы должны прописаться нулями. Теоретический пример:
На ассемблере я бы сделал очень просто:
Вот собственно как это реализовать на СИ ??? Особое внимание обращаю, на то, что должно быть описание как константа, что бы компилятор понял, что это простой массив из 256 байт с нужными мне параметрами. Код пишу под KEIL'ом, если есть фичи KEIL'а, буду рад им, если кто знает их. Но конечно в идеале было бы приятно иметь возможность создавать такие таблицы в классическом СИ, что бы код был таки переносимым ... Спасибо. |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Robus, хочу тебя огорчить. Даже статический константный массив, скорее всего, будет проинициализирован в момент запуска программы (т.е. в области данных будет выделена память, в которую будет скопированы данные из ПЗУ). Читай документацию к своему компилятору, возможно, там описан особый механизм размещения данных в ПЗУ.
Но, в любом случае, сделать то, что ты хочешь нельзя средствами Си. Придется писать ручками весь массив. |
|||
|
||||
alexvs11 |
|
|||
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
либо рантайм, либо сгенерить скриптом хедер - делов-то
|
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
так
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Dem_max, ты видимо задачу понял неверно.
![]() |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Если компилятор поддерживает С99, то так -
|
|||
|
||||
Robus |
|
|||
Entire Профиль Группа: Участник Сообщений: 32 Регистрация: 15.12.2005 Репутация: нет Всего: 1 |
Спасибо. Я уже разобрался ... Я шёл по этому пути, но не знал, особенностей С99, и компилил в С11. Задачу решил, но она требует в проект добавлять флаг компиляции С99. Это не самое лучшее решение, но оно наилучшее из всех. Ещё раз спасибо. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |