|
Хочу попробовать ARM, подскажите, что для этого нужно?, Какой проц выбрать, отлад. платку и какой софт? |
|
|
|
Jan 23 2007, 17:10
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(sonycman @ Jan 23 2007, 16:44)  Пока выбор пал на LPC2142-48. Что мне надо иметь, чтобы писать программы и шить в такой контроллер? Какой софт/железо? 1. ULink + Keil, 2. J-Link(он же MTLink, он же JetLink) + Keil/IAR, 3. Wiggler (мутная вещь) + CW. 4. Если отладку предполагаете делать на симуляторе, то можно обойтись и встроенным в этот МК бутлоадером - заливать прошивку по UART0 тулзой Phillips Flash Utility.
|
|
|
|
|
Jan 23 2007, 18:19
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(defunct @ Jan 23 2007, 18:10)  1. ULink + Keil, 2. J-Link(он же MTLink, он же JetLink) + Keil/IAR, 3. Wiggler (мутная вещь) + CW.
4. Если отладку предполагаете делать на симуляторе, то можно обойтись и встроенным в этот МК бутлоадером - заливать прошивку по UART0 тулзой Phillips Flash Utility. Спасибо за советы! Я живу в Тольятти, поэтому достать смогу не всё. 1. Ulink весьма дорог - в MT system 150 баксов. А Keil - среда разработки? Из сети можно скачать? 2. J-Link для меня недосягаем - $275. 3. А вот Olimex ARM-JTAG (это и есть Wiggler?) недорог. Но почему он "мутный"? И что такое CW? Я радиолюбитель, и дорогие дебаггеры для меня недоступны. Хотя на Ulink можно при желании разориться. Из плат выбрал пока Olimex LPC-H2148 или Olimex LPC-P2148. Или EA-QSB-010 от Embedded Artists. Придётся заказывать по почте, у нас такого не найти. Никто не знает подходящих магазинов?
|
|
|
|
|
Jan 23 2007, 18:28
|

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

|
Цитата(sonycman @ Jan 23 2007, 17:19)  1. Ulink весьма дорог - в MT system 150 баксов. А Keil - среда разработки? Из сети можно скачать? 2. J-Link для меня недосягаем - $275. MT-Link ~70USD Цитата Придётся заказывать по почте, у нас такого не найти. Никто не знает подходящих магазинов? Самый лучший магазин по почте это сам Olimex.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 23 2007, 18:34
|

Дух погибшего транзистора
   
Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288

|
Цитата(sonycman @ Jan 23 2007, 18:19)  2. J-Link для меня недосягаем - $275. Его клоны можно приобрести за сумму порядка $70. Названия клонов вам уже дали. Цитата(sonycman @ Jan 23 2007, 18:19)  И что такое CW? http://rowley.co.uk/arm/index.htm
--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
|
|
|
|
|
Jan 23 2007, 23:31
|
Знающий
   
Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057

|
Цитата(defunct @ Jan 23 2007, 18:30)  Цитата(sonycman @ Jan 23 2007, 18:19)  3. А вот Olimex ARM-JTAG (это и есть Wiggler?) недорог. Но почему он "мутный"? И что такое CW?
"мутный" потому что сомнительная сложность и функциональность. Железо виглера включает только буфер между LPT портом и конечным устройством. Соответвенно вся функциональность выполняется программно на PC. Нормально реализована возможность работы через вигглер только в Rowley CrossWorks (CW). У кого как  У меня и с Кейлом работает; пляски с бубном рулят, но ведь работает... H-JTAG - хорошая штука.
|
|
|
|
|
Jan 24 2007, 04:23
|

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

|
Цитата(GetSmart @ Jan 24 2007, 01:12)  SPI1 (в отличие от SPI0) может работать на 1/2 CPU Clock. На такой скорости только на передачу  ибо из-за документированного бага с длительностью первых клоков сам себя не видит  . В дуплексе максимум 1/4. 1/8 в slave режиме. Цитата Разве Olimex высылает по почте в Россию? Как тогда с оплатой? А слабо на кнопочку было нажать? http://www.olimex.com/dev/index.htmlhttp://www.olimex.com/dev/index.html
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 24 2007, 04:32
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(GetSmart @ Jan 24 2007, 03:12)  SPI1 (в отличие от SPI0) может работать на 1/2 CPU Clock. Вы имеете ввиду SSP? Так как SPI в LPC214x только один, и про него ясно написано - 1/8 от input clock. А про скорость SSP в кратком даташите не говорится. И вообще чем SSP отличается от SPI? ЗЫ: блин, сбивают с толку "куцые" даташиты от Филипс. Пока соберёшь полное руководство... Привык к Атмелу, когда всё, что надо в одном файле. Чем другим не пример? Цитата(zltigo @ Jan 24 2007, 05:23)  А слабо на кнопочку было нажать? Да почитал я там уже: We strongly encourage you to use your local distributor in your country for your order. Так что смысла в этом мало. Проще в Терраэлектронике или в МТСистем заказать. К тому же карт Виза и подобных не имею
Сообщение отредактировал sonycman - Jan 24 2007, 04:35
|
|
|
|
|
Jan 24 2007, 04:50
|

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

|
Цитата(sonycman @ Jan 24 2007, 03:32)  Привык к Атмелу, когда всё, что надо в одном файле. Чем другим не пример? Datasheet это вполне устоявшееся форма документа и отнюдь не "как у Atmel" остальное это "User Manual" и "Errata". В чем проблема взять хоть все три, хоть один из них, хоть Application Notes в придачу.... Цитата и про него ясно написано - 1/8 от input clock. Словосочетание " input clock" не о чем задуматься не заставило? Цитата И вообще чем SSP отличается от SPI? В следующий раздел после SPI назывется SSP - там и написано  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 24 2007, 08:36
|
Местный
  
Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034

|
Цитата(defunct @ Jan 23 2007, 19:10)  2. J-Link(он же MTLink, он же JetLink) + Keil/IAR, 3. Wiggler (мутная вещь) + CW. Справедливости ради надо сказать что CW с {J|MT|Jet}Link-ом тоже работает.
|
|
|
|
|
Jan 24 2007, 10:53
|

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

|
Цитата(Alex03 @ Jan 24 2007, 07:36)  Цитата(defunct @ Jan 23 2007, 19:10)  3. Wiggler (мутная вещь) + CW.
Справедливости ради надо сказать что CW с {J|MT|Jet}Link-ом тоже работает. У меня и IAR с ним работал на "ура".
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 24 2007, 11:19
|
Местный
  
Группа: Свой
Сообщений: 446
Регистрация: 12-03-06
Из: Москва
Пользователь №: 15 142

|
Цитата У меня и IAR с ним работал на "ура". Wiggler работал с IARом? А есть ли где сводная таблица какой отладчик с каким компилятором и с каким бубном работает? Особенно интересуют IAR и Keil, как наиболее упоминаемые и Wiggler, как наиболее дешевый. Хотелось бы тоже начать освоение ARM, но, к сожалению, пока на свои деньги.
|
|
|
|
|
Jan 24 2007, 11:26
|

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

|
Цитата(Andreas1 @ Jan 24 2007, 10:19)  Цитата У меня и IAR с ним работал на "ура". Wiggler работал с IARом? Да. Причем пляски в самом начале были связаны с кривой разводкой питания на макете, но никак не с виглером. Счас коллега, по наследству, этот вигглер пользует - я MT-Link купил.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 24 2007, 12:23
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(zltigo @ Jan 24 2007, 05:50)  Datasheet это вполне устоявшееся форма документа и отнюдь не "как у Atmel" остальное это "User Manual" и "Errata". В чем проблема взять хоть все три, хоть один из них, хоть Application Notes в придачу.... Словосочетание " input clock" не о чем задуматься не заставило? В следующий раздел после SPI назывется SSP - там и написано  . Насчёт даташитов понял, буду знать. Но Атмел делают лучше  Насчёт input clock - честно говоря я пока толком не знаю, что это за частота, поэтому и написал на инглише. Думаю, в лучшем случае эта частота равна частоте CPU, в худшем - ещё меньше. Тогда SPI в LPC вообще отстой  Спасибо за помощь
|
|
|
|
|
Jan 24 2007, 12:31
|

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

|
Цитата(Сергей Борщ @ Jan 24 2007, 10:26)  Причем пляски в самом начале были связаны с кривой разводкой питания на макете, но никак не с виглером. Про главную причину - завмсимость, как минимум, от используемого компьютера отчего не помянули? Мне, например, на двух подряд никак не удалось оживить а на третьем с глюками на глюке. Wiggler не "самопальный" а от MT-System и тем не менее..... Цитата(sonycman @ Jan 24 2007, 11:23)  Насчёт input clock - честно говоря я пока толком не знаю, что это за частота Не знаете, а бочку катите  input эта частота может только в slave mode и действительно 1/8. Для maser это output по определению. slave mode это явно не Ваш случай.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 24 2007, 12:39
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(zltigo @ Jan 24 2007, 13:31)  Не знаете, а бочку катите  input эта частота может только в slave mode и действительно 1/8. Для maser это output по определению. slave mode это явно не Ваш случай. А вы ничего сами не путаете? Я смотрел пример работы с SPI на сайте NXP - там проц работает от кварца 10 Мгц, так вот частота импульсов линии SCK там составляет ровно 1/8 от 10 - 1,25 Мгц. Режим мастер, естественно.
Сообщение отредактировал sonycman - Jan 24 2007, 12:41
|
|
|
|
|
Jan 24 2007, 13:42
|

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

|
Цитата(zltigo @ Jan 24 2007, 11:31)  Цитата(Сергей Борщ @ Jan 24 2007, 10:26)  Причем пляски в самом начале были связаны с кривой разводкой питания на макете, но никак не с виглером.
Про главную причину - завмсимость, как минимум, от используемого компьютера отчего не помянули? Мне, например, на двух подряд никак не удалось оживить а на третьем с глюками на глюке. Wiggler не "самопальный" а от MT-System и тем не менее..... Три машины пробовал. На двух (у меня и заказчика) сначала не работало, после того как питание "причесал" - заработало на обоих. После этого работал еще и на третьей - тоже без проблем. Виглеров пока боролись пробовали два - самопальный и от МТ-Систем. Оба давали схожие результаты. Так что у меня несколько иная статистика зависимостей
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 24 2007, 14:15
|

