Обработка ключевых слов Keil C51 в индексаторе Eclipse

Согласно Keil C51, действует следующее:

static void kernel(void) small interrupt 1 using 2
{
    /* do stuff */
}

Однако, согласно индексатору Eclipse, это не так. Мы можем сделать следующие определения, чтобы помочь делу:

#define small /*small*/
#define interrupt /*interrupt*/

Но, к сожалению, мы не можем переопределить зарезервированное ключевое слово "using", и было бы глупо переопределять числа 1 или 2.

Есть ли способ заставить индексатор Eclipse анализировать древний код 8051, чтобы воспользоваться преимуществами современной IDE? Есть ли альтернатива Eclipse, которая может предложить эффективный способ навигации по такому C-проекту? Что-то с эквивалентной функцией "Open Call Hierarchy"?

2 ответа

На самом деле я создал плагин Eclipse именно для этой цели несколько лет назад. Я загрузил код в GitHub. Вы можете найти бинарную сборку плагина здесь: https://github.com/andersesbensen/eclipse-c51-plugin/blob/master/deployment/eclipse-c51-plugin.zip

Вам необходимо активировать плагин в разделе "Языковые сопоставления" в вашем C-проекте.

Плагин не может быть идеальным, но это хорошее начало. Не стесняйтесь вносить свой вклад в код, если вы обнаружите, что что-то не работает.

С наилучшими пожеланиями Андерс

Вы можете переопределить проблемные ключевые слова только для индексатора CDT. Когда индексатор работает, символ __CDT_PARSER__ определено. Когда выполняется компиляция, этот символ не будет определен. Так что вы можете сделать что-то вроде:

#ifdef __CDT_PARSER__
#undef small
#define small
//....etc
#endif

Или вы можете иметь макрос, заменяющий определение функции:

#ifndef __CDT_PARSER__
#define KEIL_SPECIFIC_STUFF(param1, param2) small interrupt param1 using param2
#else 
#define KEIL_SPECIFIC_STUFF(param1, param2)
#endif

а потом

static void kernel(void) KEIL_SPECIFIC_STUFF(1,2)
{
    /* do stuff */
}
Другие вопросы по тегам