Я использую codewarrior для компиляции для HC12, и у меня есть два массива по 120 элементов: score и dur. Я инициализировал их обычным образом: unsigned int score[120] = { ... }; Однако, когда я пытаюсь его скомпилировать, я получаю сообщение об ошибке компоновщика: «L1981: для инициализированного объекта «score» не создано копирование. Данные инициализации потеряны». Я не могу понять, что это значит или как я могу сделать так, чтобы он создавал копию. Обратите внимание, что эта программа компилируется и, кажется, устанавливает значения нормально, когда я помещаю их в main(), но мне нужно, чтобы они были глобальными переменными, потому что доступ к ним осуществляется через прерывание.
Для инициализированного объекта не создано копирование?
Ответы (1)
Возможны две причины:
- Либо вам удалось объявить эту переменную в стеке (плохая идея), либо в сегменте памяти, который слишком мал для ее размещения. Рассмотрите возможность размещения таких больших переменных в выделенных сегментах ОЗУ, изменив файл .prm.
- Или вы создали проект Codewarrior с «минимальным» стартовым кодом. Если вы сделаете это, вы выберете нестандартную настройку, в которой этап инициализации объектов со статической продолжительностью хранения удален.
person
Lundin
schedule
07.03.2013
const
помещается во флэш-память, а неконстантный — в оперативную память. Я предполагаю, что copydown - это код инициализации, который копирует из Flash в RAM при запуске. - person Potatoswatter   schedule 07.03.2013