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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> IAR от новичка, помогите студенту
proga
сообщение Mar 26 2006, 05:11
Сообщение #1


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

Группа: Участник
Сообщений: 86
Регистрация: 17-01-06
Из: иркутск
Пользователь №: 13 278



В универе мне дали задание самостоятельно изучить 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





При создании другого проекта происходит тоже самое. Буду очень благодарен тем кто подскажет в чём же состоит моя ошибка .
Go to the top of the page
 
+Quote Post
VAI
сообщение Mar 26 2006, 05:13
Сообщение #2


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

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



архив проекта приложите


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
proga
сообщение Mar 26 2006, 06:06
Сообщение #3


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

Группа: Участник
Сообщений: 86
Регистрация: 17-01-06
Из: иркутск
Пользователь №: 13 278



прилагаю :проект
Go to the top of the page
 
+Quote Post
АДИКМ
сообщение Mar 26 2006, 08:30
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 630
Регистрация: 2-08-05
Пользователь №: 7 294



То что вы приложили это не проект а ассемблерные исходники.
Вообще ваша проблема кроется в настройках опий проекта.
Project-Option-Linker-Config- здесь надо поставить галку Override defualt program entry (Defined by application).

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

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

P.S. файла не прикрепляется. Положил сюда. http://upload.caxapa.ru/clock.zip


--------------------
летаю на пепелаце...
Go to the top of the page
 
+Quote Post
//Nikson
сообщение Apr 1 2006, 21:49
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 43
Регистрация: 26-01-06
Из: Минск, Беларусь
Пользователь №: 13 651



У меня тож проблемка, даже стыдно новую тему заводить 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
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 1 2006, 22:28
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



//Nikson, вам нужно в каждый исходный файл включать прототипы используемых, но не описанных в нем, функций с опцией extern.
Типа
Код
extern void i2c_write_byte(char);
Go to the top of the page
 
+Quote Post
//Nikson
сообщение Apr 3 2006, 16:50
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 43
Регистрация: 26-01-06
Из: Минск, Беларусь
Пользователь №: 13 651



Нет, всё равно что-то не получается.
Вот по порядку что я делаю:
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 и прототипы уже написал...)... В общем, если кто что подскажет - буду рад :!:
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 3 2006, 17:05
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



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

Вот такой хидер можно инклюдить в оба файла и никаких проблем не будет.
P.S. если бы вы приложили свои исходники, то "указать пальцем" было бы проще smile.gif
Go to the top of the page
 
+Quote Post
//Nikson
сообщение Apr 4 2006, 18:38
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 43
Регистрация: 26-01-06
Из: Минск, Беларусь
Пользователь №: 13 651



значит так... вот что имеется.
кусок 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
Прикрепленные файлы
Прикрепленный файл  project.rar ( 23.17 килобайт ) Кол-во скачиваний: 59
 
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 4 2006, 22:05
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Блин! Зачем 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)
ну или сами тип придумайте или подсмотрите где.
Go to the top of the page
 
+Quote Post
//Nikson
сообщение Apr 5 2006, 19:16
Сообщение #11


Участник
*

Группа: Свой
Сообщений: 43
Регистрация: 26-01-06
Из: Минск, Беларусь
Пользователь №: 13 651



rezident,
Ура! Теперь всё работает. Даже обидно - столько времени "биться головой" из-за такой мелочи smile.gif
Спасибо огромное что нашли время и посмотрели!
Теперь можно продвигаться дальше. В поисках новых ошибок smile.gif (А они уже есть, просто сам поковыряться пока хочу)

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

Больше не буду, честно. smile.gif
Go to the top of the page
 
+Quote Post
proga
сообщение Apr 9 2006, 13:41
Сообщение #12


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

Группа: Участник
Сообщений: 86
Регистрация: 17-01-06
Из: иркутск
Пользователь №: 13 278



АДИКМ
СПАСИБО, что прояснили мой вопрос, проблема действительно состояла в неправильных настройках опций проекта. Однако при анализе представленного вами проекта у меня возникло ещё два небольших вопроса:
1. При попытке просмотра в окне Watch информации о символах SEC,MIN,HR выводится надпись: Error: Unknown or ambiguous symbol. Почему так происходит?
2. Симуляция прерывания организуется в окне Simulator-Interrupts. Однако в этом случае приходится указывать значения таких параметров, как First Activation, Repeat interval, Hold time,Probability,Variance.Отсюда возникает вопрос: есть ли способ симулировать прерывание так , как это указанно в исходном тексте программы (т.е. применительно к вашему проекту, чтобы прерывание организовывалось каждую секунду) , помимо подгонки тех же параметров в окне Simulator-Interrupts?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 9 2006, 13:54
Сообщение #13


Гуру
******

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



Цитата(//Nikson @ Apr 5 2006, 22:16) *
Больше не буду, честно. smile.gif

Ну отчего же! В С++ компиляторе есть вкусности даже при использовании для практически чисто сишных исходников. Со временем советую разобраться и компилировать плюсовым.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 9 2006, 14:53
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(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?

А зачем вам такая точная симуляция? Симуляция нужна лишь для проверки корректности работы алгоритма программы. Если нужно отлаживать в реальном времени, то берите тогда реальное "железо".
Go to the top of the page
 
+Quote Post
proga
сообщение Apr 14 2006, 12:07
Сообщение #15


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

Группа: Участник
Сообщений: 86
Регистрация: 17-01-06
Из: иркутск
Пользователь №: 13 278



Сложилась такая ситуация. Дали в универе изучить программатор, на плате которого уже реализовано некое устройство, то есть часть портов уже занято. Ни с какими программаторами раньше дело не имел. С сайта 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 просто не видит устройство. Никак не могу понять, в чём же я совершил ошибку.
Go to the top of the page
 
+Quote Post

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

 


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


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