HP 50g и C++
Пакет HPGCC для разработки программ калькуляторов серии HP 48, HP 49, HP 50g на языке Си может также с небольшими изменениями настроек использоваться для программирования на C++.
Вначале необходимо скачать и установить пакет для разработки (http://sourceforge.net/projects/hpgcc/). В него входят компиляторы GNU, библиотеки, заголовочные файлы, исходники и собственно простая среда разработки на базе Programmer Notepad.
Предположим, вы установили пакет в каталог C:\HPGCC
. В корне лежит файл "Default_Makefile". Сделаем его резервную копию, затем запустим нашу среду (Start -- HPGCC 2.0 for Windows -- HPGCC Programmer's Notepad) и откроем в ней Default_Makefile-файл. Делаем замену .c
на .cpp
, а к опциям компилятора (строка 66, ARM_ELF_CFLAGS=...
) добавляем -fno-rtti -fno-exceptions
и сохраняем.
Создаем в среде новый файл, скопируем в него текст из примера "Hello, world!" (examples\hiworld.c
). Сделаем небольшие изменения: обернем include
главного заголовочного файла.
#ifdef __cplusplus
#define size_t long unsigned int
extern "C" {
#endif
#include <hpgcc49.h> // the standard HP lib
#ifdef __cplusplus
}
#endif
Разумеется, есть способы поэлегантнее, например, внести эту обвязку в отдельный заголовочный файл вроде hpcpp.h
, включая его в свои исходники. В рамках нашего обзора это не столь уж и важно.
Сохраняем файл под именем, например, hello2.cpp
и жмем Ctrl+F7
. Компиляция и сборка проходят успешно.
Теперь проверим "сиплюсплюснутость". Добавим перед основной функцией простенький класс.
class MyClass
{
public:
MyClass() {}
void SayHello() { printf("Hello, World!"); }
};
Однако, попытка компоновки вызывает ошибку: не определены основные операторы работы с памятью в Си++: new и delete.
Это понятно, т.к. компоновать нужно с библиотеками типа libsupc++.a или libstdc++.a. Первая из них доступна на том же сайте HPGCC, но пока не входит в пакет и является неофициальной.
Тем не менее, разработчики подсказывают, что если просто руками добавить соответствующие операторы, то выделение памяти будет работать и в существующем пакете.
Добавляем операторы перед нашим классом. Полный текст программы будет выглядеть так.
#define TINY_PRINTF
#ifdef __cplusplus
#define size_t long unsigned int
extern "C" {
#endif
#include <hpgcc49.h> // the standard HP lib
#ifdef __cplusplus
}
#endif
void * operator new(size_t size)
{
void *ptr = malloc(size);
return ptr;
}
void * operator new[](size_t size)
{
void *ptr = malloc(size);
return ptr;
}
void operator delete(void *p)
{
free(p);
}
class MyClass
{
public:
MyClass() {}
void SayHello() {printf("Hello, World!");}
};
int main(void)
{
clear_screen();
MyClass *hello = new MyClass();
hello->SayHello();
WAIT_CANCEL; // loop until ON pressed
delete hello;
}
После компиляции и компоновки в каталоге исходного файла должен появиться hello2.hp
для выполнения на конечном устройстве.
Если физического устройства нет, можно воспользоваться мощным эмулятором ПМК серии HP-48/49/50 под названием Debug4x, детально показывающим даже внешний вид калькулятора. Его можно загрузить на сайте разработчиков (англ.яз.): http://www.debug4x.com. Эмулятор, кстати, написан на Delphi.
blog comments powered by Disqus