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

 
 
 
Reply to this topicStart new topic
> Демо-программа ултразвукового дальномера на базе MSP430F413
earth_planet
сообщение Jan 6 2009, 01:14
Сообщение #1





Группа: Новичок
Сообщений: 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) "
Go to the top of the page
 
+Quote Post
SSerge
сообщение Jan 6 2009, 09:30
Сообщение #2


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Директива RSEG - это определение сегмента, DS - размещение в этом сегменте данных (резервирование под них места).
Дело в том, что ассемблер или С-компилятор не занимаются сами распределением данных или команд по адресному пространству, а просто помещают их в несколько разных независимых друг от друга разделов, сегментов.
Окончательно собирает их все вместе и назначает конкретные физические адреса уже линкер.
Какие есть сегменты, в каком порядке их разместить в памяти и прочее нужно объяснять линкеру. Это делается либо параметрами в командной строке линкера, либо описывается в специальном файле с расширением .xcl
В Вашем случае программист описал в своей программе на ассемблере сегмент с именем UDATA0, но в файле .xcl описания этого сегмента нет, вот линкер и не знает что с ним делать.

Ничего не поделаешь smile.gif, придётся Вам читать документацию на компилятор и линкер, там вся эта кухня описана.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
rvk
сообщение Jan 6 2009, 09:58
Сообщение #3


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

Группа: Свой
Сообщений: 165
Регистрация: 13-05-06
Из: Камышин
Пользователь №: 17 067



Попробуйте вот так
RSEG UDATA0:DATA:NOROOT(0)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 6 2009, 10:28
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
earth_planet
сообщение Jan 6 2009, 11:36
Сообщение #5





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
rvk
сообщение Jan 6 2009, 12:47
Сообщение #6


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

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
earth_planet
сообщение Jan 6 2009, 13:09
Сообщение #7





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
rvk
сообщение Jan 6 2009, 13:18
Сообщение #8


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

Группа: Свой
Сообщений: 165
Регистрация: 13-05-06
Из: Камышин
Пользователь №: 17 067



Ага, попробуйте разместить его после ORG 0200h например
А еще лучше ссылку на программу в исходниках, чтобы можно было
попробовать скомпилировать. Если конечно это возможно.

Сообщение отредактировал rvk - Jan 6 2009, 13:23
Go to the top of the page
 
+Quote Post
earth_planet
сообщение Jan 6 2009, 13:36
Сообщение #9





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



Цитата(rvk @ Jan 6 2009, 16:18) *
Ага, попробуйте разместить его после ORG 0200h например
А еще лучше ссылку на программу в исходниках, чтобы можно было
попробовать скомпилировать. Если конечно это возможно.

нет, не помагло;
я тут нашёл код с русскими комментами: Прикрепленный файл  main.txt ( 16.51 килобайт ) Кол-во скачиваний: 227
Go to the top of the page
 
+Quote Post
rvk
сообщение Jan 6 2009, 13:57
Сообщение #10


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

Группа: Свой
Сообщений: 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
 
Go to the top of the page
 
+Quote Post
earth_planet
сообщение Jan 6 2009, 14:26
Сообщение #11





Группа: Новичок
Сообщений: 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
даже не знаю как ей воспользоваться...
Go to the top of the page
 
+Quote Post
rvk
сообщение Jan 6 2009, 15:04
Сообщение #12


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

Группа: Свой
Сообщений: 165
Регистрация: 13-05-06
Из: Камышин
Пользователь №: 17 067



Цитата(earth_planet @ Jan 6 2009, 17:26) *
да, конечно

даже не знаю как ей воспользоваться...

Точно, моя вина. Вот новый файл, прошивка в формате intel_hex. Точно.
Шьется любым флеш программатором. Второй вариант, поставить в опциях Linker
intel_extended.изменить по минимуму Ваш проект, чтобы он только скомпилировался.
И после компиляции подменить в каталоге Exe скомпилированный файл, на тот,
что прикреплен. Конечно его нужно переименовать в Ваш. После чего нажать Debug и
IAR зальет его в процессор.
Прикрепленные файлы
Прикрепленный файл  project_a43.rar ( 826 байт ) Кол-во скачиваний: 44
 
Go to the top of the page
 
+Quote Post
earth_planet
сообщение Jan 6 2009, 16:43
Сообщение #13





Группа: Новичок
Сообщений: 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 поставить ?
Go to the top of the page
 
+Quote Post
rvk
сообщение Jan 6 2009, 21:08
Сообщение #14


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

Группа: Свой
Сообщений: 165
Регистрация: 13-05-06
Из: Камышин
Пользователь №: 17 067



Скачайте IAR v4.20.1 с официального сайта http://supp.iar.com/Download/SW/?item=EW430-EVAL.
В прикрепленном файле проект, для этой версии, компилируется нормально.
Прикрепленные файлы
Прикрепленный файл  main.rar ( 23.34 килобайт ) Кол-во скачиваний: 46
 
Go to the top of the page
 
+Quote Post
earth_planet
сообщение Jan 15 2009, 16:44
Сообщение #15





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



Цитата(rvk @ Jan 7 2009, 00:08) *
Скачайте IAR v4.20.1
Действительно, проблема решилась обновлением IAR; отдельно Спасибо rvk за помощь в вопросе;
Go to the top of the page
 
+Quote Post

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

 


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


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