Для инициализированного объекта не создано копирование?

Я использую codewarrior для компиляции для HC12, и у меня есть два массива по 120 элементов: score и dur. Я инициализировал их обычным образом: unsigned int score[120] = { ... }; Однако, когда я пытаюсь его скомпилировать, я получаю сообщение об ошибке компоновщика: «L1981: для инициализированного объекта «score» не создано копирование. Данные инициализации потеряны». Я не могу понять, что это значит или как я могу сделать так, чтобы он создавал копию. Обратите внимание, что эта программа компилируется и, кажется, устанавливает значения нормально, когда я помещаю их в main(), но мне нужно, чтобы они были глобальными переменными, потому что доступ к ним осуществляется через прерывание.


person user702905    schedule 07.03.2013    source источник
comment
У меня было некоторое время, но вы назначили массивы сегменту/адресу в файле .map? Или у тебя нет памяти?   -  person Potatoswatter    schedule 07.03.2013
comment
Ничего, я смог это исправить. Для всех, кто может столкнуться с этим, вам нужно сделать переменные константными, иначе он немедленно удалит содержимое массивов. CodeWarrior чертовски привередлив, клянусь.   -  person user702905    schedule 07.03.2013
comment
На самом деле это большая разница. Массив const помещается во флэш-память, а неконстантный — в оперативную память. Я предполагаю, что copydown - это код инициализации, который копирует из Flash в RAM при запуске.   -  person Potatoswatter    schedule 07.03.2013
comment
Это имеет смысл. Я просто хочу, чтобы ошибка была более подробной о том, что она говорила мне делать.   -  person user702905    schedule 07.03.2013
comment
@ user702905 Вы должны опубликовать это как ответ на свой вопрос, чтобы помочь будущим читателям.   -  person Lundin    schedule 07.03.2013


Ответы (1)


Возможны две причины:

  • Либо вам удалось объявить эту переменную в стеке (плохая идея), либо в сегменте памяти, который слишком мал для ее размещения. Рассмотрите возможность размещения таких больших переменных в выделенных сегментах ОЗУ, изменив файл .prm.
  • Или вы создали проект Codewarrior с «минимальным» стартовым кодом. Если вы сделаете это, вы выберете нестандартную настройку, в которой этап инициализации объектов со статической продолжительностью хранения удален.
person Lundin    schedule 07.03.2013