Местный
  
Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394

|
Запугали человека всякими MT и J-Link-ми. Вигглер отлично работает через драйвер H-JTAG (www.h-jtag.com) с любым отладчиком который поддерживает RDI драйверы. Я работал в ADS 1.2 и RVDS 2.2. Кстати рекомендую именно эти т.к. похоже лучшие оптимизаторы. Тут я выкладывал схему Вигглера, которая у меня нормально работает http://electronix.ru/forum/index.php?showtopic=24885&hl=На счет контроллера, мне кажется по SAM7 больше примеров и дока лучше, а с LPC они примерно на одном уровне.
|
|
|
|
|
Jan 24 2007, 14:32
|
Местный
  
Группа: Свой
Сообщений: 446
Регистрация: 12-03-06
Из: Москва
Пользователь №: 15 142

|
Цитата Тут я выкладывал схему Вигглера, которая у меня нормально работает http://electronix.ru/forum/index.php?showtopic=24885&hl=По опыту avreal лучше ставить 150 Ом между LPT и 74xx244, особенно AC. Хотя бы по линии CLK. Без них работало не на каждом компе.
Сообщение отредактировал Andreas1 - Jan 24 2007, 14:34
|
|
|
|
|
Jan 24 2007, 15:16
|

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

|
Цитата(Сергей Борщ @ Jan 24 2007, 12:42)  сначала не работало, после того как питание "причесал" - заработало на обоих Пытался запускаться на Олимксовских платах (две разных, но на LPC2xxx) с блоками питания от Intel-овских китов - так-что "чесать питание" или что-либо другое  необходимости не видел ни малейшей. Цитата Оба давали схожие результаты. Так что у меня несколько иная статистика зависимостей  Забавно Wigglera два а результаты "схожие" а не одинаковые  . Короче, если кому-то "чесаться"  то Wiggler самое то. Ну а для работы желательно воспользоваться имеющимя богатством выбора.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 24 2007, 17:23
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Хорошо, всем спасибо за советы. Решил заказывать всё таки плату на Атмеле - SAM7-P256 от Олимекса. Со временем надо будет что-то типа Вигглера. А все эти дебаггеры от Вигглера и МТ-Линка до ULink работают со всеми ARM, то есть и к AT91SAM7S256 будут подходить? ЗЫ: купил книгу "Микроконтроллеры ARM7 семейств LPC2000 компании Philips. Вводный курс"  Буду осваивать. ЗЗЫ: интересно, почему не выпускают эти контроллеры в PLCC корпусах? Было-бы удобно - в панельку воткнул и порядок!
Сообщение отредактировал sonycman - Jan 24 2007, 17:40
|
|
|
|
|
Jan 24 2007, 18:56
|

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

|
Цитата(sonycman @ Jan 24 2007, 16:23)  А все эти дебаггеры от Вигглера и МТ-Линка до ULink работают со всеми ARM, то есть и к AT91SAM7S256 будут подходить? Да, кроме желтых (в прямом смысле  ) J-Link которые идут в составе ИАРовских KickStart. Эти работают только с процессорами под которые кикстарт заточен. Цитата(sonycman @ Jan 24 2007, 16:23)  ЗЗЫ: интересно, почему не выпускают эти контроллеры в PLCC корпусах? Было-бы удобно - в панельку воткнул и порядок! А разве еще что-то выпускается в PLCC? Огромный копус, тяжелый, куча пластмассы. В общем дороже бы они были в PLCC, да и надежность этих панелек не 100%. Панелька предполагает необходимость снимать микросхемы для каких-то целей, например для программирования. А сейчас практически все процессоры имеют внутрисхемное программирование и необходимость в отсоединении от платы пропала. С QFP тоже ведь никаких проблем - макетку достал, кристалл положил, две минуты махания паяльником и готово.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 24 2007, 20:10
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Понятно, значит устарели PLCC... Цитата(Сергей Борщ @ Jan 24 2007, 19:56)  Да, кроме желтых (в прямом смысле  ) J-Link которые идут в составе ИАРовских KickStart. Эти работают только с процессорами под которые кикстарт заточен. С QFP тоже ведь никаких проблем - макетку достал, кристалл положил, две минуты махания паяльником и готово. Ну я если и буду брать дебаггер - то, наверное, или простой ARM-JTAG за 600 руб или MT-LINK. А может и сам соберу первый, там ведь только несколько буферов... Запаивать TQFP или LQFP не сложно, а вот выпаивать (мало-ли) сложнее. Нету у меня квадратной насадки на фен.
Сообщение отредактировал sonycman - Jan 24 2007, 20:10
|
|
|
|
|
Jan 25 2007, 02:39
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Цитата(sonycman @ Jan 25 2007, 00:28)  Народ, помогите, где можно скачать нормальную версию uVision для ARM? Или, может, кряк у кого есть для ознакомительной версии с их сайта? Уважаемый sonycman, я прочитал, что вы недавно приобрели книгу "Микроконтроллеры ARM7 семейств LPC2000 компании Philips. Вводный курс". Я сам неделю назад скачал её в inete в djvu (отличное качество).  ARM изучаю недавно, облазил пол инета, и по моему мнению, самоучителя, лучше чем эта книга, для новичков нет. Есть одно но. Нет диска с примерами программ  . А без примеров сильно теряется смысл прочтения. Не могли бы вы выслать примеры мне на мыло plies?  (q9собакаtut.by). По поводу uVision я сделал так (вам тоже советую). Во первых скачать среду (покрасней мере последнюю версию 3.34), можно только с keil.com (в других местах искал не нашёл). Для этого просто заполните форму. Я обычно пишу Name: Fox, Surname:Malder, ну и дальше в это виде  . Мыло указать реальное. Они СРАЗУ (а не как некоторые…) высылают прямой линк на среду. Среда весит ~63M. Если скорость ~50KBod/s не советую качать из дома. Я два раза закачивал Opero-й (по 7 часов) чуть не одурел!!! и оба раза закачивалось криво!!!  Потом пошел в инет-кафе и за 40 минут закачал без проблем (отдал за всё 0,5$).  Среда Trial-ая. Полазив в инете нашёл генератор ключей. Вставил сгенерированный ключ… и о чудо Trial превратился в Full version до 2029 года.
|
|
|
|
|
Jan 25 2007, 03:32
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Кстати, есть ещё вопросы к уважаемым участникам форума. В uVision для ARM можно устанавливать три вида компилятора. RealViwe, Keil, GNU. Про GNU слышал только отрицательнее отзывы (в основном по размеру кода и быстродействию, на некоторых сайтах были описаны почти 10 кратное преимущества вышеописанных компиляторов по сравнению с GNU). Хотя я понимаю, что это сильно зависит от версии компилятора и используемых библиотек (например, float оптимизированная), но неприятный осадок остался  . В скаченной среде в папке BIN , почему-то есть только компилятор RealView. Про него читал что это родной компилятор разработанный компанией ARM, которая вроде бы купила компанию Keil? (если я не прав поправьте, а то от перегруза информацией стек уже переполнился в мозгах  )И он вроде как считается наиболее качественным и типа является основным для среды uVision for ARM. Однако на одном форуме прочитал, что кто-то компилировал одну и туже программу в Keil и RealViwe и код в кеил пулучился 400 байт, а в RealViwe 1K. Что наводит на смутные сомнения  . В книге про PHILIPS контроллеры, все примеры используется Keil компилятор. Из сказанного выше сформулирую вопросы: 1. Где скачать компилятор keil. Конкретно CA.exe AA.exe LA.exe. Искал, не нашёл 2. Если преимущества у какого-нибудь из этих двух компиляторов. 3. Почему _tutmb _arm __task директивы не понимает компилятор RealViwe. Или есть другие способы обозначить подпрограмму как задачу, что бы компилятор не вставлял лишнее сохранение контекста, или обозначить функцию как tumb. Еслиже подобная настройка отпала за ненадобностью то обясните почему? 4. Как в RelaViwe сгенерировать .ELF file, чтобы вставить его в отладку в proteus. Если никак то может ли это сделать Keil компилятор? Заранее выражаю свой глубочайший  ответившим. Если что-то не так не смейтесь. ARM-ы я изучаю около недели  . Ну и на последок (извините за наглость). Если кто знает ссылки на русские-аккаунты по ARM. В частности интересует описание регистров Philips контроллеров. А то читаешь их убогий datashet (английский более мнение знаю, со словарем  ) и думаешь толи лыжи не едут…  И ещё, пытаюсь разобраться с прерываниями. Есть куча регистров типа VICxxx но в даташите (долгих лет жизни его писателям  ) пару скудных строк про эти регистры. Объясните VICIntEnable что включает? Разрешает прерывание каждой ноги порта A, что ли? Не мог бы кто-нибудь привести пример инит- файла с комментариями. Типа запрещаем прерывания, для этого такой регистр так, другой регистр сяк. Инициализируем порты. Инициализируем прерывания и т.д.
|
|
|
|
|
Jan 25 2007, 04:59
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
2Alex_inventor Хорошо, завтра взгляну на диск от книги и намылю  Я тоже только несколько дней изучаю ARM, да и по C++ у меня только общие знания. Вот буду подтягиваться  Микровижн скачал и крякнул, всё ОК, спасибо за совет! По компилятору Keil CARM - тоже хотелось бы сравнить его с RV. Сейчас вот смотрю на стартовый файл проекта для AT91SAM7S (который в комплекте идёт) и никак не могу понять, что за команда такая - ADR? Вот кусок кода на ассемблере (во второй строке): IF :DEF:RAM_INTVEC ADR R8, Vectors ; Source LDR R9, =RAM_BASE ; Destination LDMIA R8!, {R0-R7} В системе команд ARM7TDMI ADR вроде нет. Так что это такое? Компилиться она вот во что: SUB R8, PC, #0x000000B8. Просто LDR вместо неё поставить не получается. Объясните, пожалуйста
|
|
|
|
|
Jan 25 2007, 05:32
|

