Перейти к содержанию
    

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

 

 

 

 

 

При создании другого проекта происходит тоже самое. Буду очень благодарен тем кто подскажет в чём же состоит моя ошибка .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То что вы приложили это не проект а ассемблерные исходники.

Вообще ваша проблема кроется в настройках опий проекта.

Project-Option-Linker-Config- здесь надо поставить галку Override defualt program entry (Defined by application).

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня тож проблемка, даже стыдно новую тему заводить :)

 

Разбил программу на несколько файлов (сделал .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 )

итд итп... :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

//Nikson, вам нужно в каждый исходный файл включать прототипы используемых, но не описанных в нем, функций с опцией extern.

Типа

extern void i2c_write_byte(char);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, всё равно что-то не получается.

Вот по порядку что я делаю:

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.

Ничего не помогает, а больше ничего придумать не могу... :(

 

Или где-то настройки проекта покрутить надо, или во внешних файлах дописать

(маловероятно - что там такого писать), или в основной программе

(extern и прототипы уже написал...)... В общем, если кто что подскажет - буду рад :!:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В проект естественно нужно включать оба файла. Они компилируются в два разных объектника и объединяются только уже в самой прошивке.

Чтобы оба хидера можно было было вставить в один исходный файл, его (.h-файл) нужно писать с директивами условной компиляции. Типа

#ifndef _I2C_MODULE
#define I2C_SLAVE_ADDERSS 0xA0
#define _I2C_MODULE 1
#endif
extern void i2c_write_byte(char);

Вот такой хидер можно инклюдить в оба файла и никаких проблем не будет.

P.S. если бы вы приложили свои исходники, то "указать пальцем" было бы проще :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

значит так... вот что имеется.

кусок 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:

project.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Блин! Зачем main.cpp назвали, да еще и в опциях язык Automatic (Extention based) выбрали? У вас же нет плюсового ничего. В общем, изменив одну лишь опцию в свойствах проекта, все начинает компилироваться :)

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)

ну или сами тип придумайте или подсмотрите где.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

rezident,

Ура! Теперь всё работает. Даже обидно - столько времени "биться головой" из-за такой мелочи :)

Спасибо огромное что нашли время и посмотрели! alc.gif

Теперь можно продвигаться дальше. В поисках новых ошибок :) (А они уже есть, просто сам поковыряться пока хочу)

 

P.S.

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

Больше не буду, честно. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

АДИКМ

СПАСИБО, что прояснили мой вопрос, проблема действительно состояла в неправильных настройках опций проекта. Однако при анализе представленного вами проекта у меня возникло ещё два небольших вопроса:

1. При попытке просмотра в окне Watch информации о символах SEC,MIN,HR выводится надпись: Error: Unknown or ambiguous symbol. Почему так происходит?

2. Симуляция прерывания организуется в окне Simulator-Interrupts. Однако в этом случае приходится указывать значения таких параметров, как First Activation, Repeat interval, Hold time,Probability,Variance.Отсюда возникает вопрос: есть ли способ симулировать прерывание так , как это указанно в исходном тексте программы (т.е. применительно к вашему проекту, чтобы прерывание организовывалось каждую секунду) , помимо подгонки тех же параметров в окне Simulator-Interrupts?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Больше не буду, честно. :)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

[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

2. Симуляция прерывания организуется в окне Simulator-Interrupts. Однако в этом случае приходится указывать значения таких параметров, как First Activation, Repeat interval, Hold time,Probability,Variance.Отсюда возникает вопрос: есть ли способ симулировать прерывание так , как это указанно в исходном тексте программы (т.е. применительно к вашему проекту, чтобы прерывание организовывалось каждую секунду) , помимо подгонки тех же параметров в окне Simulator-Interrupts?

А зачем вам такая точная симуляция? Симуляция нужна лишь для проверки корректности работы алгоритма программы. Если нужно отлаживать в реальном времени, то берите тогда реальное "железо".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...