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

 
 
> mspgcc4 и MSP430F2132, Компилятор ругается на структуру TLV_bits
dimay192
сообщение Aug 23 2010, 17:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 20-08-08
Пользователь №: 39 711



Вот собственно проблема...
Структура TLV_bits - структура, содержащая калибровочные константы в сегмента А флеш памяти.
Она описана в заголовочном файле msp430/include/msp430/tlv.h компилятора mspgcc4.
Само собой разумеется, что ее инициализировать не надо (она содержит заводские установки).
Но вот как это объяснить комлилятору, который на нее ругается следующими словами:

/opt/msp430-gcc-4.4.3/lib/gcc/msp430/4.4.3/../../../../msp430/include/msp430/tlv.h:125: ошибка: структура ‘TLV_bits’ с неинициализированными константными элементами
/opt/msp430-gcc-4.4.3/lib/gcc/msp430/4.4.3/../../../../msp430/include/msp430/tlv.h:125: ошибка: неинициализированная константа ‘TLV_bits’
make: *** [main.o] Ошибка 1

Может подсунуть компилятору опции какие?... но вот какие?
в make-файле я задаю следующие:

CC = msp430-gcc
CXX = msp430-g++
CFLAGS = -mmcu=${CPU} -O0 -Wall -g
CXXFLAGS = -mmcu=${CPU} -O0 -Wall -g -fno-rtti
что я делаю не так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Aug 23 2010, 17:43
Сообщение #2


Гуру
******

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



Не пользую GCC. Можно для интереса приаттачить этот хедер к вашему сообщению? Откуда константы в хедере? Там же обычно только типизация данных бывает.

P.S. Чудеса какие-то. Не могу скачать mspgcc-20081230.exe с sourceforge.net sad.gif Файл нулевого размера качается.
Go to the top of the page
 
+Quote Post
dimay192
сообщение Aug 23 2010, 18:26
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 20-08-08
Пользователь №: 39 711



Цитата(rezident @ Aug 23 2010, 23:43) *
...Откуда константы в хедере? Там же обычно только типизация данных бывает.


Эммм.... ну все верно! В хидере tlv.h нет никаких констант!...
По сути структура TLV_bits является интерефейсом к данным, зашитым на заводе в калибровочной области контроллера

Цитата(rezident @ Aug 23 2010, 23:43) *
Можно для интереса приаттачить этот хедер к вашему сообщению?


Файл не получается загрузить! Полностью процитирую его содержимое ниже:
Код
#ifndef __msp430_headers_tlv_h
#define __msp430_headers_tlv_h

/* tlv.h
*
* mspgcc project: MSP430 device headers
* tlv structures
*
* (c) 2008 by Sergey A. Borshch <sb-sf@users.sf.net>
*
* $Id: tlv.h,v 1.2 2009/01/11 23:11:48 sb-sf Exp $
*/

/* Switches: none */


/* TLV Calibration Data Structure */
#define TAG_DCO_30             0x01      /* Tag for DCO30  Calibration Data */
#define TAG_ADC12_1            0x10      /* Tag for ADC12_1 Calibration Data */
#define TAG_EMPTY              0xFE      /* Tag for Empty Data Field in Calibration Data */

#define TLV_CHECKSUM_          0x10C0    /* TLV CHECK SUM */
sfrw(TLV_CHECKSUM, TLV_CHECKSUM_);
#define TLV_DCO_30_TAG_        0x10F6    /* TLV TAG_DCO30 TAG */
sfrb(TLV_DCO_30_TAG, TLV_DCO_30_TAG_);
#define TLV_DCO_30_LEN_        0x10F7    /* TLV TAG_DCO30 LEN */
sfrb(TLV_DCO_30_LEN, TLV_DCO_30_LEN_);
#define TLV_ADC12_1_TAG_       0x10DA    /* TLV ADC12_1 TAG */
sfrb(TLV_ADC12_1_TAG, TLV_ADC12_1_TAG_);
#define TLV_ADC12_1_LEN_       0x10DB    /* TLV ADC12_1 LEN */
sfrb(TLV_ADC12_1_LEN, TLV_ADC12_1_LEN_);

#define CAL_ADC_25T85          0x0007    /* Index for 2.5V/85Deg Cal. Value */
#define CAL_ADC_25T30          0x0006    /* Index for 2.5V/30Deg Cal. Value */
#define CAL_ADC_25VREF_FACTOR  0x0005    /* Index for 2.5V Ref. Factor */
#define CAL_ADC_15T85          0x0004    /* Index for 1.5V/85Deg Cal. Value */
#define CAL_ADC_15T30          0x0003    /* Index for 1.5V/30Deg Cal. Value */
#define CAL_ADC_15VREF_FACTOR  0x0002    /* Index for ADC 1.5V Ref. Factor */
#define CAL_ADC_OFFSET         0x0001    /* Index for ADC Offset */
#define CAL_ADC_GAIN_FACTOR    0x0000    /* Index for ADC Gain Factor */

