| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > В чём разница между массивом и указателем |
| Автор: Курсант 4.4.2018, 21:43 | ||||||||||||||
| Всем доброго времени суток. В проекте под микроконтроллер возникла необходимость использовать одни и те же массивы в разных программных модулях. Вроде бы решается такая задача через EXTERN. Например так:
или так:
или так:
Проблема в том, что при разных объявлениях внешнего массива в других модулях программа начинает работать по-разному. Дело в том, что в этих модулях указатель на массив передаётся в качестве параметра другим функциям. И возникает трабла.. А именно, при объявлении
неправильно работают инструкции вида
запись производится куда-то не туда. А при объявлении вида
Перестают работать функции вида
Он вообще какие-то нули суммирует, а иногда и выпадает в HardFault, т.е. скорее всего вылетает за границы допустимых для чтения адресов. Вот что это вообще может быть? Я в шоке, если честно... |
| Автор: volatile 5.4.2018, 11:07 |
| Вангую, у вас модули загружаются не в том порядке, как вам кажется. Порядок загрузки модулей вообще не определен в Си, и чтоб обеспечить правльную загрузку нужно прибегать к определенным способам. А лучше вообще не писать программы, зависящие от порядка загрузки модулей. |
| Автор: Курсант 5.4.2018, 14:01 | ||
Всё заработало, как всегда "дело было не в бобине - разгильдяй сидел в кабине". Нашёл ошибки в указателях. Ну как всё, ещё глюки остались, но это уже совсем другая история. И да, похоже, никакой разницы действительно не было, как объявлять эти самые "внешние" массивы, как указатель на целочисленный тип или как массив. Очень интересно, я не понял смысла слова "загружается" в контексте прошивки микроконтроллера. Кмк, просто из объектных файлов собирается и линкуется программа - экзешник там, хекс или ещё что... Нет? |
| Автор: volatile 5.4.2018, 14:29 | ||||
я имел в виду начальную инициализацию. допустим, в одном модуле:
в другом:
|