реклама на сайте
подробности

 
 
> IAR AVR Блокировка ресурсов из текста программы
IJAR
сообщение Sep 22 2008, 09:11
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669



Мне в программе необходимо запретить компилятору использование
части RAM и FLASH. "Рихтуя" соответствующий .xls это легко сделать,
НО хотелось бы это сделать из текста программы.
ТИпа:
#pragma ram_protected=0x1000-0x10FF //понятно что именно такой директивы нет

Возможно ли такое?


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
Сергей Борщ
сообщение Sep 22 2008, 09:32
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(IJAR @ Sep 22 2008, 12:11) *
#pragma ram_protected=0x1000-0x10FF //понятно что именно такой директивы нет
Объясните подробнее, как эта ваша прагма должна влиять на поведение компилятора?
Код
#pragma ram_protected=0x1000-0x10FF
void test()
{
    uint8_t *pointer = (uint8_t *)0xFFF;
    uint8_t Tmp = *(pointer + 1); // как компилятор отследит такое?
}
Может вам хватит #pragma codeseg, #pragma dataseg, #pragma location?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Sep 22 2008, 10:02
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Распределением ресурсов по адресам занимается как раз линкер, а не компилятор. Ему и надо давать такие указания, в частности, через .xcl файл.
Go to the top of the page
 
+Quote Post
IJAR
сообщение Sep 22 2008, 10:14
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669



Цитата(Сергей Борщ @ Sep 22 2008, 13:32) *
Объясните подробнее, как эта ваша прагма должна влиять на поведение компилятора?
Код
#pragma ram_protected=0x1000-0x10FF
void test()
{
    uint8_t *pointer = (uint8_t *)0xFFF;
    uint8_t Tmp = *(pointer + 1); // как компилятор отследит такое?
}
Может вам хватит #pragma codeseg, #pragma dataseg, #pragma location?


Хотелось бы сказать линкеру из компилятора:
"Вот в эту область: 0x1000-0x10FF" ты мои переменные не пытайся
положить", но это скорее всего не осуществимо.
Видимо придется в комментариях к проекту записывать о необходимости корректировки
.xls файла


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Sep 22 2008, 10:23
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(IJAR @ Sep 22 2008, 13:14) *
Видимо придется в комментариях к проекту записывать о необходимости корректировки
.xls файла

Кто эти комментарии читать будет?
Копируйте xls в рабочий директорий и включайте в систему контроля версий.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
IJAR
сообщение Sep 22 2008, 10:47
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669



Цитата(Dog Pawlowa @ Sep 22 2008, 14:23) *
Кто эти комментарии читать будет?
Копируйте xls в рабочий директорий и включайте в систему контроля версий.


Видимо придется сделать хедер типа:

__no_init char protected_RAM[50] &(RAMEND-50+1); //защищенная RAM
и что-нибудь под FLASH в том же духе
и включать всю эту байду в свой прект

или, как Вы предлагаете, использовать с .xls




".... и тучи повисли косыми сетями
и кончился месяц под номером 8"


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Sep 23 2008, 09:06
Сообщение #7


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(IJAR @ Sep 22 2008, 13:47) *
Видимо придется сделать хедер типа:

__no_init char protected_RAM[50] &(RAMEND-50+1); //защищенная RAM

И, опять же, снабдить программу кучей комментариев о недопустимости обращения к этому массиву.
Не логично создавать ненужный обьект. Тем более, что всё можно сделать автоматически.
Единственный, на мой взгляд, выход в этом случае это указать линкеру список разрешённых диапазонов адресов для переменных (насколько я знаю, диапазон запрещённых адресов указать нельзя).
Да и в чём, собственно, проблема, чтобы держать командный файл линкера в папке с проектом (это я по поводу необходимости каких-то комментариев к проекту)?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 00:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01405 секунд с 7
ELECTRONIX ©2004-2016