Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR от новичка
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
proga
В универе мне дали задание самостоятельно изучить IAR для MSP430 . Я скачал данную программу с сайта ti.com (версия 4.0) . Затем создал новый проект (программу реализации часов реального времени с использованием таймера A ) . В режиме симуляции выполняю команду Build All для получения конечного программного кода. Однако выполнение данной программы прерывает ошибка :



Changed settings forces a full rebuild...
Rebuilding configuration: test - Debug
Updating build tree...

0 file(s) deleted.
Updating build tree...
RTC11x WD.s43
Linking
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

Total number of errors: 1
Total number of warnings: 0





При создании другого проекта происходит тоже самое. Буду очень благодарен тем кто подскажет в чём же состоит моя ошибка .
VAI
архив проекта приложите
proga
прилагаю :проект
АДИКМ
То что вы приложили это не проект а ассемблерные исходники.
Вообще ваша проблема кроется в настройках опий проекта.
Project-Option-Linker-Config- здесь надо поставить галку Override defualt program entry (Defined by application).

Прилагаю готовый проект, который создан в ИАР 3.30A

Кстати не забудьте в опициях проекта правильно указвывать тип используемого процессора.

P.S. файла не прикрепляется. Положил сюда. http://upload.caxapa.ru/clock.zip
//Nikson
У меня тож проблемка, даже стыдно новую тему заводить smile.gif

Разбил программу на несколько файлов (сделал .c и .h), в main.cpp указал #include заголовочные файлы, указал пути в Options->C compiler->Preprocessor и Linker->Config->Search Path, а проект не запускается. Подозреваю, что ещё где-то надо что-то указать, но что и где - никак не соображу. Подскажите, пожалуйста...

ЗЫ: Error[e46]: Undefined external "i2c_write_byte(char)" referred in main ( H:\Programming\Projects\Termometr\IAR\Debug\Obj\main.r43 )
итд итп... sad.gif
rezident
//Nikson, вам нужно в каждый исходный файл включать прототипы используемых, но не описанных в нем, функций с опцией extern.
Типа
Код
extern void i2c_write_byte(char);
//Nikson
Нет, всё равно что-то не получается.
Вот по порядку что я делаю:
1. Создаю .с и .h файлы. В первом реализации функций,
во втором - их прототипы и определения констант
2. в основной программе #include заголовочный файл -
проект не компилируется - Undefined external...
3. дописываю в основной программе внешние функции как
extern - опять Undefined external, кстати ошибку выдаёт
IAR Universal Linker V4.59F/386
4. Добавляю файл в проект: Project - Add File.
Теперь в папке /Obj лежат 2 файла: main.r43 и i2c_soft.r43,
но ошибки те же.

То есть похоже, что по-отдельности файлы компилируются в 2 объектных
модуля, но как их объединить в один файл???

На всякий случай ещё в настройках Linker - Search Path указал $OBJ_DIR$\
и $PROJ_DIR$\, то же самое в Compiler - Include Paths.
Ничего не помогает, а больше ничего придумать не могу... sad.gif

Или где-то настройки проекта покрутить надо, или во внешних файлах дописать
(маловероятно - что там такого писать), или в основной программе
(extern и прототипы уже написал...)... В общем, если кто что подскажет - буду рад :!:
rezident
В проект естественно нужно включать оба файла. Они компилируются в два разных объектника и объединяются только уже в самой прошивке.
Чтобы оба хидера можно было было вставить в один исходный файл, его (.h-файл) нужно писать с директивами условной компиляции. Типа
Код
#ifndef _I2C_MODULE
#define I2C_SLAVE_ADDERSS 0xA0
#define _I2C_MODULE 1
#endif
extern void i2c_write_byte(char);

Вот такой хидер можно инклюдить в оба файла и никаких проблем не будет.
P.S. если бы вы приложили свои исходники, то "указать пальцем" было бы проще smile.gif
//Nikson
значит так... вот что имеется.
кусок i2c_soft.h:
Код
#include <msp430x14x.h>

#ifndef _I2C_MODULE
#define _I2C_MODULE 1

//--------------- I2C definitions begin -----------
........
//--------------- I2C definitions end -------------