山伏
    
Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294

|
Цитата(Alex_inventor @ Jan 25 2007, 01:39)  Цитата(sonycman @ Jan 25 2007, 00:28)  Народ, помогите, где можно скачать нормальную версию uVision для ARM? Или, может, кряк у кого есть для ознакомительной версии с их сайта?
Есть одно но. Нет диска с примерами программ  . А без примеров сильно теряется смысл прочтения. Не могли бы вы выслать примеры мне на мыло plies?  (q9собакаtut.by). Кажется это они лежат на местном ФыТыПы. Цитата(Alex_inventor @ Jan 25 2007, 02:32)  Про GNU слышал только отрицательнее отзывы (в основном по размеру кода и быстродействию, на некоторых сайтах были описаны почти 10 кратное преимущества вышеописанных компиляторов по сравнению с GNU). Хотя я понимаю, что это сильно зависит от версии компилятора и используемых библиотек (например, float оптимизированная), но неприятный осадок остался  . Да что Вы ...  А если бы на тех "некоторых сайтах" написали что разрыв в 100 раз, то тоже следовало бы поверить??? Вы никогда не задумывались о том, что для того чтобы напарить что-либо платное, когда рядом лежит бесплатное уже недостаточно хвалить, надо запугивать...
--------------------
Нас помнят пока мы мешаем другим... //-------------------------------------------------------- Хороший блатной - мертвый... //-------------------------------------------------------- Нет старик, это те дроиды которых я ищу...
|
|
|
|
|
Jan 25 2007, 11:22
|
Частый гость
 
Группа: Свой
Сообщений: 81
Регистрация: 4-08-05
Из: г. Саратов
Пользователь №: 7 351

|
Цитата(sonycman @ Jan 25 2007, 04:59)  Сейчас вот смотрю на стартовый файл проекта для AT91SAM7S (который в комплекте идёт) и никак не могу понять, что за команда такая - ADR? Вот кусок кода на ассемблере (во второй строке): IF :DEF:RAM_INTVEC ADR R8, Vectors ; Source LDR R9, =RAM_BASE ; Destination LDMIA R8!, {R0-R7} В системе команд ARM7TDMI ADR вроде нет. Так что это такое? Компилиться она вот во что: SUB R8, PC, #0x000000B8. Просто LDR вместо неё поставить не получается. Объясните, пожалуйста  В поставке KEIL'а есть файл <..>\ARM\Hlp\RV_asm.pdf "RealView Compilation Tools Version 3.0 for μVision Assembler Guide" Открываем его и в разделе "2.6.1 Direct loading with ADR and ADRL" читаем: Код The ADR and ADRL pseudo-instructions enable you to generate an address, within a certain range, without performing a data load. ADR and ADRL accept a program-relative expression, that is, a label with an optional offset where the address of the label is relative to the current PC. и чуть ниже Код The assembler converts an ADR rn,label pseudo-instruction by generating: • a single ADD or SUB instruction that loads the address, if it is in range • an error message if the address cannot be reached in a single instruction. Т.е. ADR - это не команда ARM7TDMI, а просто инструкция ассемблера, облегчающая процесс разработки
|
|
|
|
|
Jan 25 2007, 13:42
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
2Andy Great: Да вы правы насчёт размещения компилятора. Действительно BIN32. Однако при установке keil компилятора, среда явно требует файлы CA.exe AA.exe LA.exe. Методом обычного поиска таких файлов не обнаружено. В папке BIN лежат только .dll. В среде при выборе компилятора нужно указать адрес папки с компилятором. Так вот устанавливал различные адреса и BIN, и BIN32. Во всех случаях результат один  : Build target 'Target 1' assembling Startup.s... --- Error: can't execute 'C:\Program Files\Keil\ARM\BIN\AA' Target not created Впрочем, это и понятно. Нужны конкретные вышеописанные файлы. Если у кого есть, может, кто выложит на форуме? Или по мылу (q9собакаtut.by). И опять же повторяю вопрос, а стоит ли его использовать, раз уже в среде при скачивании его нет? Устарел что ли? Или его нет потому, что среда изначально Trial была? 2DRUID3: По поводу качества кода компиляторов я спорить не буду, по причине других оценок к подходу их выбора. Для меня главное удобство в работе. К примеру для AVR пользуюсь CodeVision, хотя почти на всех сайтах “поносят” его, и восхваляют IAR. Но, попробовав поработать с IAR  , понял, что уже не могу отказаться и от стартового инициализатора, и от типа bin, и от helpa, и от того что, я в нём уже как рыба в воде. Короче дело привязанности. A у последних версий код генерируется даже очень “ничего”. Приведу страницу из книги "сравнение ARM компиляторов", решайте сами: Keil ищу в основном потому, что все примеры в книге написаны для него. Т.е. опять же для удобства. Что бы мне, как новичку, не пришлось решать мелкие проблемы совместимости разных компиляторов. Да и судя по тестам, он почти самый лучший (что условно). На последок, дорогие участники форума, помогите страждущим кто, сколько может, кто кодом (простым и с комментариями), кто русским help на контроллер, можно и на буржуйском только понятным, шютка!!!  Интересуют, как устроены прерывания серии LPC2xxx (в книге что-то не очень понятно). Всем
Сообщение отредактировал Alex_inventor - Jan 25 2007, 13:47
Эскизы прикрепленных изображений
|
|
|
|
|
Jan 25 2007, 13:53
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
2sonycman: Огромный  за мыло.
|
|
|
|
|
Jan 25 2007, 13:55
|
Группа: Новичок
Сообщений: 7
Регистрация: 25-01-07
Пользователь №: 24 756

|
2 Alex_inventor Подскажите, пожалуйста, ссылку на книгу "Микроконтроллеры ARM7 семейств LPC2000 компании Philips. Вводный курс" и на CD к ней, если удалось его найти.
|
|
|
|
|
Jan 25 2007, 15:31
|
Группа: Новичок
Сообщений: 7
Регистрация: 25-01-07
Пользователь №: 24 756

|
2 Alex_inventor: Спасибо большое. Не хилый ресурчик :-). 2 sonycman: А не будете ли Вы так любезны, что бы и мне прислать или CD или ссылку на него.
|
|
|
|
|
Jan 25 2007, 16:29
|
Группа: Новичок
Сообщений: 7
Регистрация: 25-01-07
Пользователь №: 24 756

