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

Вопросы по Eclipse, CDT, Zylin embedded CDT

А у меня не появляются :(

А совместим ли ваш eclipse с EmbSys? B выбран ли тип процессора?

 

Скажите, а как у вас с отладкой шаблонного кода?

Вроде нормально было.

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


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

А совместим ли ваш eclipse с EmbSys? B выбран ли тип процессора?

А бог его знает. Версия эклипса - 3,7, но на сайте плагина написано только о проблемах версий старше 3,6 в сочетании с GDB (который я не использую). Тип процессора выбран, без этого структуру регистров было бы не видно вообще (и ошибка выдавалась).

 

 

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


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

Давно хотел спросить.

Эклипса ругается на макрос:

 

off(PIN_OUTPUT);

 

пишет: Invalid use of macro pasting in macro: _clrL.

 

Макрос объявлен так:

#define _clrL(port,bit,val) PDR##port##_P##port##bit##=1
#define _clrH(port,bit,val) PDR##port##_P##port##bit##=0
#define _clr(port,bit,val) _clr##val(port,bit,val)

 

Макрос рабочий, проверенный. Что в нём не нравится эклипсе?

 

ЗЫ. PIN_OUTPUT определён так:

#define PIN_OUTPUT        1, 4, L

 

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


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

Короче, вот так заработало:

#define _clrL(line) line=1
#define _clrH(line) line=0
#define _clr(port,bit,val) _clr##val(PDR##port##_P##port##bit)
#define off(x) _clr(x)

Что эклипсе не нравилось - так и не понял.

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


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

Что эклипсе не нравилось - так и не понял.
Возможно - последние ## после bit

 

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


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

Забил на кейловский плагин (раз уж, видимо, кейл генерирует такой map-файл по которому потом шаблонный код криво виден).

Поднял отладку на yagarto с отладчиком j-link.

 

Новая проблема - программа не останавливается в main (точнее, не доходит). Вишу в hard_fault_handler (при этом установлены биты STKERR и IMPRECISERR регистра BFSR - не совсем понятно, с чего это вдруг). Все настройки для debug conftiguartion брал с сайта yagarto.

 

(Чтобы увидеть этот регистр, кстати говоря, пришлось в xml для EmbSys Registers ручками прописать его адрес, из коробки нема)

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


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

Возможно - последние ## после bit

Точно! А фуджиковый препроцессор нормально это съедал. Интересно, кто из них прав? :)

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


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

Подскажите гуру, почему при компиляции в Эклипс в хэдере класа не узнает тип namespace?

Выдает: ./Include/dInput_hw.hpp:54:1: error: unknown type name 'namespace'

 

PS: ранее проект компилился в IAR, синтаксис должен быть правильный.

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


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

Код покажи...

 

Навскидку, может быть расширение файла .c и вызывается gcc?

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


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

//********************************************************************************
*****************
//*                                    Discrete Input
//*                                    ARM AT91SAM7X128 Serial I/O Low Level Driver
//********************************************************************************
*************************

#if !defined(_dInput_hw_hpp_)
#define	_dInput_hw_hpp_

//********************************************************************************
*************************
//*                                       CONFIGURATION CONSTANTS
//********************************************************************************
*************************

#define IN0 	(AT91C_PIO_PB27)
#define IN1 	(AT91C_PIO_PB28)
#define IN2 	(AT91C_PIO_PB29)
#define IN3            (AT91C_PIO_PB30)       
#define IN4            (AT91C_PIO_PA8)       
#define IN5            (AT91C_PIO_PA9)       
#define IN6            (AT91C_PIO_PA10)       
#define IN7            (AT91C_PIO_PA11)       
#define IN8            (AT91C_PIO_PA12)       
#define IN9            (AT91C_PIO_PA13)       
#define IN10           (AT91C_PIO_PA14)       
#define IN11           (AT91C_PIO_PA15)       
#define IN12           (AT91C_PIO_PA16)       
#define IN13           (AT91C_PIO_PA17)       
#define IN14           (AT91C_PIO_PA18)       
#define IN15           (AT91C_PIO_PB9)       
#define INB_MASK       (IN0 | IN1 | IN2 | IN3 | IN15)
#define INA_MASK       (IN4 | IN5 | IN6 | IN7 | IN8 | IN9 | IN10 | IN11 | IN12 | IN13 | IN14)

#define	_Nbr_dIn_Ports_		(16)	// Количество входов в блоке дискретных входов
#define	Nbr_dIn_Ports_Max	(_Nbr_dIn_Ports_)

/*
********************************************************************************
*************************
*                                          FUNCTION PROTOTYPES
********************************************************************************
*************************
*/

/*
********************************************************************************
*************************
*                                          CLASS DEFINITION
********************************************************************************
*************************
*/
namespace nm_dInput
{
	class CdInput
	{
	public:
		CdInput(void);		// конструктор
		~CdInput(void);		// деструктор
		s8 dInput_Cfg	(void);	// конфигурирование порта ввода
		s8 Init		(void);	// инициализация (полная перезагрузка)
		s8 ReInit		(void);	// переинициализация  (частичная перезагрузка без перебоя в работе)
		s8 Update	(void);	// считывание и обработка данных принимаемых блоками дискретных входов
		s32 Get_Sts	(u8 Addr) const;	// считывание буфера дискретного входа
		s8 Get_EvntFlag (void);	// считывание флага изменения состояния на входе
	private:
		u8	Nbr_dIn_Ports;			// Количество входов в блоке дискретных входов
		u32	dIn_In	[Nbr_dIn_Ports_Max];	// Массив считанных данных со входов блоков
		u32	dIn_Buf	[Nbr_dIn_Ports_Max];	// Буферный массив считанных данных со входов блоков
		u32	dIn_Sts	[Nbr_dIn_Ports_Max];	// Массив обработанных данных со входов блоков
		u8	dIn_Cnt	[Nbr_dIn_Ports_Max];	// Массив счетчиков числа считываний входа
		u8	dIn_EvntFlag;			// Флаг изменения на входе
		bool	WE;	// разрешение работы с экземляром класса - устанавливается если произведена инициализация
	};
	extern CdInput dInput;		// объявление глобальной переменной
}

#endif

 

 

Компилятор Yagarto gcc

arm-none-eabi-g++

Изменено пользователем IgorKossak
[codebox]для длинного кода!!!

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


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

ну попробуй сделать проект из одного файл main.cpp:

namespace N {}
class C {};

int main()
{
  return 0;
}

 

:bb-offtopic:

комментарии типа

CdInput(void); // конструктор
~CdInput(void); // деструктор

просто супер полезны ;)

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


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

С одним main нормально. Грешен. И даже с классом в main.hpp в namespace {...} нормально.

Видимо где-то в проекте накосячил при переносе :cranky:

 

По поводу комментариев согласен :biggrin: - наследие предков.

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


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

Поисключай лишнее. Может предыдущий include включает что-то кривое... Или может все таки режим компиляции C, а не С++ для того файла, при компиляции которого вылезает ошибка.

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


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

я в такие файлы, где есть дефайны и для C, и для C++ файлов, всегда ставлю #ifdef __cplusplus. И проблемы бы не возникло.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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