#define CALDCO_16MHZ_         0x10F8    /* DCOCTL  Calibration Data for 16MHz */
sfrb(CALDCO_16MHZ, CALDCO_16MHZ_);
#define CALBC1_16MHZ_         0x10F9    /* BCSCTL1 Calibration Data for 16MHz */
sfrb(CALBC1_16MHZ, CALBC1_16MHZ_);
#define CALDCO_12MHZ_         0x10FA    /* DCOCTL  Calibration Data for 12MHz */
sfrb(CALDCO_12MHZ, CALDCO_12MHZ_);
#define CALBC1_12MHZ_         0x10FB    /* BCSCTL1 Calibration Data for 12MHz */
sfrb(CALBC1_12MHZ, CALBC1_12MHZ_);
#define CALDCO_8MHZ_          0x10FC    /* DCOCTL  Calibration Data for 8MHz */
sfrb(CALDCO_8MHZ, CALDCO_8MHZ_);
#define CALBC1_8MHZ_          0x10FD    /* BCSCTL1 Calibration Data for 8MHz */
sfrb(CALBC1_8MHZ, CALBC1_8MHZ_);
#define CALDCO_1MHZ_          0x10FE    /* DCOCTL  Calibration Data for 1MHz */
sfrb(CALDCO_1MHZ, CALDCO_1MHZ_);
#define CALBC1_1MHZ_          0x10FF    /* BCSCTL1 Calibration Data for 1MHz */
sfrb(CALBC1_1MHZ, CALBC1_1MHZ_);

#define CAL_DCO_16MHZ          0x0000    /* Index for DCOCTL  Calibration Data for 16MHz */
#define CAL_BC1_16MHZ          0x0001    /* Index for BCSCTL1 Calibration Data for 16MHz */
#define CAL_DCO_12MHZ          0x0002    /* Index for DCOCTL  Calibration Data for 12MHz */
#define CAL_BC1_12MHZ          0x0003    /* Index for BCSCTL1 Calibration Data for 12MHz */
#define CAL_DCO_8MHZ           0x0004    /* Index for DCOCTL  Calibration Data for 8MHz */
#define CAL_BC1_8MHZ           0x0005    /* Index for BCSCTL1 Calibration Data for 8MHz */
#define CAL_DCO_1MHZ           0x0006    /* Index for DCOCTL  Calibration Data for 1MHz */
#define CAL_BC1_1MHZ           0x0007    /* Index for BCSCTL1 Calibration Data for 1MHz */

#ifndef __ASSEMBLER__
/* Structured declaration */
typedef enum
{
    DCO_30_TAG      = 0x01,
    ADC12_1_TAG     = 0x10,
    EMPTY_TAG       = 0xFE,

} tlv_tags_t;

typedef struct
{
    unsigned char tag;
    unsigned char length;
    struct
    {
        unsigned char DCO_16MHZ;
        unsigned char BC1_16MHZ;
        unsigned char DCO_12MHZ;
        unsigned char BC1_12MHZ;
        unsigned char DCO_8MHZ;
        unsigned char BC1_8MHZ;
        unsigned char DCO_1MHZ;
        unsigned char BC1_1MHZ;
    } value;
} const dco_30_tag_t;

typedef struct
{
    unsigned char tag;
    unsigned char length;
    struct
    {
        unsigned int ADC_GAIN_FACTOR;
        unsigned int ADC_OFFSET;
        unsigned int ADC_15VREF_FACTOR;
        unsigned int ADC_15T30;
        unsigned int ADC_15T85;
        unsigned int ADC_25VREF_FACTOR;
        unsigned int ADC_25T30;
        unsigned int ADC_25T85;
    } value;
} const adc12_1_tag_t;

typedef struct
{
    unsigned char tag;
    unsigned char length;
} const empty_tag_t;

struct
{
    unsigned int checksum;
    empty_tag_t  empty;
    unsigned int dummy[11];
    adc12_1_tag_t adc12_1;
    dco_30_tag_t dco_30;
} const volatile TLV_bits asm("0x10c0");
#endif  // __ASSEMBLER__

#endif  /* __msp430_headers_tlv_h */


Как видиде, структура TLV_bits определена как const volatile и привязана к фиксированному адресу.
Вот с ней то компилятор и не подружился!!!!!

Цитата(rezident @ Aug 23 2010, 23:43) *
P.S. Чудеса какие-то. Не могу скачать mspgcc-20081230.exe с sourceforge.net sad.gif Файл нулевого размера качается.


логичнее взять отсюда http://mspgcc4.sourceforge.net/ (свежайшая сборка, базируется на gcc-4.4.3) - можно вытянуть сборку, а можно и собрать из исходников
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Aug 23 2010, 18:46
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Попробуйте обойтись без асмовых вставок.
Код
typedef struct
{
    uint8_t a;
    uint8_t b;
    uint8_t c;
} some_struct_t;

#define some_struct (*(const volatile some_struct_t*)(0x10c0))


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 24 2010, 04:38
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(demiurg_spb @ Aug 23 2010, 22:46) *
Попробуйте обойтись без асмовых вставок.

Дело скорее всего не в асмовых вставках.
Для начала может просто разделить описание структуры и привязку к константе во флеше.

Доб.©
static const volatile stFlashData __SEG_A__ FlashData;// = FACTORY_SETTINGS; - mspgcc4 скушал без вопросов.
Если у вас такое не сработает - значит, в новой версии что-то сломали (у меня версия конца прошлого года)
Хотя, у меня не пишется по адресу, а кладётся в секцию. Сейчас попробую привязать к адресу.
Доб.2
static const volatile stFlashData FlashData asm("0x1080");// = FACTORY_SETTINGS; - OK

Сообщение отредактировал MrYuran - Aug 24 2010, 04:49


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post



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

 


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


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