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

 
 
> Keil + LPC1768, начальный пример., Быстрый переход с 8-бит МК на 32
xgcyo
сообщение Dec 3 2010, 15:31
Сообщение #1





Группа: Участник
Сообщений: 8
Регистрация: 9-07-09
Из: Рига, Латвия
Пользователь №: 51 080



Здравствуйте, недавно приобрёл с плату с МК lpc1768, на которой имеется периферия, дисплей и отдельный МК, который выполняет функции программатора/дебаггера Jlink. До этого работал с AVR и MSP430.
Поставил Keil, открыл проект из папки примеров. Затем откомпилировал и запустил. Всё прошилось и запустилось, светодиоды замигали. Поставил брэкпойнт, дебаггер остановил выполнение программы. Переменные и регистры МК отображались. Всё отлично. Затем я решил подробнее рассмотреть исходный код.

1. Увидел, что в файлах .c подключаются ассемблерные файлы .s при помощи директивы #include, как я понял это фича Keilа. В аnsi C так делать нельзя, нужно скомпилить asm файл, добавить появившийся обьектный файл к линкеру, затем в .c файле указать вызываемую функцию с аттрибутом external. Ассемблерный файл лежал в директории проекта примера.
Вопрос: Если я создаю новый проект, где мне взять этот ассемблерный файл? Я могу скопировать из папки примера, но что будет, если требуется написать для гипотетического lpc17692?

2. Посмотрел как декларируются функции, обрабатывающие прерывания. Ссылки на адреса этих функций находятся в ассемблерном файле.
Вопрос: Можно ли мне создать проект, но не использовать ассемблерные файлы вообще? Если да, то как объявить функцию, обрабатывающую прерывание?

3. Данные ацп отсылаются в уарт посредством вызова функции printf. LPC1768 имеет как минимум 4 уарта. Код инициализации уарта имеется, но вот в какой из них пишет printf по исходникам примера не понять.
Вопрос: Как задать конкретный уарт, в который пишет функция printf? Как мне сделать так, чтобы во время выполнения программы, printf в зависимости от моих потребностей printf писал бы в 4-ый уарт, затем в 1-ый, затем в софтварный, затем в программный буффер, затем в усб порт?

4. Литературы на русском по Keilу нет, и по Соrtex-M3 архитектуре тоже нет. Есть всего одна книжка на английском: "The definitive guide to the arm cortex-m3". В стране полным ходом развиваются нанотехнологии, а книжек по современным МК нет. Неужели государство не может выделить 5-10 тыс. у.е. на написание книги. Пусть хоть 100 тыс по смете будет, но мне книга по кортексам нужна, а не словарь нанотерминов.
Вопрос: Какая есть литература на русском, и какие ещё есть книги на английском?

5. LPC1768 очень неплохой микроконтроллер за те деньги, которые за него просят. Нужно устройство, которое принимает данные по усб, записывает их во внешний флэш объёмом 1ГБайт, затем подключается при помощи модуля к вайфай сети и отсылает "нужные" данные. Все сохранённые во флеше данные отображаются на дисплее, а "нужные" выбираются при помощи тачскрина. Т.е. нужно отрисовывать графические элементы и обрабатывать сигналы тачскрина.
Вопрос: На что мне нужно обращать внимание и на что не нужно, чтобы сделать такое устройство и чтобы не убить на это слишком много времени? Под словами "слишком много" понимается время, через которое появится новое поколение МК, а сабжевые устареют и/или заметно (их) поднимут(ся) в цене.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
esaulenka
сообщение Dec 7 2010, 16:32
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(xgcyo @ Dec 3 2010, 18:31) *
1. Увидел, что в файлах .c подключаются ассемблерные файлы .s при помощи директивы #include, как я понял это фича Keilа.

Покажите, пожалуйста. Что-то я такой фичи не помню.

Цитата(xgcyo @ Dec 3 2010, 18:31) *
Вопрос: Если я создаю новый проект, где мне взять этот ассемблерный файл? Я могу скопировать из папки примера, но что будет, если требуется написать для гипотетического lpc17692?

