Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: размещение в romdata PIC18
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
skyv
Доброго дня.
Есть проект для PIC18, который занимает некоторую часть памяти программ.
В свободной области Flash разместил данные по фиксированному адресу:
#pragma romdata const_table = 0x7d00
const rom char my_const_array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
#pragma romdata
Я полагал, что кроме моих данных в свободной области больше ничего не будет,
но линкер после моих данных добавил еще свой код. Как избавиться от этого кода в свободной области?
Danis
Каким компилятором пользуетесь?
skyv
Цитата(Danis @ Nov 8 2011, 11:06) *
Каким компилятором пользуетесь?


MPLAB® C18 C COMPILER
smart_pic
Цитата(skyv @ Nov 8 2011, 10:59) *
Доброго дня.
Есть проект для PIC18, который занимает некоторую часть памяти программ.
В свободной области Flash разместил данные по фиксированному адресу:
#pragma romdata const_table = 0x7d00
const rom char my_const_array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
#pragma romdata
Я полагал, что кроме моих данных в свободной области больше ничего не будет,
но линкер после моих данных добавил еще свой код. Как избавиться от этого кода в свободной области?


В зависимости от того какой PIC ( я так полагаю вы еще хотите периодически переписывать эти данные из программы ?) тогда укажите еще одну переменнную размером в зависимости от стираемого блока памяти пика
например
#pragma romdata const_table = 0x7d00
const rom char my_const_array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
const rom char rezerv[1024-10]
#pragma romdata
При том что блок стирания для PIC1897J60 равен 1024
skyv
Цитата(smart_pic @ Nov 9 2011, 16:21) *
В зависимости от того какой PIC ( я так полагаю вы еще хотите периодически переписывать эти данные из программы ?) тогда укажите еще одну переменнную размером в зависимости от стираемого блока памяти пика
например
#pragma romdata const_table = 0x7d00
const rom char my_const_array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
const rom char rezerv[1024-10]
#pragma romdata
При том что блок стирания для PIC1897J60 равен 1024


Это можно рассматривать как выход из положения. А вопрос все равно остается. Почему
линкер не укладывает программный код непрерывно, начиная с младших адресов?
Почему его стратегия поменялась от моего использования памяти под данные?
smart_pic
Цитата(skyv @ Nov 9 2011, 17:46) *
Это можно рассматривать как выход из положения. А вопрос все равно остается. Почему
линкер не укладывает программный код непрерывно, начиная с младших адресов?
Почему его стратегия поменялась от моего использования памяти под данные?


А это уже к разработчикам компиля. В принципе хорошо не оставлять компилю места засунуть свой нос туда куда не надо, иначе вылезут глюки типа вашего.
skyv
Цитата(smart_pic @ Nov 9 2011, 21:40) *
......иначе вылезут глюки типа вашего.


Вы не поняли о чем шел разговор.
smart_pic
Цитата(skyv @ Nov 10 2011, 13:55) *
Вы не поняли о чем шел разговор.

Если вы никоим образом не используете память - то зачем смотреть , что компиль натворил.
А если эта память зарезервирована под что-то - тогда не давайте компилю лезть куда не надо.
конкретно в вашем случае: какая вам разница где компиль разместил куски кода? Как он посчитал это оптимальным - так и сделал.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.