|
|
  |
Демо-программа ултразвукового дальномера на базе MSP430F413 |
|
|
|
Jan 6 2009, 01:14
|
Группа: Новичок
Сообщений: 7
Регистрация: 6-01-09
Пользователь №: 42 944

|
Здравствуйте, я недавно начал разбираться с данным типом микроконтроллеров и у меня возникли вопросы в понимании кода программы, взятого с сайта разработчика; в самом начале программы:
RSEG UDATA0 htX100_msw: DS 2 htX100_lsw: DS 2
RSEG CSTACK DS 0 RSEG CODE
Буду очень благодарен, если кто-нибудь пояснит мне данный кусок кода.
P.S: кстати при сборке всей программы IAR выдаёт такую ошибку: " Fatal Error[e72]: Segment UDATA0 must be defined in a segment definition option (-Z, -b or -P) "
|
|
|
|
|
Jan 6 2009, 09:30
|
Профессионал
    
Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528

|
Директива RSEG - это определение сегмента, DS - размещение в этом сегменте данных (резервирование под них места). Дело в том, что ассемблер или С-компилятор не занимаются сами распределением данных или команд по адресному пространству, а просто помещают их в несколько разных независимых друг от друга разделов, сегментов. Окончательно собирает их все вместе и назначает конкретные физические адреса уже линкер. Какие есть сегменты, в каком порядке их разместить в памяти и прочее нужно объяснять линкеру. Это делается либо параметрами в командной строке линкера, либо описывается в специальном файле с расширением .xcl В Вашем случае программист описал в своей программе на ассемблере сегмент с именем UDATA0, но в файле .xcl описания этого сегмента нет, вот линкер и не знает что с ним делать. Ничего не поделаешь  , придётся Вам читать документацию на компилятор и линкер, там вся эта кухня описана.
--------------------
Russia est omnis divisa in partes octo.
|
|
|
|
|
Jan 6 2009, 10:28
|

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

|
Цитата(rvk @ Jan 6 2009, 11:58)  Попробуйте вот так RSEG UDATA0:DATA:NOROOT(0) И к чему это должно привести? Линкер английским языком пишет - не знаю куда разместить данные сегмента UDATA0. Ему надо указать адреса в скрипте (.xcl). Для этого надо открыть .xcl, посмотреть как объявлены другие сегменты и добавить в нужное место UDATA0. А вы предлагаете вместо этого сказать ему через ассемблер "ну это же, типа, сегмент с данными, и если эти данные не используются, место под них можно не выделять". Где тут указание адресов, которые нужны линкеру?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 6 2009, 11:36
|
Группа: Новичок
Сообщений: 7
Регистрация: 6-01-09
Пользователь №: 42 944

|
Цитата(rvk @ Jan 6 2009, 12:58)  Попробуйте вот так RSEG UDATA0:DATA:NOROOT(0) такое объявление не помагло; нашёл в файле asm_segments430.h следующую строчку " #define UDATA0 DATA16_Z ", В файле lnk430F417.xcl (в моём случаи) " -Z(DATA)DATA16_I,DATA16_Z,DATA16_N,HEAP+_HEAP_SIZE=0200-05FF ", в соответствии с описанием в заголовке данного файла: // segment address range usage // ------- ------------- -------------------------- // DATA16_I 0200-05FF Initialized variables // DATA16_Z 0200-05FF Zero initialized variables т.е сегмент определён, просто этот файл (asm_segments430.h) не привязан, или как это можно понимать ?....
Сообщение отредактировал earth_planet - Jan 6 2009, 11:41
|
|
|
|
|
Jan 6 2009, 12:47
|
Частый гость
 
Группа: Свой
Сообщений: 165
Регистрация: 13-05-06
Из: Камышин
Пользователь №: 17 067

|
Цитата(earth_planet @ Jan 6 2009, 14:36)  нашёл в файле asm_segments430.h следующую строчку " #define UDATA0 DATA16_Z ", В файле lnk430F417.xcl (в моём случаи) " -Z(DATA)DATA16_I,DATA16_Z,DATA16_N,HEAP+_HEAP_SIZE=0200-05FF ", Это значит, что программа не находит файл asm_segments430.h, самый простой путь, это просто заменить все UDATA0 на DATA16_Z: RSEG DATA16_Z htX100_msw: DS 2 htX100_lsw: DS 2 RSEG CSTACK DS 0 RSEG CODE
Сообщение отредактировал rvk - Jan 6 2009, 12:48
|
|
|
|
|
Jan 6 2009, 13:09
|
Группа: Новичок
Сообщений: 7
Регистрация: 6-01-09
Пользователь №: 42 944