|
2 sonycman
Тогда моем его, а средство вот ug_krgaБОБАКАmail.ru. Сыпасыбо! ;-)
|
|
|
|
|
Jan 25 2007, 16:44
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
2 Andy Great: Не могли бы вы выложить keil компилятор (AA.exe LA.exe CA.exe). Или может ресурс знаете, где скачать можно. И какой версии этот компилятор. На сайте Keil.com лазил и что-то не нашёл линки для скачиваний  . Может они его уже не поддерживают?
|
|
|
|
|
Jan 25 2007, 17:22
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Проверил для какого компилятора написаны примеры проектов, оказалось для GNU! Я в растерянности  В среде есть только RealViwe компилятор. В книге пишут и приводят примеры для Keil компилятора. А проекты сделаны для GNU. Попытка откомпилировать GNU исходники под RealViwe приводит к ошибке: Build target 'Target 1' compiling fibo.c... fibo.c: Warning: C3910W: Old syntax, please use '--via'. fibo.c: Warning: C3910W: Old syntax, please use '--apcs'. fibo.c: Error: C3494E: No --device option specified. This option is mandatory. Target not created Чтож  будем проавить исходники. А я надеялся отделатся малой кровью. Вот ТАК!
|
|
|
|
|
Jan 25 2007, 17:41
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Подскажите, что это за ошибка: Build target 'Target 1' compiling fibo.c... fibo.c: Warning: C3910W: Old syntax, please use '--via'. fibo.c: error: C3900U: Unrecognized option '-pu'. fibo.c: Warning: C3910W: Old syntax, please use '--apcs'. fibo.c: Error: C3494E: No --device option specified. This option is mandatory. Target not created
Не могу понять. Компилятор RealView.
|
|
|
|
|
Jan 25 2007, 20:02
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Я вот тоже не в понятках пока - разбираюсь со Startup Code для SAM7, почти со всем разобрался, но непонятно вот это: IMPORT __use_two_region_memory EXPORT __user_initial_stackheap __user_initial_stackheap Эти строчки стоят в тексте уже после вызова __main, но обрабатываются, по-моему, до него. Что это такое? "Heap" - куча какая-то?  Посмотрел в доках - __user_initial_stackheap возвращает данные о размере стёка и этой самой кучи. На кой чёрт это надо? Стёк и куча уже были заданы гораздо раньше этого. Может, просвятит кто тёмного? 2Alex_inventor А почему бы тебе не установить GCC и не мучиться на первых порах? Весит около 20 метров. Ссылка даётся на keil.com вместе с самим uVision.
Сообщение отредактировал sonycman - Jan 25 2007, 20:14
|
|
|
|
|
Jan 25 2007, 23:44
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Народ, а как в uVision узнать размер полцчившегося кода. Во всех нормальных компилятарах размер сразу же вывоился после компиляции. А сдесь нету  Открывать окно с flash не предлогать. Должен быть способ проще.
|
|
|
|
|
Jan 26 2007, 02:36
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Hello All. Изучаю UART в LPC20xx. Есть одна непонятность. Суть: Чтобы настроить UART на заданную частоту надо занести в регистры DLM и DLL значение делителя. На UART поступает частота с шины VPB. В DATASHETE сказано, что эта частота идёт напрямую. Но на самом деле она делится на 16. (обнаружено экспериментальным путём ) . Может кто-нибудь объяснить такое поведение. P.s. F=14.7456MHz, PLLMUL=1, PLLDIV=1, VPBDIV=1. Для частоты 9600, по идеи надо занести значение F/9600= 0x0600, а на самом деле такую частоту можно получить только при значение 0x0060. Может ещё с какой периферией такие приколы есть?
|
|
|
|
|
Jan 26 2007, 03:33
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Кто-нибудь пользуется такой софтиной “Embest IDE for ARM” (http://www.armkits.com/Product/idemain.asp). Есть ли лекарство от жадности? А вот бесплатная софтина для инициализации регистров для АРМ: http://www.armkits.com/Product/regeditor.asp. Вот прямой линк на среду uVision3 (https://www.keil.com/arm/demo/eval/arm.htm). 2sonycman Заметил что среда редакции 17.01.07 и весит 65метров. А моя весит 60метров. Хотя обе версии 3.04 Может там Keil компилятор появился?
|
|
|
|
|
Jan 26 2007, 09:47
|
Знающий
   
Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057

|
Цитата(Alex_inventor @ Jan 25 2007, 16:44)  2 Andy Great: Не могли бы вы выложить keil компилятор (AA.exe LA.exe CA.exe). Или может ресурс знаете, где скачать можно. И какой версии этот компилятор. На сайте Keil.com лазил и что-то не нашёл линки для скачиваний  . Может они его уже не поддерживают?  Там наверное, не только компилера, а и библиотек нету. А Примеры к RV ищите в другой ветке. КЕсли надо именно GCC, используйте GNUARM - работает, только надо ключи правильно указать. Возможно, Кейловский компилер есть в версии 3,03а, если нет, то в версии 2,50. Поищу.
|
|
|
|
|
Jan 26 2007, 10:24
|

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

|
Цитата(Alex_inventor @ Jan 26 2007, 02:33)  Кто-нибудь пользуется такой софтиной “Embest IDE for ARM” (http://www.armkits.com/Product/idemain.asp). Есть ли лекарство от жадности? Покупал стартер-кит этой фирмы. К нему шла среда, но ограниченная. Попользовался около часа, не впечатлило. Даже IAR намного круче. Не говоря уже об RV. Кстати Eclipse вместе с тулчейном от GNU смотрится весьма достойно.
|
|
|
|
|
Jan 26 2007, 12:21
|
Группа: Участник
Сообщений: 10
Регистрация: 27-05-06
Из: Новосибирск
Пользователь №: 17 495

|
В 3,03 уже нету CARMa, был в 3,02. Выкладываю те файлы что VAI давал на сахаре http://caxapa.ru/71537.html У меня правда под крякнутым uVision 3.03a он требовал лицензию, разбираться не стал, пользуюсь IAR'ом.
|
|
|
|
|
Jan 26 2007, 13:39
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Скачал Embest Register Editor. Прога так себе…  Напоминает записную книжку – справочник. Можно неплохо использовать, как быстрый способ посмотреть, какие регистры есть в контроллере и их назначение и особенности. Можно давольно просто вносить новые камни (что радует  ). Можно настраивать регистры какого-нибудь проца, а потом произвести экспорт в txt файл. Правда, имхо, тупой экспорт и врядли этим можно пользоваться. В общем смотрите сами. Некоторых может повергнуть в шок надпись при запуске проги “данная таблица сортировки не поддерживается операционной системой” после 17,5метров закачки  . И что прога не работает. Лечится легко. Зайдите панель управления->языки и настройки->поставить галочку на поддержку корейского, японского, китайского языка. Система запросит кампакт с виндой и 200 метров свободного пространства на диске. После установки будет всё OK. P.S  . в самой проги ни одного иероглифа не обнаружил, но прога корейская, может поэтому  ?
|
|
|
|
|
Jan 26 2007, 15:01
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
To All Объясните в чём причина. Вот пример кода (uVision3,ARMCC): //********************ПРИСОЕДЕНЯЕМЫЕ ФАЙЛЫ******************** #include <LPC210x.H> // LPC21xx definitions #include "binary.h" #include <stdio.h> //**********************ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ************************ unsigned char string[] = {"hello world \n"}; /******************************************************************** *************************ПОДПРОГРАММЫ******************************** ********************************************************************/ void initialisation(void) { //Настраиваим UART0******************************************** PINSEL0 |= bin(00000101); //задействовать выводы RX0 и RX1 U0LCR = bin(10000000); //Бит DLAB-1 разрешение настройки делителей U0DLL = 0x60; //Program the divisor latch for 9600 baud U0DLM = 0x00; U0FCR = bin(01001111); //enable the FIFO's U0LCR = bin(00110011); //Program the line control 8\N\1 } void putsf(unsigned char *str) { int x; for(x=0;x<100;x++) { if( str[x]==0) break; putchar(str[x]); } } /*********************************************************************** ************************Основная программа****************************** ***********************************************************************/ int main(void) { initialisation(); while(1) { delay_us(1000000); putsf(string); } } Так вот, если не присоединять <stdio.h>, ну и соответственно не пользоватся putchar, а тупо вводить данные в THR то всё отправляется нормально. Если присоеденить данную библиотеку, то при включении <d>(симуляции) , (гдето в стартовом асемблерном коде, не доходит до main даже) срабатывает SWI прерывание, и проц застревает в заглушке. Почему так? 2sonycman Запарил редактор дизасемблера  . Конкретно скролл справа  . Его положение неадекватно реагирует на реальное местоположение курсора в программе (всё время внизу находится) Из-за этого сильно затрудняется навигация, и у меня начинается чувстао "прострации"  (не знаю где нахожусь). Происходит когда попадаю в асемблерную часть, созданую keilom как куски оптимизации (ну вообщем вы меня поняли). Ни одного коментария  ! Бескрайний массив ассемблерных команд  . (Почему не сделать как в CodeVision где всё имеет коментарии  и вполне читабельно?) Так вот, меня интересует этот баг со скролом в версии 3.05 исправлен? А то думаю скачать ли?
|
|
|
|
|
Jan 26 2007, 15:22
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(Alex_inventor @ Jan 26 2007, 16:01)  Запарил редактор дизасемблера  . Конкретно скролл справа  . Его положение неадекватно реагирует на реальное местоположение курсора в программе (всё время внизу находится) Из-за этого сильно затрудняется навигация, и у меня начинается чувстао "прострации"  (не знаю где нахожусь). Происходит когда попадаю в асемблерную часть, созданую keilom как куски оптимизации (ну вообщем вы меня поняли). Ни одного коментария  ! Бескрайний массив ассемблерных команд  . (Почему не сделать как в CodeVision где всё имеет коментарии  и вполне читабельно?) Так вот, меня интересует этот баг со скролом в версии 3.05 исправлен? А то думаю скачать ли? Да вроде нормально всё с окном дизассемблера  Кусорчик прыгает, конечно, и может находиться как внизу, посередине, так и вверху страницы. А вставленные функции сишной библиотеки (по крайней мере __main и другие при инициализации) действительно идут без исходников, только ассемблерный код.  Блин, тяжело изучать ARM по книге, в которой все примеры даны для компилятора CARM. Почему он больше не поддерживается? Этот RV попроще кажется. Нет ни __ram, ни некоторых других полезных преффиксов
Сообщение отредактировал sonycman - Jan 26 2007, 15:24
|
|
|
|
|
Jan 26 2007, 15:31
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Запарил уже uVision.  Надоело уже переустанавливать среду. Вдруг нестого не с сяго начал выдовать: compiling main.c... --- Error: can't execute 'gcc' main.c - 1 Error(s), 0 Warning(s). Пути к компилеру проверял, всё указано верно? В чём проблема?
|
|
|
|
|
Jan 26 2007, 15:44
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Цитата Блин, тяжело изучать ARM по книге, в которой все примеры даны для компилятора CARM. Почему он больше не поддерживается? Этот RV попроще кажется. Нет ни __ram, ни некоторых других полезных преффиксов О чём и речь! Почему я и искал этот компиллер. А вобще я непойму почему от него отказались? Во всех тестах, какие я встречал, он был лучший. Утачню вопрос по поводу скрола. Если находишся в отладке(симулятор), и ходишь по шагам, то скрол беспричинно не телепортируется в самый низ? Это сильно нагружает образное мышление. Находишся в начале адресов flasha, а посмотришь на скрол вроде как в конце? Несастыковачка какая то? Мне это важно знать, а то нехочется качать 65метров с точно такимже багом!
|
|
|
|
|
Jan 26 2007, 16:20
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Нет экран не прыгает ниже или выше указателя. С этим всё впорядке. Просто гдебы не находиля указатель скрол всегда внизу. Пример: Прыгнули мы командой B куданибудь. Так посмотрел справа на бегунок и имеем представление в какой обоасти мы находимся. Бегунок частично работает если его курсором тягать. Показывается слева адрес и после отпускания кнопки мыши попадаем туда куда надо (правда листинг не прокручивается динамически с бегунком х...о). Но если сделать шаг то бегунок опять вниз слетает. Есть такой баг? Уточняю именно в окне дизасемблера.
|
|
|
|
|
Jan 26 2007, 17:06
|
Группа: Участник
Сообщений: 10
Регистрация: 27-05-06
Из: Новосибирск
Пользователь №: 17 495

|
Примерно 100 мБ IAR весит с небольшим.
|
|
|
|
|
Jan 26 2007, 17:19
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Вот цитата с форума IXBT.com: Цитата Но поковырявшись понемногу с CrossWorks, IAR и KEIL, хочу сказать следующее. Начинать надо, безусловно, с CrossWorks. Скачать, запустить, проверить что свежеспаяный Wiggler работоспособен и снести этот CrossWorks к такой-то матери. Если страшно разбираться с новым процом и охота привычной среды, то можно поставить IAR. Wiggler с ним тоже вяжется и вполне прилично работает. Но, блин, этот KEIL... Он мне все карты спутал. После него мне на IAR даже смотреть не хочется, просто убожество. Определённо - KEIL действительно крут, имхо. Но пока у меня всё по старику Крылову, про "лису и виноград". Никак не могу wiggler с ним заставить работать ( приходится через H-JTAG, не знаю, может есть другой способ, но без всех этих извратов *никсовых ).
В общем, имхо если охота покататься на Феррари, хотя нет, скорее на Ягуаре ( в том смысле, в плане комфорта и дизайна Феррари тут и близко не валялась ), то это KEIL. Что-то мне уже расхотелось IAR ставить  Тем более весит больше Кейла...
|
|
|
|
|
Jan 26 2007, 18:18
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Про IAR могу поведать следующую историю. Раньше, когда осваивал AVR, постоянно сталкивался на форумах с восхваления этого IAR (сам работал в CodeVision). Так вот, начал я искать возможности использовать его. После долгих поисков, нарыл в инете чудо-multi кряк. Кряк сделан на славу (а музыка в нём такая, что я по пол часа слушал много раз) сразу видно профессионалы. Кряк генерит ключи для MSK-51 v7.20, AVR v4.12a, AVR32 v2.10A, ARM v4.31A, R16C & R8C v3.10A, NEC78A v4.30A, MSP430 v.3.40A, SAM8 v2.21A, MAXQ v1.13C. По причине природной жадности ко всему холявному, я скачал все эти среды (хотя скорее всего большинством, если не всеми не воспользуюсь никогда). Скачать можно только на iar.com после заполнения формы. ARM среда весит 94,2 метра. Среды trial, но после скормления ключа превращаются в full. В общем посмотрел я на этот IAR… и разочаровался  . В общих чертах следующие замечания: крайне трудно стартовать (help на основе PDF, в trial версии help урезан до невозможности, практически никакого серьёзного ответа не найти, только основы, но основы большие), нет привычных вещей типа bin, стартового кодировщика, криво сделаны закладки, симулятор убогий, да и много чего ещё не так, не помню уже. На одном форуме человек писал про IAR следующее (не дословно): “Исходник это основное. Среда только надстройка предназначенная для удобства работы с исходником. В IAR же, такое ощущение что исходник, нечто второстепенное ”. В общем смысле я с ним согласен. (Не ругайте меня IAR поклонники, так как оценка зависит от привязанности. Если когда-то научился работать, то уже лучшая среда. Моё первое впечатление от него такое.) Про IAR компилятор для AVR читал что лучший. Но для ARM IAR компилятор, судя по форумам, хуже, чем обсуждаемые выше. Плюс IAR по сравнению с uVision мульти-платформенность (оболочка везде одинаковая). Но смотрел список поддерживаемых ARM в IAR и Keil, так в Keil в три раза больше. Возможности среды uVision на голову превосходят IAR. Это и отладочные функции. Круто придумали. Я например написал функцию(не сам, брал исходники) подсчёта количества тактов и прошедшего времени в us, очень удобно. Очень понравилось показ времени на каждой инструкции при отладке. Балдею от настроек цветов, горячих клавиш, собственной библиотеки, структуры папок проекта, да практически всего. Просто сказка какая-то  . Сразу видно, что писателей среды потом заставляют на ней работать  . А не как у некоторых, становится такое ощущение что, писатели люто ненавидят пользователей их творений, и всячески пытаются исортить им жизнь  (сплошь и поперёк сталкивался, когда искал среду для проектирования ПП и схем). Но uVision не идеал. Есть недочёты. Но идеала не бывает, наверное? To All, ответит кто нибудь на вопросы заданные выше? Всем
|
|
|
|
|
Jan 27 2007, 02:39
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
2sonycman Кидай мыло, а то я письмо удалил. Что касается среды то, наверное, я перебрал их все. На эту тему могу книгу написать. Из Интернета качал всё, хоть чуточку напоминающую CAD. Покупал DVD. Пробовал и удалял. Ко всем были те или иные претензии. Краткий перечень: PCAD(2000,02,06), OrCad (9.2 10.5), Electronic Workbench, Zuken CADSTAR, CAM350 8.7, Accel EDA 15, MicroCAP, Eagle 4.16r2, DipTrace1.3 и др. некоторые не помню, а некоторые “выкидыши” и не запоминал. Основной критерий при выборе максимальное удобство, простота использования (не за счёт качества), интуитивно понятный интерфейс. До этого работал в любительской проге SprintLayout4 (сейчас 5 версия есть). Порога, с точки зрения удобства, устраивала на сто процентов.  Трассировал вручную. Трасировщик что там есть, скорее как демонстрация, а не для работы. Но шло время и захотелось большего. Конкретно: рисуешь схему, а по схеме на тебе плату + нормальная авторазводка. Хотя по авто трассировке, сплошь и поперёк слышишь о её кривости, однако начальную работу можно доверить ей, ну а потом “долизать” схему вручную. Так, имхо, делают почти все. Так вот, начал я поиски среды. И ко всем применял стереотипы удобства работы SLayout. И ни одна среда полностью не подошла. Ну не могу я удобство променять  . Привык уже. Как оказалось, серьёзные среды разрабатывают несколько компаний. Пересчитать можно на пальцах одной руки. Отдельно хочу выделить одну компанию: Altium. Эта австралийская корпорация, поскупала другие компании, и на данный момент её продуктами являются такие проекты как PCAD, OrCAD, Altium Desiner 6. Вот на последнем мой взор и остановился. Читал её возможности – впечатляют  . Вот это точно среда сквозного проектирования! Начиная со схемы, и закачивания 3D видом платы, плисы и многое другое. Скриншёты очень даже ничего. Но есть одна большая проблема у этой среды  . Весит ~1,6Гб. Я её неделю качать буду. Крэки в инете водятся. По поводу PCAD, они его почти не поддерживают. Разницу между 2000-2006 в лупу искать надо. С OrCad та-же история. Походу все силы на AltiumDesiner бросили. Да и вообще не понимаю почему PCad так популярен. Работа с ним (в особенности по созданию элементов) эквилибристика какая-то! Есть совтина SPlan. Разводит схемы. Удобная. SPlan и SprintLayout писал один автор. Но они не скооперированы  . Не знаю, почему автор не соединит их? Если это произойдет, да ещё и трасировщик нормальный прилепит, да хотя бы Spectru, то по-моему, все отдыхать будут.
|
|
|
|
|
Jan 27 2007, 04:00
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
2Alex_inventor Моё мыло: sonycman(собачка)mail(тчк)ru Да-а, ты прямо писатель  Наверное, час пост писал? А вообще интересно почитать, конечно. Надо-же, ты столько софта перелопатил. Я пробовал только PCAD начиная с 2000 до 2006 (как ты) и OrCAD10. Остановился на Пикаде. Хотя и Оркад тоже хорош. Но Пикад показался удобнее. Не знаю, почему тебе он кажется неудобным. Создать новый элемент - минутное дело. Что паттерн, что символ. Оркад в этом смысле похуже. Насчёт Sprint Layout - не думал, что его хоть как-то можно поставить рядом с огромными кадами  Это всё имхо  Тут, наверное, дело привычки. Я начинал именно с Пикада, а ты - со Спринта. Старый друг лучше новых двух  Такой вот оффтопчик небольшой  Всё, дочитал я книгу по LPC2000. Неплохая, если не считать, что большинство примеров не будет работать под Кейлом (если только GCC ставить?). Последняя глава по Микровижн как раз идёт  Завтра начну изучать мануал по SAM7, плата с которым скоро должна приехать  А пока сложилось впечатление, что LPC2000 и AT91SAM7 достойны один другого. Вот если бы взять всё лучшее из каждого и соединить - был бы идеальный ARM микроконтроллер начального уровня...
Сообщение отредактировал sonycman - Jan 27 2007, 04:03
|
|
|
|
|
Jan 27 2007, 14:53
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Цитата Всё, дочитал я книгу по LPC2000. Неплохая, если не считать, что большинство примеров не будет работать под Кейлом (если только GCC ставить?). Необольщайся. Я скачал этот GCC. Ни один пример не работает. Везде примерно такая ошибка  : Build target 'Flash' compiling main.c... arm-uclibc-gcc: cannot specify -o with -c or -S and multiple compilations assembling Startup.s... Assembler messages: Error: Error: can't open Files\Keil\ARM\INC\Philips\ for reading Files\Keil\ARM\INC\Philips\: No error Target not created И самое не приятное что непонятно из-за чего.  Но есть в этом и один, но большой плюс. Приходится построчно копировать исходники, компилировать, искать ошибки, искать ответы на непонятки, и как следствие неплохое самообучение. Правда силу воли надо иметь. Нудно иногда бывает. Насчёт среды, если ты работаешь в PCAD и он тебя не напрягает, значит, эта среда для тебя. Значит, она предоставляет тебе все ресурсы, в которых у тебя возникает потребность. Не больше, не меньше. И это правильно. У меня был случай, когда я зашёл к другу (геймеру), я заметил, что у него winamp был с футуристическим скином. Причём в крайне выраженной форме  . Пикассо отдыхает! Я с трудом нашёл кнопку для настройки скина, на ощупь  , и поставил стандартный. Каково же было моё удивление, когда мой друг с криками “не трогай птичку!!! ” набросился на меня  . Дааа… дело привычки! Спор какая среда лучше, напоминает софистику. На изначально ошибочных условиях делаются все остальные выводы. Я на это смотрю иначе. Если есть среда A,B,C. Средой A пользуюсь я. Средой B ты. А среда С устраивает нас обоих, то эта среда лучшая из этих трёх. Т.е. среда С предоставляет все нам необходимые сервисы. Напоследок хочу выразить моё мнение по поводу Layout. Почему все её так кичатся? Каких то 1,4м против сотен мегабайт проффесиональных CAD, не наш уровень  ! Однако если сравнить одинаковые сервисы c тем же PCAD, то имхо, в первом они гораздо удобнее. Надо сравнивать по аналогичным сервисам, тогда оценка будет более, менее объективной. Понятно, что в PCAD намного больше сервисов, которых в LayOut просто нет. Но этот одинаковый фундамент у PCAD, повторяюсь имхо, хуже. Вот почему мне он не понравился. С другими средами та же история. Кстати uVision идут по правильному пути. Пути максимальной настройки среды. У всех разные стереотипы. И вижн постарался их не ломать. Думаю, среды в которых будет такой подход, будут обречены на популярность (о как выразился!). Письмо с кряком высылаю. Лови!  Всем
|
|
|
|
|
Jan 27 2007, 15:20
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
2Alex_inventor Спасибо за кряк. Музыка и правда ничего. Люблю я мызыку  Сейчас вот меня интересует вопрос отладки. Везде пишут, что отладчики загружают программу в RAM, а не во флеш. Ну это понятно - можно много точек останова поставить. Но вот как-же может работать программа в памяти, когда она предназначена для выполнения во флешке? Там же при инициализации выделяется и очищается место в RAM под стёк и переменные. А тут по этому месту сама программа будет. Она же затрёт сама себя! Вот это мне не понятно. Другое дело, если проект изначально готовить для размещения в оперативе - стёк и переменные отодвинуть на другой конец памяти, и программу тогда можно перекидывать на начало RAM.
Сообщение отредактировал sonycman - Jan 27 2007, 15:21
|
|
|
|
|
Jan 27 2007, 17:29
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Я не специалист, но попробую объяснить как я понял. Во-первых, само ядро – микропроцессор – “фоннеймовская” архитектура. Т.е. шина данных и адреса одна. Проца не интересует, что есть flash или ram. Он инкрементирует PC и по адресу берёт команду, а что это Flash, Ram, или что другое его не касается. Это уже проблемы железа. Если в команде есть адрес данных то он по этой же шине запрашивает данные, а куда его этот адрес приведёт в Ram, Flash или в “тьму тараканью”, уже не его проблемы. Это проблемы компилятора и кодера(в некоторых случаях). Поэтому и существуют такие вектора как Undef_Addr, PAbt_Addr, DAbt_Addr. Для выполнения программы в RAM необходимо согласовать адреса стеков, и переменных. В принципе это делает компилятор. Ты только резервируешь переменные, а компилятор сам их распределяет. Для того чтоб компилятор разместил функцию в RAM в Keil компиляторе есть директива __ram. В RealViwe не помню (или не знаю). Вообще ram, как правило, маленькая и много туда не поместится. При загрузке в проц, тоже надо делать специальные телодвижения. Слышал что, напрямую не получится, надо писать свой загрузчик. (может я не прав). Я никогда не делал подобную процедуру. У меня даже нет физического камня. Эксперименты пока в Proteus делаю. По этому всё вышесказанное чистые умозаключения. Буду рад тоже выслушать мнения специалиста по данному вопросу.
|
|
|
|
|
Jan 27 2007, 17:48
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
2Andy Great Компилятор я качал с keil.com. Он лежит на одной странице, где и сам uVision. Файл является установщиком (gccARM331.exe). Я ничего не настраивал, он сам установил себя в папку с:\ Cygnus и ещё некоторые манипуляции с реестром, по-моему, проделал. На диске есть готовые проекты. В каждом проекте в настройках указан GCC. Так вот, если я нажимаю компиляцию, то выскакивает ошибка. Проекты необходимы только для использования при прочтении книги, и всё! В чём причина разбирается, не хочу (осваиваю RealViwe). Повторяюсь, это не отдельные файлы, а целые проекты, с настройками компилятора и т.д. По этому всё сразу должно заработать. Сей факт пусть остаётся на совести автора. P.S. В некоторых проектах настолько очевидные ошибки, что становится понятно, что автор их никогда и не компилировал. Например использование putchar(), а #include<stdio.h> и в помине нету.
|
|
|
|
|
Jan 27 2007, 18:01
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
2Alex_inventor Да, я бы тоже был бы рад послушать спецов, только они последнее время все пропали куда-то. Мы с тобой одни остались  Спасибо за помощь. Я это всё понимаю. Просто на IXBT почитал, что небольшие программки (типа как примеры в книге) можно загрузить прямо в рам (для отладки). Да, наверное, для этого надо задать в компиляторе или линкере соответствующие адреса для стёка и переменных, чтобы они на программу не наложились... Но как это сделать? RV компилятор даже не имеет возможности задать стартовый блок памяти как RAM. Только FLASH. Так что непонятного ещё много... Насчёт записи программы в проц - из той-же книги - через утилиту Philips LPC2000 Flash Utility. Всё просто, как мне показалось. А у SAM7 другой загрузчик - SAM-BA. Я тоже пока чисто теоретизирую. Только не в Протеусе, а в симуляторе Кейла упражняюсь. Вещь кстати зверская - возможностей куча. По компилятору - я даже браться за GCC не буду. Есть ведь RV - один из лучших, вроде. Только освоить надо. RV сильно отличается от CARMа и, наверное, от GCC. Примеры для него есть в папке Микровижн: C:\Program Files\Keil\ARM\RV30\Examples\ Цитата(Alex_inventor @ Jan 27 2007, 18:48)  P.S. В некоторых проектах настолько очевидные ошибки, что становится понятно, что автор их никогда и не компилировал. Например использование putchar(), а #include<stdio.h> и в помине нету. Это возможно потому, что putchar() там у автора своя, и ей не нужна стандартная библиотека.
Сообщение отредактировал sonycman - Jan 27 2007, 18:08
|
|
|
|
|
Jan 27 2007, 18:17
|

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

|
Цитата(sonycman @ Jan 27 2007, 17:01)  я бы тоже был бы рад послушать спецов, только они последнее время все пропали куда-то. Очень хорошо варитесь в "собственном соку"  сами задаете, сами ищите, сами отвечаете... Это нормальный и правильный этап освоения нового. Когда вопросы станут с более неочевидными ответами и схлынет их критическая масса, думаю и помощь подоспеет.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 27 2007, 18:40
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(zltigo @ Jan 27 2007, 19:17)  Очень хорошо варитесь в "собственном соку"  сами задаете, сами ищите, сами отвечаете... Это нормальный и правильный этап освоения нового. Когда вопросы станут с более неочевидными ответами и схлынет их критическая масса, думаю и помощь подоспеет. Слава богу, мы не одни !  Скажите пожалуйста, MT-LINK будет работать с Keil uVision RealView ? Вроде должен через RDI драйвер? Если да, то я, наверное, закажу его на терраэлектронике...
|
|
|
|
|
Jan 27 2007, 19:20
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(zltigo @ Jan 27 2007, 20:11)  И на этот  вопрос несколько раз на этом форуме ответ был - через RDI - будет. Ответы на вопросы где взять RDI к MT-Link и как его зарегистрировать - тоже найдете на этом форуме  Это хорошо  Почти всё нашёл, кроме одного - нигде нет кряка для RDI. Почему-то все ссылки на него на Сахаре нерабочие. А в "своих" я пока не состою...  Если не трудно, отправте, плиз, на мой ящик этот rdikeygen - sonycman(собака)mail(тчк)ru Заранее спасибо
|
|
|
|
|
Jan 27 2007, 19:57
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Кстати, ещё одна ниточка в решение проблемы размещения в RAM. В файле определении регистров, в моём случае lpc210x.h, есть следующие строки: /* Vectored Interrupt Controller (VIC) */ #define VICIRQStatus (*((volatile unsigned long *) 0xFFFFF000)) #define VICFIQStatus (*((volatile unsigned long *) 0xFFFFF004)) #define VICRawIntr (*((volatile unsigned long *) 0xFFFFF008)) #define VICIntSelect (*((volatile unsigned long *) 0xFFFFF00C)) #define VICIntEnable (*((volatile unsigned long *) 0xFFFFF010)) #define VICIntEnClr (*((volatile unsigned long *) 0xFFFFF014)) #define VICSoftInt (*((volatile unsigned long *) 0xFFFFF018)) * * * Т.е. объявляются переменные-адреса. Volatile-по некоторым данным переменная находящиеся в энергозависимой памяти (т.е. RAM). Кто ни будь объяснит что это за синтаксис такой? И за чем его в данном случае применять. Есть предположение что это нужно компилятору для переразмещении адресов в случае разных типов памяти, RAM, FlASH, EXT RAM?
|
|
|
|
|
Jan 27 2007, 20:19
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(Alex_inventor @ Jan 27 2007, 20:57)  Есть предположение что это нужно компилятору для переразмещении адресов в случае разных типов памяти, RAM, FlASH, EXT RAM? Не совсем. Volatile чем-то похож на Const. Вот что я вычитал из своего нового справочника по C++: Квалификатор volatile сообщает компилятору, что значение переменной может изменяться неявно. Например, адрес глобальной переменной можно передать таймеру операционной системы и использовать его для отсчёта реального времени. В этом случае содержимое переменной изменяется без явного выполнения какого-либо оператора присваивания. Это очень важно, поскольку большинство компиляторов языка С/С++ автоматически оптимизируют некоторые выражения, считая, что значения переменных не изменяются, если они не указаны в левой части оператора присваивания и т.д. То есть к флешке и к оперативе эти адреса не имеют никакого отношения. Это адреса регистров периферии, и volatile стоит, видимо, для того, чтобы компилятор не наделал ошибок при оптимизации кода.
|
|
|
|
|
Jan 27 2007, 20:40
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Столкнулся с проблемой. Есть например в проекте два файла (one.c , two.c). В one.c присоединяю файл определений lpc2xxx.h и two.c. Так вот во время компиляции определения файла lpc2xxx.h не видны в файле two.c. C функциями та же проблема. Когда работал с AVR, проблемы не было. Надо было только порядок подключаемых файлов соблюсти. Т.е. если в файле используется какая то функция другого файла, то тот другой файл должен быть присоединен раньше. Компилятор (RealViwe)
|
|
|
|
|
Jan 27 2007, 20:59
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
2 sonycman Спасибо за разъяснение, хотя не совсем понятно. Нет, этo: [/quote] , для того, чтобы компилятор не наделал ошибок при оптимизации кода. [/quote] мне понятно. Но я не могу понять где компилятор может напортачить. Const и в Африке const. Конечно, если написать x=2+3, то компилятор соптимизирует в x=5. Но если мы напишем adr+5, и компилятор соптимизирует, ведь это не будет являться ошибкой. Похоже это фичи С++. Я знаю только С. Пока писал осенило! Только обратил внимание, что это типичное объявление #define, причём здесь переменная? Созрел вопрос к нашим гуру: А почему в определениях адресов регистров используется такой экзотический способ, а не банальное #define? Или этот вопрос не достоин Вас? Ну тогда извините
|
|
|
|
|
Jan 27 2007, 22:15
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
2sonycman Давай для точности, разберёмся с определениями. Есть тип константа. Есть тип указатель. Есть макрос #define. В первом случае резервируется регистр (или кусочек RAM) и заносится туда значение (если мы проинитим, если нет то вообще смысл в const теряется). Пример const x=5, если x компилятор назначит R0, то выражение y=x; равносильно y=R0.(вообще не понимаю использования типа const, просто так регистр теряем, разве что на размере программ с экономим, если загрузка числа во flash будет больше чем загрузка из R0). С типом указатель всё понятно. В общих чертах штука “локальная”. Тип #define это макрос. #define x 1 везде, где будет встречаться =x, будет явно =1. Адреса всей периферии фиксированные значения поэтому define использовать само то.
по-моему здесь допущена логическая ошибка: …Смотри: допустим, мы читаем данные из регистра статуса VIC через обычный, не-volatile указатель. Потом идут какие-то действия. И тут нам снова надо обратиться к этому регистру. Так вот - компилятор не будет повторно обращаться к регистру периферии, а использует уже прочитанное до этого (и сохранённое в одном из регистров CPU) значение…. Это будет выглядить примерно так: Int *adr; //создаём указатель на переменную типа int *adr=&x; //присваиваем переменной адрес x y=*adr; //присвоить у=x z=*adr; // здесь, судя по твоим размышлениям будет z=y, что не верно. Если использовать ссылку то будет загружено значение, на которое указывает ссылка, на то она и ссылка, а не по-другому. Или я не прав? Опять же, в упор не пойму использование ссылок на регистры. Хотя выражение: #define VICIRQStatus (*((volatile unsigned long *) 0xFFFFF000)) гибрид какой-то, не то ссылка, не то константа, не то число?
|
|
|
|
|
Jan 27 2007, 22:34
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
2Alex_inventor Давай  Const - запрешает любые операции по изменению значения переменной. То есть это уже не переменная - это константа, определённая раз и навсегда. #define - это вроде не макрос, а команда присвоения значения, как EQU в ассемблере. Цитата y=*adr; //присвоить у=x z=*adr; // здесь, судя по твоим размышлениям будет z=y, что не верно. Мы ведь говорим об ОПТИМИЗАЦИЯХ компилятора! Поэтому верхнее выражение будет вернее всего после компиляции таким: LDR R0, [PC, #20] - грузим указатель LDR R1, [R0] - грузим у MOV R2, R1 - грузим z так как указатель один и данные по этому указателю равны (!), какой смысл тратить драгоценные такты на повторное обращение к памяти? А вот именно volatile не даст сгенерить такой код. Я это так понимаю  Цитата #define VICIRQStatus (*((volatile unsigned long *) 0xFFFFF000)) гибрид какой-то, не то ссылка, не то константа, не то число? Там просто указатель на указатель на беззнаковое 32 битное значение  В памяти будет находиться 32 битное слово со значением 0xfffff000, которое при вызове будет загружено в регистр процессора, после чего он считает данные, на которые будет указывать этот регистр: LDR R0, [PC, #100] - R0 = 0xfffff000 (считано с адреса [PC+8+100]) LDR R1, [R0] - а теперь читаем периферию.
Сообщение отредактировал sonycman - Jan 27 2007, 22:48
|
|
|
|
|
Jan 27 2007, 23:55
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
Если быть точным, то EQU-это директива компилятора. Вводит названия для чисел. Например pi EQU 3.14. #DEFINE это макрос(по крайней мере в RealView). Команда для macro-процессора. Выполняется перед компиляцией. Чем отличается? В макрос можно передавать данные. Например #define sum(x,y) x+y превратится в inline функцию. Если использовать #defne x 3 то она будет эквивалентно EQU. Если использовать #define x 100+300+200 то это тоже превратится в EQU. Я макрос использовал в подпрограмме delay. Класно получилось. Выложу проект когда разберусь с проблемой распределения имён между файлами. Весь прикол в const, то что это как раз переменная. Кто сказал, что переменная не может быть константой? Есть же старый новый год  Под константу резервируете память и туда заносится значение. И объявление соответствующее const int x. А в программе, где нужна константа, вставляется не конкретное значение, а эта переменная. Косвенная адресация какое-то. Блин, мозги пухнут когда пытаюсь разобраться в это путанице. Ладно, попробуем. Int y,z; зарезервирует 2 регистра в банке, например R1,R2 (Кстати в CodeVision компилятор в комментариях указывал какие регистры он резервирует, очень удобно. Я этим постоянно пользовался когда в С вставке на asm вставлял) Int *adr; зарезервирует переменную в банке регистров, ну например R0 y=*adr; превратится в LDR R1, [R0] если сразу за этим будет x=y, всё будет корректно (правда смысла нет). Рассмотрим если между операторами будет ещё что ни-будь. Ну например: y=*adr; LDR R1, [R0] y=0; MOV R1, 0 x=*adr; LDR R2, [R0] Цитата так как указатель один и данные по этому указателю равны (!) Вообщем компилятор не знает равны там данные или нет. Ведь указатель это переменная. Мы можем занести любой адрес. Тогда получается, что любой адрес будет одинаковым, неверно, хотя реально!  Давай пофантазируем (да и посмеёмся  ) где здесь может компилятор соптимизировать. Допустим это константный указатель (который нельзя изменить) на константу. Тогда вместо косвенной загрузки LDR R1, [R0] будет вставлено уже вычисленное выражение, например MOV R1, 5. Хотя какая это оптимизация? Ну я незнаю тогда… И ещё тут просто причин нет для оптимизации. Ведь при присвоении значению х по указателю, не превращает x в указатель. Короче говоря истина рождается в спорах. Подискутируем, может найдём верный ответ. Цитата Там просто указатель на указатель на беззнаковое 32 битное значение В памяти будет находиться 32 битное слово со значением 0xfffff000, А где в памяти? Т.е. банальное const. Смысл использования которого я подвергал под сомнение выше. Тогда написали бы const int 0x123456. Да и указатель ли это? Внутри звёздочка справа стоит, для указателей слева ставится. Жду замечаний.
Сообщение отредактировал Alex_inventor - Jan 27 2007, 23:58
|
|
|
|
|
Jan 28 2007, 00:19
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
2Alex_inventor Можно тебя спросить, как давно ты начал программить на С?  Цитата Внутри звёздочка справа стоит, для указателей слева ставится. Вторая звёздочка тоже стоит слева от значения - (volatile unsigned long *) 0xFFFFF000 Это называется приведение типов (cast).  Цитата Вообщем компилятор не знает равны там данные или нет. Знает. В этом состоит суть оптимизации кода при компиляции. Цитата Ведь при присвоении значению х по указателю, не превращает x в указатель. Зато перед этим надо загрузить этот самый указатель из памяти. Цитата В памяти будет находиться 32 битное слово со значением 0xfffff000, А где в памяти? Да где угодно, это не важно, я просто пример привёл. Начни отлаживать любой проект в дебаггере - посмотри, откуда грузится в PC вектор RESET. Цитата Т.е. банальное const. Смысл использования которого я подвергал под сомнение выше. Тогда написали бы const int 0x123456. Ты лучше тогда почитай любую книжку по С, раз я не могу объяснить...
Сообщение отредактировал sonycman - Jan 28 2007, 00:20
|
|
|
|
|
Jan 28 2007, 02:46
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
На С работаю около года. Исключительно на микроконтроллерах. До этого программировал на asm. Прошёл путь PIC, MSK-51, AVR, вот теперь очередь до ARM дошла. Теперь по существу. (*((volatile unsigned long *) 0xFFFFF000)) volatile unsigned long * *((volatile unsigned long *) 0xFFFFF000) Я убрал парные скобки чтоб до звёздочек добраться и где звёздочки находятся? Цитата Это называется приведение типов (cast). Что такое приведение типов я прекрасно знаю. Перечитал главу в K&R (2.7 Преобразование типов.) Вырезки приводить не буду, но звёздочек там не встречал. Что такое cost прочитал впервые. Никогда не пользовался по причине слишком специфичности данной операции. Выражение (unsigned long ) 0xFFFFF000 есть пример cost. Но что делает звезда справа, и что на самом деле volatile обозначает? И зачем для адреса применять тип long(64bit), или в RealViwe long(32bit)? Цитата Знает. В этом состоит суть оптимизации кода при компиляции. Как компилятор может знать заранее значение переменной, на которое указывает указатель? Или мы друг друга не понимаем? Я много раз видел, как и что оптимизирует компилятор (я говорю про оптимизацию по размеру кода). Общие принципы оптимизации по пальцам пересчитать можно. Основная оптимизация это создание массива одинаковых кодовых последовательностей. И прыгание туда и обратно из программы. Далее идёт заранее вычисление выражений, которые можно просчитать до компиляции, в такие выражения не входят переменные, оптимизация сокращения кода, результаты которого одни и теже. Например r0=1; r0=1; Такая ситуация часто встречается при инициализации периферии в которой, в качестве защиты сделана необходимость дважды занести значения в регистр. В таких случаях выключают оптимизацию перед выражением и включают после. Ну и рискованный тип оптимизации, и как правило редко применяющейся, замена блоков кода, который по мнению компилятора выполняет определённый алгоритм, другим, оптимизированным, блоком кода выполняющий тот же алгоритм. Ни один из этих видов оптимизации не должен исказить загрузку по ссылке. Если я не прав приведите пример. Обсудим. Привожупример дизассемблера: LDR PC, Reset_Addr Reset_Addr DCD Reset_Handler Теперь становится понятно. Это особенности инструкции LDR. Она неможет включать в себя число, ну например как в AVR сделано – если идёт загрузка данных, то следующий за инструкцией байт это байт данных. LDR косвенно загружает регистр PC используя метку Reset_Addr, которая указывает на директиву резервирования и инициализации памяти DCD которая заносит число Reset_Handler которое проинициализировано EQU . Во какая цепочка! Самое интересное, что я давно обратил внимание на такое странное кодирование. А выражение (*((volatile unsigned long *) 0xFFFFF000)) это и делает. Но сама запись сбивает с толку. Я бы написал так flash int adr 123, ну или const int adr 123. В данном случае const уместна. Я же говорил в спорах рождается истина  . Цитата Ты лучше тогда почитай любую книжку по С, раз я не могу объяснить... Да читал я книжки по С. Но я не читаю их от корки до корки (как например худ. литературу) по причине другого подхода. Я читаю те главы, которые мне нужны в данный момент. И обсуждаемую книгу я не прочитал. Прочитал главы общей архитектуры, инициализация, UART. Сейчас пишу проект с UART. В принципе написал. Всё работает за исключением некоторых мелочей. По мере появления вопросов читаю новые главы. Сейчас буду осваивать прерывания, ну и читать про них. Буду постепенно наращивать проект, пока не подключу всю периферию. Всем
|
|
|
|
|
Jan 28 2007, 03:22
|

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

|
Цитата(Alex_inventor @ Jan 28 2007, 01:46)  (*((volatile unsigned long *) 0xFFFFF000)) Но что делает звезда справа, и что на самом деле volatile обозначает? Дословно *(unsigned long *) 0xFFFFF000 означает "значение типа unsigned long, на которое указывает указатель, содержащий адрес 0xFFFFF000". Или, что тождественно, "значение типа unsigned long, находящееся по адресу 0xFFFFF000". volatile заставляет компилятор при упоминании этого значения каждый раз считывать его заново, а не использовать сохраненное где-то считанное ранее значение. Цитата(Alex_inventor @ Jan 28 2007, 01:46)  Как компилятор может знать заранее значение переменной, на которое указывает указатель? Или мы друг друга не понимаем? Если он это значение недавно прочитал, и сам с тех пор не менял, то вправе предположить, что значение осталось неизменным и использовать сохраненное значение, экономя такты и/или код на повторном обращении к памяти. Цитата(Alex_inventor @ Jan 28 2007, 01:46)  В данном случае const уместна. const была приведена только как пример модификатора объявления переменной. С volatile const никак не связан, они существуют отдельно сами по себе. Цитата(Alex_inventor @ Jan 28 2007, 01:46)  Я читаю те главы, которые мне нужны в данный момент. Ну хотя бы по диагонали остальные просмотреть стоит. Чтобы понять, в каких главах есть что-то для Вас новое и, следовательно, какие главы стоит просмотреть внимательнее. Я, например, сочетаю этот подход с другим - если мне что-то не понятно, читаю дальше. Потом возвращаюсь в начало и читаю снова. После двух прочтений в голове начинает формироваться некоторая картина, которая после трех-четырех приобретает осмысленные формы.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 28 2007, 03:37
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
2Alex_inventor Я пробовал программить только PIC и AVR.  Иногда на персоналке что-нибудь мелкое стряпаю. Теперь вот тоже ARM захотелось пощупать  Цитата Сейчас буду осваивать прерывания, ну и читать про них. Буду постепенно наращивать проект, пока не подключу всю периферию. Это ты всё в Протеусе делаешь? Кстати, чем планируешь отлаживать девайс? Каким аппаратным дебаггером? Я вот думаю MT-Link заказать, но кряка для RDI драйверов под Keil нигде не могу найти  2Сергей Борщ Спасибо за помошь  Сколько у ARMов регистров управления портами ввода-вывода ! Штук двадцать, наверное! Для каждой функции один для установки битов, другой для снятия, третий для статуса. Пока все аббревиатуры запомнишь !  Разъясните, плиз, по прерываниям: при возникновении какого-либо прерывания (FIQ или IRQ), по заданному вектору проц перенаправляется на процедуру обработки. Это понятно. А при выходе из обработчика это прерывание разрешается автоматически, или это надо делать самому? И, если программа пользователя работала в THUMB режиме, то будет ли корректно восстановлен этот режим при выходе из обработчика? Имею ввиду, заложены ли эти механизмы аппаратно в ядро, или это всё надо делать ручками перед выходом из обработчика прерывания?
Сообщение отредактировал sonycman - Jan 28 2007, 04:09
|
|
|
|
|
Jan 28 2007, 04:40
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
2 Сергей Борщ Цитата Ну хотя бы по диагонали остальные просмотреть стоит. А я и не отрицал этого. Разумеется я просматриваю подробно оглавление и мельком каждую главу. Это необходимое условие что бы иметь общее представление и возможность ориентации. По-другому никак. Иначе как оперативно найти нужные ответы? Углубленно изучаю только необходимые в данный момент главы. Вообщем как справочник. Цитата С volatile const никак не связан, они существуют отдельно сами по себе. Объясните мне в чём такая принципиальная разница? Хотябы небольшая? Цитата volatile заставляет компилятор при упоминании этого значения каждый раз считывать его заново, а не использовать сохраненное где-то считанное ранее значение. Зачем это делать? Какое сохранение времени, тиков? Чтение из flash одна инструкция процессора (LDR PC, Reset_Addr) Цитата а не использовать сохраненное где-то считанное ранее значение. Как это понимать? Если мы присвоим x=*adr, то что компилятор будет наивно полагать что переменная х никогда не изменится и будет использовать её как источник адреса? Хотя выигрыша мы не получим, нельзя оптимизировать одну инструкцию процессора, если не выкинуть её вообще. Извините, если кому-то покажется агрессивным стиль написание, так получилось. Цитата Дословно *(unsigned long *) 0xFFFFF000 означает "значение типа unsigned long, на которое указывает указатель, содержащий адрес 0xFFFFF000". Или, что тождественно, "значение типа unsigned long, находящееся по адресу 0xFFFFF000". Ну если быть точным, насколко я понял, то выражение полностью выглядит так: #define VICIRQStatus (*((volatile unsigned long *) 0xFFFFF000)) и означает определение метки VICIRQStatus которое указывает на облость памяти с константой u long имеющую значение 0xFFFFF000. Обращаю особое внимание на слова МЕТКИ, а не указателя. Метка это число, таже константа и менятся не может, а указатель это переменная и может указывать на что угодно в любой момент времени, смотря сто занесёшь туда. Цитата Если он это значение недавно прочитал, и сам с тех пор не менял, то вправе предположить, что значение осталось неизменным и использовать сохраненное значение, экономя такты и/или код на повторном обращении к памяти. Дело в том, что компилятор не может недавно прочитать значение по ссылке . Ссылка это переменная. Недавно прочитать может только работающая программа. Когда компилятор уже давно сделал сваи дела и гордо удалился. В общем, подвожу итог: структура define VICIRQStatus (*((volatile unsigned long *) 0xFFFFF000)) разложена по полочкам, стала понятна, появилась осмысленная возможность её использование. Хотя некоторые аспекты так и не объяснены (например, расположение звезды справа).
|
|
|
|
|
Jan 28 2007, 05:16
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744

|
2sonycman А у тебя proteus есть? Ты им когда-нибудь пользовался? Если нет, то не видел счастья в жизни!!! Хотя я тебя не виню, если это так. Сам случайно начал им пользоваться. Хотя в протеусе глюк на глюке и глюком погоняет, но всё равно это сказочная среда!!! Нужно просто ожидать от неё то, что она может тебе дать. Аналогов даже приблизительных у неё нет!!! Вобщем если никогда не пользовался, то опишу кратко. Перед тобой экран на котором ты строишь электрическую схему. Интерфейс максимально интуитивно понятный, и максимально удобный. Короче ставишь проц. Там есть Philips 5 видов. Указываешь адрес прошивки, нажимаешь симуляцию… и вот тебе счастье!!! При этом на ноги навешиваешь куча разноцветных светодиодов, lcd всех видов, подключаешь к процу реальный COM компа и туда подключаешь железо, т.е твой виртуальный проц управляет реальным железом!!! Я так делал круто!!! Та же история и с LPT. Далее подключаешь виртуальный COM (который появляется в системе) и твоя прога на С++ подключившись к этому COM общается с процом. Далее подключаешь Несколько виртуальных терминалов. Ставишь микросхемы I2C, SPI, MMC на все шины вешаешь мониторы(типа отлеживать активность в текстовом виде по I2C) Включаешь виртуальные самописцы, осциллографы, вольтметры, амперметрыб подключаешь громкоговоритель и у тебя на звуковую карту выводится фигня с контроллера или куда ты там подключишь вывод. Ставишь ещё кучу контроллеров AVR, PIC, MSK-51, в каждом своя прошивка, подключаешь кучу микросхем жёсткой логики, ставишь кучу аналоговой логики (транзисторы, резисторы, конденсаторы и т.д.) И всё это без единой строчки писанины, выбираешь элемент и ставишь, ставишь, СТАВИШ!!!  Картина РЕПИНА! Короче нажимаешь пуск и балдеешь от происходящей какофонии!  И это малая возможность, что может среда. Стоит ли говорить, если она поддерживает эмуляцию десятка тысяч элементов. Там есть даже таки прикольные элементы как сенсорная ЖК панель 640x480. Там в примерах есть проект, где на АРМе и этой панели шахматы сделаны. Я играл, прикольно. Я выиграл  Правда машину надо мощную иметь. У меня 2.8Г шина 533МГ и то не хватает в некоторых случаях. Я куски кода только в нём отлаживаю, а потом в железо программирую, и как нистранно, сразу всё работает, без отладки!
|
|
|
|
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|