Цитата(uriy @ Apr 3 2016, 21:13)

...
Функции GreenLed(NewValue) и BlueLed(NewValue) отлично работают.
Не могу понять как передать данные в скрипт из железки.
Как например считать нажатие кнопки IsKeyPressed?
В железке функция выглядит так
Код
cell IsKeyPressed(AMX *amx, const cell *params)
{
cell ret = 0;
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) != GPIO_PIN_RESET)
ret = 1;
return ret;
}
Скрипт вызывает эту функцию и ret корректно изменяется.
Да вроде все правильно сделали. Если native функция должна вернуть единственное значение, которое умещается в размер cell, то просто возвращаете его: return 'значение'.
Если надо вернуть много значений, то возвращаете их через ссылочные параметры функции. Например, вот функция, возвращающая массив значений:
Код
native get_tempcoef(Float:coef[6]);
и ее C-реализация:
Код
cell AMX_NATIVE_CALL n_gettempcoef(AMX * amx, const cell* params)
{
static const float foo[6] = { bla-bla };
// Получаем адрес массива coef:
cell* dst = amx_Address(amx, params[1]);
// и заполняем его значениями.
for (uint32_t i = 0; i < 6; ++i)
{
float t = foo[i];
dst[i] = amx_ftoc(t);
}
return 0;
}