Устал от отсутствия в иаре элементарных удобств (хи..хи..посмотреть на PM+ нековский/ренесасовский...так ИАР раем покажется) решил поставить это счастье. Отладка для 78K не реализована, так хоть разработка удобная будет...хм..по началу обрадовался, все так как хотелось. Подсветка нормально работает, подсказки/подстановки предлагает. В общем практически современный RAD...не долго счастье длилось. Что-то там не так реализовано или надо как-то правильно конфигурировать. Короче говоря, имею две проблемы.
1) с #include жесткие проблемы. Регулярно перестает распознавать файлы девайсов из IAR Workbench. т.е.
#include <io78F9234.h> через некоторое непродолжительное время (после некоторой правки исходников) начинает подсвечиваться ошибкой. Говорит что файл не найден.
Этот момент, в принципе решаем. Копируем файл в папку проекта. И заменяем
#include <io78F9234.h> на
#include "io78F9234.h". И все работает, но все же не правильно это как-то.
2) Вот это уже не удобно совсем. Не смотря на то, что иаровский компилятор способен совершенно спокойно усваивать не именованные объединения, которые и используются активно в девайс файлах, для описания аппаратуры. При использовании плагина во-первых они упорно не "подсвечиваются" для автоподстановки, и при компиляции постоянно на них ругаеццо что типа нет такого определения.
#ifndef __78K_BIT_STRUCTURE__
#define __78K_BIT_STRUCTURE__
typedef struct
{
unsigned char no0:1;
unsigned char no1:1;
unsigned char no2:1;
unsigned char no3:1;
unsigned char no4:1;
unsigned char no5:1;
unsigned char no6:1;
unsigned char no7:1;
} __BITS8;
#endif
// ... ... ...
__saddr __no_init volatile union { unsigned char P0; __BITS8 P0_bit; } @ 0xFF00;
__saddr __no_init volatile union { unsigned char P2; __BITS8 P2_bit; } @ 0xFF02;
__saddr __no_init volatile union { unsigned char P3; __BITS8 P3_bit; } @ 0xFF03;
__saddr __no_init volatile union { unsigned char P4; __BITS8 P4_bit; } @ 0xFF04;
// ... ... ...
т.е. открываем сам файлик. в просмотрщике иерархии появляется куча анонимных union, но когда в основном файле пишем P0 или P0_bit.no0 - ругается что такого определения нет.
Пытался включить разные опции, в частности IAR Extended Embeded C++ Syntax. В опциях командной строки он появляется, но упорно не желает видеть не именованные юнионы.
Казалось нашел решение. Создаю пустой проект. И в нем сразу не С/C++ Source, а С++ Class. Все начинает работать, все видит.
Подключаем девайс файл. В подсказке появляются порты и биты. При компиляции на них не ругается (вообще ругается только линкер, сто нет метода main, ну так мы его еще не создавали. Вот оно счастье. А фигушки. Добавление любого метода к классу, равно как и создание внешней функции main.Снова отрубает у редактора и компилятора способность понимать не именованные юнионы.
Что делать с этим уродством???!!!! Кто-нибудь сталкивался? Решение находили?
Для того чтоб понятнее было. Выкладываю картинки:
Первая, где видно что редактор подчеркивает P0, а компилятор (в низу) на него ругается.
А вторая, где видно что оно его вроде как понимает, просто игнорит, т.к. оно не именованное :
P.S. Манипуляции с созданием класса, связаны с тем что С99 спецификация не предполагает использование не именованных объединений. Такое по стандарту возможно только в С++. Попытался насильно сделать гарантированный "плюс плюс". Не понятно почему эффект столь мимолетен...
Раздел: NEC