Взять здесь C:\Keil\ARM\Startup\ или прочитать доку и написать самостоятельно, "по мотивам".


Цитата(xgcyo @ Dec 3 2010, 18:31) *
2. Посмотрел как декларируются функции, обрабатывающие прерывания. Ссылки на адреса этих функций находятся в ассемблерном файле. Вопрос: Можно ли мне создать проект, но не использовать ассемблерные файлы вообще? Если да, то как объявить функцию, обрабатывающую прерывание?

В принципе, как я понимаю, на кортексах это сделать можно.
Другой вопрос, что готовых примеров в комплекте с кейлом нет. Можно ли это сделать с компилятором кейла, я не думал. Наверное, да.
Но мне не очень понятно, чем Вам этот ассемблерный стартап не нравится. В стандартных случаях туда ничего не надо писать руками - внимательно прочитать, расставить галочки, потом ещё раз прочитать, и всё.

Цитата(xgcyo @ Dec 3 2010, 18:31) *
Код инициализации уарта имеется, но вот в какой из них пишет printf по исходникам примера не понять.

Повнимательнее изучите
C:\Keil\ARM\Examples\Hello\ в части retarget.c

Цитата(xgcyo @ Dec 3 2010, 18:31) *
Нужно устройство, которое принимает данные по усб, записывает их во внешний флэш объёмом 1ГБайт, затем подключается при помощи модуля к вайфай сети и отсылает "нужные" данные.

Вы модуль вайфай уже подобрали? У нас как-то год назад задачу смотрели (неактивно, правда, нашим изделиям вайфай - как пятая нога), толком ничего не нашли.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Dec 8 2010, 05:31
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Цитата
Вы модуль вайфай уже подобрали? У нас как-то год назад задачу смотрели (неактивно, правда, нашим изделиям вайфай - как пятая нога), толком ничего не нашли.

Телит реально поставить. Дороговато, но просто и доступно.
Go to the top of the page
 
+Quote Post
vallav
сообщение Dec 9 2010, 14:40
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(xgcyo @ Dec 3 2010, 18:31) *
1. Увидел, что в файлах .c подключаются ассемблерные файлы .s при помощи директивы #include, как я понял это фича Keilа. В аnsi C так делать нельзя, нужно скомпилить asm файл, добавить появившийся обьектный файл к линкеру, затем в .c файле указать вызываемую функцию с аттрибутом external. Ассемблерный файл лежал в директории проекта примера.
Вопрос: Если я создаю новый проект, где мне взять этот ассемблерный файл? Я могу скопировать из папки примера, но что будет, если требуется написать для гипотетического lpc17692?

Это файл стартапа, в котором специфика данного камня.
Он присутствует в списке файлов проекта.
Можете его взять оттуда в свой проект.

Цитата(xgcyo @ Dec 3 2010, 18:31) *
2. Посмотрел как декларируются функции, обрабатывающие прерывания. Ссылки на адреса этих функций находятся в ассемблерном файле.
Вопрос: Можно ли мне создать проект, но не использовать ассемблерные файлы вообще? Если да, то как объявить функцию, обрабатывающую прерывание?

В стартапе они объявлены с опцией weak.
То есть в сишном файле объявляете и определяете свою функцию с тем же именем.
Линкер про функцию с опцией weak забудет и будет пользовать Вашу.
А не объявите, будет пользовать функцию с опцией weak.

Цитата(xgcyo @ Dec 3 2010, 18:31) *
Под словами "слишком много" понимается время, через которое появится новое поколение МК, а сабжевые устареют и/или заметно (их) поднимут(ся) в цене.


Так уже поднимаются.
На фарнелле LPC1765FBD100 год назад стоил 4.64 евро ( 10 шт ), сейчас остатки старых 5.69, а новые ( LPC1765FBD100,551 ) 9.02 ( 25 шт )
За год - в 2.5 раза.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 20:39
Рейтинг@Mail.ru


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