Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Expand
titleВозврат из загружаемого кода

Выход из приложения можно осуществлять следующим образом:

  • Возврат из main при помощи return. Код возврата будет помещен в параметр dwRetCode функции GrdCodeRun()
  • Вызов функции GcaExit(). Ей также передается код возврата

Кроме того, принудительное завершение приложения происходит в следующих случаях:

  • Наступление таймаута времени выполнения загружаемого кода (3 секунды)
  • Попытка выполнения приложением недопустимого действия (обращение к недопустимым адресам памяти и т.д.)

В примерах в качестве кода возврата с ошибкой используется значение -1. Для упрощения отладки можно возвращать значения макроса _LINE или пользоваться вызовом GcaExit(0, __LINE_). Этот способ поможет определить строку, на которой произошел выход из приложения. Оставлять в конечных версиях возвраты в данном виде нежелательно, так как это может дать дополнительную информацию для злоумышленника.

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

#define ASSERT(cond){if(cond)GcaExit(0,_LINE_);}

ASSERT(x != 0); // Если x!=0, осуществит возврат из программы с указанием номера строки, в которой вставлен ASSERT.

 

...

Expand
title

...

Использование арифметики с плавающей точкой
За вычисления с плавающей точкой отвечает библиотека libm из комплекта GCC. Полное описание математических функций, доступных в ней, можно найти в документации к данной библиотеке. Для каждой функции имеется 2 варианта: обычный, для вычислений с двойной точностью (тип double), а также с приставкой «f», для вычислений с половинной точностью (тип float).