|
Цитата(rvk @ Jan 6 2009, 15:47)  просто заменить все UDATA0 на DATA16_Z я уже так попробывал, вот результат: Цитата Error[e16]: Segment RESET (size: 0x2 align: 0x1) is too long for segment definition. At least 0x2 more bytes needed. The problem occurred while processing the segment placement command "-Z(CONST)RESET=FFFE-FFFF", where at the moment of placement the available memory ranges were "-none-" Reserved ranges relevant to this placement: ffe0-ffff INTVEC
|
|
|
|
|
Jan 6 2009, 13:36
|
Группа: Новичок
Сообщений: 7
Регистрация: 6-01-09
Пользователь №: 42 944

|
Цитата(rvk @ Jan 6 2009, 16:18)  Ага, попробуйте разместить его после ORG 0200h например А еще лучше ссылку на программу в исходниках, чтобы можно было попробовать скомпилировать. Если конечно это возможно. нет, не помагло; я тут нашёл код с русскими комментами:
main.txt ( 16.51 килобайт )
Кол-во скачиваний: 227
|
|
|
|
|
Jan 6 2009, 13:57
|
Частый гость
 
Группа: Свой
Сообщений: 165
Регистрация: 13-05-06
Из: Камышин
Пользователь №: 17 067

|
Цитата(earth_planet @ Jan 6 2009, 16:36)  нет, не помагло; я тут нашёл код с русскими комментами:
main.txt ( 16.51 килобайт )
Кол-во скачиваний: 227Все запросто компилируется без ошибок, процессор в проекте, свойствах выставили MSP430F413? Какой IAR используете. В прикрепленном файле прошивка в формате msp430.txt
Сообщение отредактировал rvk - Jan 6 2009, 14:52
Прикрепленные файлы
asm.rar ( 730 байт )
Кол-во скачиваний: 42
|
|
|
|
|
Jan 6 2009, 14:26
|
Группа: Новичок
Сообщений: 7
Регистрация: 6-01-09
Пользователь №: 42 944

|
Цитата(rvk @ Jan 6 2009, 16:57)  свойствах выставили MSP430F413? да, конечно Цитата Какой IAR используете Цитата Product Name: IAR Embedded Workbench KickStart for MSP430 Product Type: KickStart Target: EW430-KS License Number: Product Version: 3.40A Product Release Date: 2005-12-21 Product GUI Version: 4.0 Цитата В прикрепленном файле прошивка в формате hex даже не знаю как ей воспользоваться...
|
|
|
|
|
Jan 6 2009, 15:04
|
Частый гость
 
Группа: Свой
Сообщений: 165
Регистрация: 13-05-06
Из: Камышин
Пользователь №: 17 067

|
Цитата(earth_planet @ Jan 6 2009, 17:26)  да, конечно
даже не знаю как ей воспользоваться... Точно, моя вина. Вот новый файл, прошивка в формате intel_hex. Точно. Шьется любым флеш программатором. Второй вариант, поставить в опциях Linker intel_extended.изменить по минимуму Ваш проект, чтобы он только скомпилировался. И после компиляции подменить в каталоге Exe скомпилированный файл, на тот, что прикреплен. Конечно его нужно переименовать в Ваш. После чего нажать Debug и IAR зальет его в процессор.
|
|
|
|
|
Jan 6 2009, 16:43
|
Группа: Новичок
Сообщений: 7
Регистрация: 6-01-09
Пользователь №: 42 944

|
Цитата(rvk @ Jan 6 2009, 18:04)  Вот новый файл, прошивка в формате intel_hex. Шьется любым флеш программатором. Т.е прежде чем запустить свою программу я каждый раз должен ею прошивать контроллер ? Цитата(rvk @ Jan 6 2009, 18:04)  поставить в опциях Linker intel_extended.изменить по минимуму Ваш проект, чтобы он только скомпилировался. И после компиляции подменить в каталоге Exe скомпилированный файл, на тот, что прикреплен. Project-->Compile ?, компилируется, но никаких файлов не появляется в EXE; Project-->Rebuild All, вышеназванная ошибка; минимально изменить ?- не знаю как. Может лучше другую версию IAR поставить ?
|
|
|
|
|
Jan 6 2009, 21:08
|
Частый гость
 
Группа: Свой
Сообщений: 165
Регистрация: 13-05-06
Из: Камышин
Пользователь №: 17 067

|
Скачайте IAR v4.20.1 с официального сайта http://supp.iar.com/Download/SW/?item=EW430-EVAL. В прикрепленном файле проект, для этой версии, компилируется нормально.
Прикрепленные файлы
main.rar ( 23.34 килобайт )
Кол-во скачиваний: 46
|
|
|
|
|
Jan 15 2009, 16:44
|
Группа: Новичок
Сообщений: 7
Регистрация: 6-01-09
Пользователь №: 42 944

|
Цитата(rvk @ Jan 7 2009, 00:08)  Скачайте IAR v4.20.1 Действительно, проблема решилась обновлением IAR; отдельно Спасибо rvk за помощь в вопросе;
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|