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

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Простые вопросы по IAR
Beginning
сообщение Aug 30 2007, 15:00
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



Учусь работать в IAR. Много вопросов. Как обозначить глобальную переменную, что бы она была видна в других подлинковачных файлах.

Как обозначить переменную, что бы она лежала по конкретному адрессу.


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Aug 30 2007, 15:08
Сообщение #2


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



тут не иар, тут с надо учить.

1. прочитайте про extern
2. прочитайте доку по линкеру
Go to the top of the page
 
+Quote Post
=F8=
сообщение Aug 30 2007, 15:33
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



На первый вопрос уже ответели, по поводу как разместить по конкретному адресу

неинициализируемая меременная
#pragma location = адрес
__no_init int ttt;

или
__no_init int ttt @адрес;

константа
#pragma location = адрес
const int ttt = 123;

или
const int ttt @адрес = 123;

Сообщение отредактировал =F8= - Aug 30 2007, 15:34
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 30 2007, 15:33
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Beginning @ Aug 30 2007, 18:00) *
Как обозначить глобальную переменную, что бы она была видна в других подлинковачных файлах.

Абсолютно так же как в любимом, как я слышал, Вами всей душой Keil и вообще в любом компиляторе 'C'.

P.S.
Место этого вопроса не в теме по АРМ. Перенес.

P.P.S.
В 'C' все глобальные переменные видны снаружи по умолчанию, если специально не ограничивать область видимости, но мне что-то подсказывает, что вопрос был не об этом.....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Beginning
сообщение Aug 30 2007, 16:37
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



Где в настройках IAR включить, что бы внешние переменные были глобальными, т.е виделись во всех файлах.


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 30 2007, 16:52
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Beginning @ Aug 30 2007, 19:37) *
Где в настройках IAR включить

Повторяю - нигде. Они таковые по умолчанию и "галочками" естественно не отключаются. Тут уже было высказано предположение о том, что надо почитать про extern. Читать в любой книжке по "C".
Повторяю по "C" а не по Keil, IAR, GNU, Rowley, ибо это фича языка а не особенность компилятора.
Что касается допонительного вопроса по размещению чего-то по конкрктному адресу, то лучше этого не делать никогда.
А если уж сильно надо, то пользоватся надязыковыми средствами типа линкера. И только в наикрайнейшем случае следует пользоватся уникальными наворотами конкретного компилятора, прочитав документацию на конкретный компилятор. Что каксается IAR, то это зависит от версии. В 5.10,
например, похерили (ну и наверное правильно) инициализацию smile.gif что на самом деле ознает, что похерили все, ибо просто обращение по конкретному адресу не требует искуственных наворотов к языку. Правда линкер у них пока сырой (или я не врубился совсем), что связывает руки.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Beginning
сообщение Aug 30 2007, 17:49
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



Про EXTERN знаю. Я писал много под AVR. Гарвардская архитектура. Там три сегмента FLASH, ROM, DATA использовал, и всё было в шоколаде (CodeVisionAVR C Compiler). Глобальные переменные были видны во всех файлах, и не было проблем с дополнительными манипуляциями. Сейчас под ARM пишу, Фон Неймовская архитектура, и много вопросов появляется, наверняка являющиеся раздражительными и недостойными для местных гуру. А по конкретному адресу надо потому, что программа из внешней ROM работает, а переменная должна во внешней flash сохранятся.

Кстати хотел Вам zltigo ответить, хотя Вы всячески пытаетесь меня уязвить в неграмотности, но ладно, Вы мне отвечаете на вопросы, на поиск ответов на которые сейчас просто НЕТ ВРЕМЕНИ! Горит проект. И за это Вам спасибо. Так вот что такое listing, как не удивительно, я тоже знаю. Я говорил за удобство. В других оболочках (Keil, Cvision) мне было удобно работать так, а не просматривать listing. А в IAR я такой возможности, не обнаружил, поэтому и спросил.

Сообщение отредактировал Beginning - Aug 30 2007, 17:52


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 30 2007, 18:14
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Beginning @ Aug 30 2007, 20:32) *
Про EXTERN знаю. Я писал много под AVR. Гарвардская архитектура. Там три сегмента FLASH, ROM, DATA использовал, и всё было в шоколаде (CodeVisionAVR C Compiler). Глобальные переменные были видны во всех файлах
Цитата

