proga 0 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба В универе мне дали задание самостоятельно изучить 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 0 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба архив проекта приложите Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
proga 0 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба прилагаю :проект Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
АДИКМ 0 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба То что вы приложили это не проект а ассемблерные исходники. Вообще ваша проблема кроется в настройках опий проекта. Project-Option-Linker-Config- здесь надо поставить галку Override defualt program entry (Defined by application). Прилагаю готовый проект, который создан в ИАР 3.30A Кстати не забудьте в опициях проекта правильно указвывать тип используемого процессора. P.S. файла не прикрепляется. Положил сюда. http://upload.caxapa.ru/clock.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovalio 0 1 апреля, 2006 Опубликовано 1 апреля, 2006 · Жалоба У меня тож проблемка, даже стыдно новую тему заводить :) Разбил программу на несколько файлов (сделал .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 ) итд итп... :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 1 апреля, 2006 Опубликовано 1 апреля, 2006 · Жалоба //Nikson, вам нужно в каждый исходный файл включать прототипы используемых, но не описанных в нем, функций с опцией extern. Типа extern void i2c_write_byte(char); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovalio 0 3 апреля, 2006 Опубликовано 3 апреля, 2006 · Жалоба Нет, всё равно что-то не получается. Вот по порядку что я делаю: 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 и прототипы уже написал...)... В общем, если кто что подскажет - буду рад :!: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 3 апреля, 2006 Опубликовано 3 апреля, 2006 · Жалоба В проект естественно нужно включать оба файла. Они компилируются в два разных объектника и объединяются только уже в самой прошивке. Чтобы оба хидера можно было было вставить в один исходный файл, его (.h-файл) нужно писать с директивами условной компиляции. Типа #ifndef _I2C_MODULE #define I2C_SLAVE_ADDERSS 0xA0 #define _I2C_MODULE 1 #endif extern void i2c_write_byte(char); Вот такой хидер можно инклюдить в оба файла и никаких проблем не будет. P.S. если бы вы приложили свои исходники, то "указать пальцем" было бы проще :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovalio 0 4 апреля, 2006 Опубликовано 4 апреля, 2006 · Жалоба значит так... вот что имеется. кусок 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. чувствую, что где-то облажался, но ГДЕ?.... project.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 4 апреля, 2006 Опубликовано 4 апреля, 2006 · Жалоба Блин! Зачем 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) ну или сами тип придумайте или подсмотрите где. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovalio 0 5 апреля, 2006 Опубликовано 5 апреля, 2006 · Жалоба rezident, Ура! Теперь всё работает. Даже обидно - столько времени "биться головой" из-за такой мелочи :) Спасибо огромное что нашли время и посмотрели! Теперь можно продвигаться дальше. В поисках новых ошибок :) (А они уже есть, просто сам поковыряться пока хочу) P.S. Зачем main.cpp назвали, да еще и в опциях язык Automatic (Extention based) выбрали? Больше не буду, честно. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
proga 0 9 апреля, 2006 Опубликовано 9 апреля, 2006 · Жалоба АДИКМ СПАСИБО, что прояснили мой вопрос, проблема действительно состояла в неправильных настройках опций проекта. Однако при анализе представленного вами проекта у меня возникло ещё два небольших вопроса: 1. При попытке просмотра в окне Watch информации о символах SEC,MIN,HR выводится надпись: Error: Unknown or ambiguous symbol. Почему так происходит? 2. Симуляция прерывания организуется в окне Simulator-Interrupts. Однако в этом случае приходится указывать значения таких параметров, как First Activation, Repeat interval, Hold time,Probability,Variance.Отсюда возникает вопрос: есть ли способ симулировать прерывание так , как это указанно в исходном тексте программы (т.е. применительно к вашему проекту, чтобы прерывание организовывалось каждую секунду) , помимо подгонки тех же параметров в окне Simulator-Interrupts? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 9 апреля, 2006 Опубликовано 9 апреля, 2006 · Жалоба Больше не буду, честно. :) Ну отчего же! В С++ компиляторе есть вкусности даже при использовании для практически чисто сишных исходников. Со временем советую разобраться и компилировать плюсовым. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 9 апреля, 2006 Опубликовано 9 апреля, 2006 · Жалоба [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? А зачем вам такая точная симуляция? Симуляция нужна лишь для проверки корректности работы алгоритма программы. Если нужно отлаживать в реальном времени, то берите тогда реальное "железо". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
proga 0 14 апреля, 2006 Опубликовано 14 апреля, 2006 · Жалоба Сложилась такая ситуация. Дали в универе изучить программатор, на плате которого уже реализовано некое устройство, то есть часть портов уже занято. Ни с какими программаторами раньше дело не имел. С сайта 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 просто не видит устройство. Никак не могу понять, в чём же я совершил ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться