Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В чём разница между массивом и указателем 
:(
    Опции темы
Курсант
Дата 4.4.2018, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

Репутация: нет
Всего: 4



Всем доброго времени суток.

В проекте под микроконтроллер возникла необходимость использовать одни и те же массивы в разных программных модулях. Вроде бы решается такая задача через EXTERN. Например так:
Код

extern int32_t* Coefficients;

или так:
Код

extern int32_t Coefficients[NUM_OF_COEFFICIENTS];

или так:
Код

extern int32_t Coefficients[];

Проблема в том, что при разных объявлениях внешнего массива в других модулях программа начинает работать по-разному. Дело в том, что в этих модулях указатель на массив передаётся в качестве параметра другим функциям. И возникает трабла.. А именно, при объявлении
Код

extern int32_t* Coefficients;

неправильно работают инструкции вида
Код

Coefficients[COEFFICIENT_INDEX] = DEFAULT_COEFFICIENT_INDEX;

запись производится куда-то не туда. А при объявлении вида
Код

extern int32_t Coefficients[NUM_OF_COEFFICIENTS];

Перестают работать функции вида
Код

CalculateCheckSum ( Coefficients, NUM_OF_COEFFICIENTS);

Он вообще какие-то нули суммирует, а иногда и выпадает в HardFault, т.е. скорее всего вылетает за границы допустимых для чтения адресов.

Вот что это вообще может быть? Я в шоке, если честно...

Это сообщение отредактировал(а) Курсант - 4.4.2018, 21:43
PM ICQ Skype   Вверх
volatile
Дата 5.4.2018, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Вангую, у вас модули загружаются не в том порядке, как вам кажется.
Порядок загрузки модулей вообще не определен в Си, и чтоб обеспечить правльную загрузку нужно прибегать к определенным способам.
А лучше вообще не писать программы, зависящие от порядка загрузки модулей.

PM MAIL   Вверх
Курсант
Дата 5.4.2018, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

Репутация: нет
Всего: 4



Цитата(volatile @ 5.4.2018,  11:07)
Вангую, у вас модули загружаются не в том порядке, как вам кажется.
Порядок загрузки модулей вообще не определен в Си, и чтоб обеспечить правльную загрузку нужно прибегать к определенным способам.
А лучше вообще не писать программы, зависящие от порядка загрузки модулей.

Всё заработало, как всегда "дело было не в бобине - разгильдяй сидел в кабине". Нашёл ошибки в указателях. Ну как всё, ещё глюки остались, но это уже совсем другая история.

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

Очень интересно, я не понял смысла слова "загружается" в контексте прошивки микроконтроллера. Кмк, просто из объектных файлов собирается и линкуется программа - экзешник там, хекс или ещё что... Нет?

Это сообщение отредактировал(а) Курсант - 5.4.2018, 14:11
PM ICQ Skype   Вверх
volatile
Дата 5.4.2018, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(Курсант @  5.4.2018,  14:01 Найти цитируемый пост)
чень интересно, я не понял смысла слова "загружается"

я имел в виду начальную инициализацию.

допустим, в одном модуле:
Код

int a = 2;


в другом:
Код

extern int a;
int b = a; // не факт что здесь b будет равен 2.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1301 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.