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

 
 
> Как в IAR C++ положить константу по адресу?
gladov
сообщение Dec 20 2007, 06:51
Сообщение #1


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

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



Добрый, всем, день.

Мне нужно в коде на С++ положить во флешку по определнному адресу, заданному на этапе компиляции, некоторую константную структуру данных - блок параметров.

Пока удалось сделать только так:
parameters.h
Код
typedef struct
{
  ...
} tParameters;

#ifndef __PARAMETERS__
extern const tParameters* Parameters;
#endif


И Parameters.cpp:
Код
#define     __PARAMETERS__
#include "Parameters.h"
static const tParameters Param @ "CFG_SEG" = {...};
const tParameters* Parameters = &Param;


В таком виде это работает, но хочется сделать это одной переменной. Т.е. я не могу написать такое extern описание для переменной Param чтобы в любом другом месте кода использовать конструкцию Param.SomeField.

Я прекрасно понимаю, что в моем случае обращение вида Parameters->SomeField, в плане скорости и расхода памяти, нисколько не хуже чем Param.SomeField, просто хочется узнать, где мы с компилятором друг друга не поняли 07.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
gladov
сообщение Dec 20 2007, 12:13
Сообщение #2


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

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



В продолжение темы был поставлен такой опыт:

1.cpp:
Код
//extern const int A;
const int A = 1;


main.cpp:
Код
#include <stdio.h>

extern const int A;

int main()
{
    printf("A = %d\n", A);
    return 0;
}


Компиляция этого маленького проекта на GCC (равно как и в ИАРе) вываливается на этапе линковки с ошибкой
main.cpp:(.text+0x18): undefined reference to `A'
Но стоит раскоментарить строчку с extern в файле 1.cpp и все начинает работать!!! cranky.gif

Если эти же файлы откомпилировать как ANSI-C то все работает и без непонятного extern в 1.cpp
Кто может объяснить, что происходит?
Go to the top of the page
 
+Quote Post



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

 


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


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