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

 
 
 
Reply to this topicStart new topic
> Помогите с IARом
Karl
сообщение Nov 1 2005, 05:15
Сообщение #1


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

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Следующий код:

#include <iom16.h>

int main( void )
{
PORTD = 1<<PD0;
return 0;
}

Компилятор выдает ошибку:
Error[Pe020]: identifier "PD0" is undefined D:\Projects\avr_c\IAR_projekts\test1\main.c 5
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Nov 1 2005, 06:07
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(Karl @ Nov 1 2005, 08:15)
Следующий код:

#include <iom16.h>

int main( void )
{
    PORTD = 1<<PD0;
    return 0;
}

Компилятор выдает ошибку:
Error[Pe020]: identifier "PD0" is undefined D:\Projects\avr_c\IAR_projekts\test1\main.c 5
*


General Options/system/Enable bit definitions in I/O include files

По крайней мере в 4.11 здесь находится.
Go to the top of the page
 
+Quote Post
Karl
сообщение Nov 1 2005, 06:21
Сообщение #3


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

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Цитата(&-rey @ Nov 1 2005, 11:07)
Цитата(Karl @ Nov 1 2005, 08:15)
Следующий код:

#include <iom16.h>

int main( void )
{
    PORTD = 1<<PD0;
    return 0;
}

Компилятор выдает ошибку:
Error[Pe020]: identifier "PD0" is undefined D:\Projects\avr_c\IAR_projekts\test1\main.c 5
*


General Options/system/Enable bit definitions in I/O include files

По крайней мере в 4.11 здесь находится.
*



Спасибо.
Go to the top of the page
 
+Quote Post
Karl
сообщение Feb 15 2006, 04:21
Сообщение #4


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

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Необходимо поместить функцию по конкретному адресу в памяти.
Делаю это следующим образом:
void boot_test(void) @0x1c00;
...
void boot_test(void) @0x1c00
{
...
}

Компилятор ругается:
Error[Be011]: location address not allowed for functions

В чем проблема? Вроде раньше пробовал - работало?
Go to the top of the page
 
+Quote Post
Old1
сообщение Feb 15 2006, 17:41
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



Цитата(Karl @ Feb 15 2006, 08:21) *
Необходимо поместить функцию по конкретному адресу в памяти.
Делаю это следующим образом:
void boot_test(void) @0x1c00;
...
void boot_test(void) @0x1c00
{
...
}

Компилятор ругается:
Error[Be011]: location address not allowed for functions

В чем проблема? Вроде раньше пробовал - работало?

Таким образом по заданному адресу можно разместить переменную или строку.
С функцией можно сделать так. Сначала создать свой сегмент памяти, размещаемый в диапазоне адресов который вам нужен. Затем в него поместить функцию. Если функция в этом сегменте будет одна, то ее тело фактически будет начинаться с адреса начала сегмента.
1.Создем сегмент. В настройках проекта в разделе linker, в закладке extra options вставляем строку (например):
Цитата
-Z(CODE)MYSEGMENT=1C00-1CFF

1C00-1CFF - это диапазон адресов под создаваемый сегмент.
2.Определяем функцию (например так):
Код
#pragma location="MYSEGMENT"
void Funk (void)
{
  //.......
}

или так:
Код
void Funk (void) @"MYSEGMENT"
{
  //.......
}
Go to the top of the page
 
+Quote Post
Karl
сообщение Feb 16 2006, 05:01
Сообщение #6


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

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Благодарю, все заработало w00t.gif
Go to the top of the page
 
+Quote Post

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

 


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


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