extern void i2c_stop(void);
extern void i2c_start(void);
extern void i2c_receive(char device, char sub_addr, int length, char *data);
extern void i2c_send(char device, char sub_addr, int length, char *data);
extern void i2c_init(void);
extern char i2c_read_byte(unsigned char last);
extern unsigned char i2c_write_byte(char b);

#endif


кусок i2c_soft.c:
Код
#include "i2c_soft.h"

//-------------- I2C functions start ---------------
.....
//-------------- i2C functions end ------------------


и кусок main.cpp:
Код
#include <msp430x14x.h>
#include "i2c_soft.h"

.....

extern void i2c_stop(void);
extern void i2c_start(void);
extern void i2c_receive(char device, char sub_addr, int length, char *data);
extern void i2c_send(char device, char sub_addr, int length, char *data);
extern void i2c_init(void);
extern char i2c_read_byte(unsigned char last);
extern unsigned char i2c_write_byte(char b);

......


всё это можно посмотреть в полном варианте в присоединённом архиве.
все внешние файлы подключены через Project - Add File.
чувствую, что где-то облажался, но ГДЕ?.... wacko.gif
rezident
Блин! Зачем main.cpp назвали, да еще и в опциях язык Automatic (Extention based) выбрали? У вас же нет плюсового ничего. В общем, изменив одну лишь опцию в свойствах проекта, все начинает компилироваться smile.gif
Options->C/C++ Compiler->Language->Embedded C++.
Либо можете оставить так как сейчас есть, но в исходнике соответствующую прагму с указанием языка используйте.
Кстати, хидеры отдельно в проект включать не нужно.
P.S. еще один вариант, когда с хидерами/модулями не получается. Инклюдить в модуль с функцией main не только хидер, а весь исходник модуля. То бишь во второй строке вместо
Код
#include "i2c_soft.h"
напишите
Код
#include "i2c_soft.c"

P.P.S. для подобных проектов я библиотеку Legacy C (CLIB) использую. Плюсового у вас тут ничего пока не наблюдается. А из библотеки DLIB, только определения true и false используются. Но их легко самому определить. Типа такого
Код
typedef unsigned char Bool;
#define false ((Bool)0x00)
#define true ((Bool)0xFF)
ну или сами тип придумайте или подсмотрите где.
//Nikson
rezident,
Ура! Теперь всё работает. Даже обидно - столько времени "биться головой" из-за такой мелочи smile.gif
Спасибо огромное что нашли время и посмотрели!
Теперь можно продвигаться дальше. В поисках новых ошибок smile.gif (А они уже есть, просто сам поковыряться пока хочу)

P.S.
Цитата
Зачем main.cpp назвали, да еще и в опциях язык Automatic (Extention based) выбрали?