Вы хоть поняли, что написали? Незнаю, что Вы там писали, но сие абсолютно платформенно независимая вещь.

наверняка являющиеся раздражительными и недостойными для местных гуру

Эти вопросы достаточно обычны, а вот что мне несколько не понравилось, так это Ваше совершенно ничем не спровоцированное выступление за один из компиляторов с нелестными эпитетами по поводу другого. Из которого вроде-бы следовало, что Автор всех собак съел на этом, хотя и не приступал к этой закуске smile.gif. Так что, простите, я на все через эту призму смотрю.
Цитата
А по конкретному адресу надо потому, что программа из внешней ROM работает, а переменная должна во внешней flash сохранятся.

О господи! Про указатели прочитайте, да?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Beginning
сообщение Aug 30 2007, 18:25
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



Да причём сдесь компилятор. Я же вам говорил, что мне по-барабану какой компилятор. Я за среду говорил. За её возможности в симуляции и отладке и редакторе, да.


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 30 2007, 18:46
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(=F8= @ Aug 30 2007, 21:33) *
константа
#pragma location = адрес
const int ttt = 123;

или
const int ttt @адрес = 123;

Насчет последнего выражения с константой по-моему вы ошибаетесь. В последних версиях IAR выкинула такую конструкцию, чтобы более точно соответствовать стандарту. Где-то здесь на форме недавно постили выдержку из описания релиза по этому поводу. Примерный смысл такой: квалификатор const не обязывает к тому, что переменная с этим квалификатором обязана во Flash находиться. const указывает лишь на то, что это переменная не модифицируется.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 30 2007, 19:53
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Beginning @ Aug 30 2007, 21:25) *
..мне по-барабану какой компилятор.

Да, это заметно smile.gif.
Ладно, все - больше не буду.
Цитата(rezident @ Aug 30 2007, 21:46) *
В последних версиях IAR выкинула такую конструкцию...

Выкинули инициализацию. Осталось некоторая видимость ввиде указания адреса, что уже совершенно ненужный прибамбас, ибо штатными 'C' средствами решается.
Цитата
, чтобы более точно соответствовать стандарту

ну стандарт этого не определяет и не запрещает. Формат объектника на ELF поменяли а это
(как и исчезновение выкидывания неиспользуемых функций при линковке объектников) просто последствия. Зато теперь чужими линкерами и библиотеками можно пользоватся, что крайне неплохо.
Цитата
квалификатор const не обязывает к тому, что переменная с этим квалификатором обязана во Flash находиться. const указывает лишь на то, что это переменная не модифицируется.

Ну перебор smile.gif smile.gif smile.gif, естественно не для случая, когда явно указан адрес расположения переменной.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Beginning
сообщение Aug 31 2007, 12:57
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



У меня есть функция обработки векторного прерывания IRQ таймера (IAR). Как мне обозначить функцию, чтобы компилятор корректно выходил из этой функции. Т.е со сменой режима IRQ->USER. Или в конце функции какой то оператор ставить надо.


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
Beginning
сообщение Aug 31 2007, 17:07
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



В IAR в симуляторе перефирийные регистры работают? Настраиваю таймер, а он не инкрементируется при симуляции.


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 31 2007, 21:22
Сообщение #14


Гуру
******

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



Цитата(Beginning @ Aug 31 2007, 20:07) *
В IAR в симуляторе перефирийные регистры работают? Настраиваю таймер, а он не инкрементируется при симуляции.
Нет. Это описано в документации, как и ответ на ваш предыдущий вопрос.


--------------------
На любой вопрос даю любой ответ
"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
Beginning
сообщение Aug 31 2007, 22:14
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



Какие все умные, всё в документацию тычут. Много слов пишут, вместо того чтобы написать два слова: __irq и VICVectAddr=0. У меня сейчас просто нет времени искать, потерял пол дня на поиск вот этого. cranky.gif


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:48
Рейтинг@Mail.ru


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