Обработка ключевых слов 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 */
}