Больше не буду, честно. smile.gif
proga
АДИКМ
СПАСИБО, что прояснили мой вопрос, проблема действительно состояла в неправильных настройках опций проекта. Однако при анализе представленного вами проекта у меня возникло ещё два небольших вопроса:
1. При попытке просмотра в окне Watch информации о символах SEC,MIN,HR выводится надпись: Error: Unknown or ambiguous symbol. Почему так происходит?
2. Симуляция прерывания организуется в окне Simulator-Interrupts. Однако в этом случае приходится указывать значения таких параметров, как First Activation, Repeat interval, Hold time,Probability,Variance.Отсюда возникает вопрос: есть ли способ симулировать прерывание так , как это указанно в исходном тексте программы (т.е. применительно к вашему проекту, чтобы прерывание организовывалось каждую секунду) , помимо подгонки тех же параметров в окне Simulator-Interrupts?
zltigo
Цитата(//Nikson @ Apr 5 2006, 22:16) *
Больше не буду, честно. smile.gif

Ну отчего же! В С++ компиляторе есть вкусности даже при использовании для практически чисто сишных исходников. Со временем советую разобраться и компилировать плюсовым.
rezident
Цитата(proga @ Apr 9 2006, 19:41) *
[1. При попытке просмотра в окне Watch информации о символах SEC,MIN,HR выводится надпись: Error: Unknown or ambiguous symbol. Почему так происходит?

Потому что это регистровые переменные. См. объявление в RTC11x TA.s43
Код
;        RTC variables
#define         SEC     R13            
#define         MIN     R14            
#define         HR      R15

И смотреть их нужно View->Register
Цитата(proga @ Apr 9 2006, 19:41) *
2. Симуляция прерывания организуется в окне Simulator-Interrupts. Однако в этом случае приходится указывать значения таких параметров, как First Activation, Repeat interval, Hold time,Probability,Variance.Отсюда возникает вопрос: есть ли способ симулировать прерывание так , как это указанно в исходном тексте программы (т.е. применительно к вашему проекту, чтобы прерывание организовывалось каждую секунду) , помимо подгонки тех же параметров в окне Simulator-Interrupts?

А зачем вам такая точная симуляция? Симуляция нужна лишь для проверки корректности работы алгоритма программы. Если нужно отлаживать в реальном времени, то берите тогда реальное "железо".
proga
Сложилась такая ситуация. Дали в универе изучить программатор, на плате которого уже реализовано некое устройство, то есть часть портов уже занято. Ни с какими программаторами раньше дело не имел. С сайта ti.com скачал программу IAR 4.0.На IARе разработал пробную программу и решил загрузить её в МК для внутрисхемной отладки. Подключил программатор к LPT-порту. В опциях выбираю Debugger>Driver>FET Debugger, General Options >Target >Device: msp430F149 , C++ Compiler> Output >Generate debug info, FET Debugger>Connection>LPT1. Потом пытаюсь загрузить программу в МК, но ничего не получается . IAR просто не видит устройство. Никак не могу понять, в чём же я совершил ошибку.
rezident
Т.е. на этой плате и MSP430-FETP430IF уже встроенный? Что за плата? Может что-то из общеизвестного?
АДИКМ
Напишите, что установлено (компоненты) на плате.
Если она фирменная, то там и название должно быть где-то.
proga
Дело в том , что данный программатор , мне передал мой куратор по курсовой через третьего человека перед тем, как уехать в научную экспедицию. Пояснить что это за программатор, и какое устройство на нём реализовано я у него естественно не смог. Скажу только, что на интерфейсе инструмента эмуляции написано MSP-FETP430IF,а на отладочной плате: MSP-TS430PM64 Rev.: 0.1 .Понимаю, что не густо , но что есть то есть .
rezident

Такой что ли?
proga
Да, именно такой .
rezident
К нему что-то подключено еще кроме JTAG-интерфейса который в виде этой белой коробочки? Если да, то подается ли питание на ту часть, которая подключена? Делов том, что этот MSP430-FETP430IF питается от сигналов LPT-порта и это же питание заходит на отладочную плату. Ток там не очень большой. Для одного кристалла MSP430 вполне хватает. Но если к нему прицепить еще что-либо, то нужна внешняя запитка устройства.
P.S. напоследок совсем глупый вопрос: вы панельку тулкита открывали? Может там вообще кристалл не установлен? smile.gif
proga
Да,к нему подключены дополнительные компоненты, и питание к ним подаётся . Что касается вашего вопроса,то кристалл там присутствует.Однако есть одна деталь, которую я забыл к сожалению упомянуть:кристалл мне был дан отдельно от программатора,и так как на программаторе нигде не указано,как правильно вставить в него кристалл (т.е как он должен быть ориентирован в тулките), то вставил я его как говорится "на удачу".
rezident
Цитата(proga @ Apr 15 2006, 21:37) *
на программаторе нигде не указано,как правильно вставить в него кристалл (т.е как он должен быть ориентирован в тулките), то вставил я его как говорится "на удачу".

Удача к вам повернулась в анфас smile.gif Есть там маркировка, вы ее не разглядели просто. Номера контактов ближе к углам панели вытравлены. Если расположить ToolKit так как на рисунке, то угол с первым выводом справа вверху. На кристалле первый вывод маркирован маленькой точкой-углублением. Смотрите внимательно, т.к. там могут быть еще два технологических углубления симметрично в других углах кристалла. Они обычно по размеру больше, чем ключевая отметка.
proga
Теперь кристалл установил правильно. Пытался запустить эмулятор , однако IAR всё равно не видит программатор .
rezident
proga, попробуйте с помощью MSPFET Programmer, хотя бы стереть кристалл. И проверьте все же наличие и величину напряжения питания на плате ToolKit.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.