jenya7 0 17 февраля, 2016 Опубликовано 17 февраля, 2016 · Жалоба Файл amx.c сдержит реализацию виртуальной машины на переносимом С. amxexec_thumb2.s содержит оптимизированную реализацию виртуальной машины на асме. Их не получится скомпилировать вместе в одном проекте. Выбирайте что-то одно. странно. а у меня скомпилировалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 5 3 апреля, 2016 Опубликовано 3 апреля, 2016 · Жалоба Наконец-то добрались руки до реализации. Накидал такой скрипт #pragma dynamic 100 native GreenLed(NewValue) native SetPWM(NewPWM); native BlueLed(NewValue); native IsKeyPressed(); main() { GreenLed(0); BlueLed(1); for(;;) { if(IsKeyPressed()) { GreenLed(1); BlueLed(1); } else { GreenLed(0); BlueLed(0); } } } Функции 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 корректно изменяется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ashr 0 4 апреля, 2016 Опубликовано 4 апреля, 2016 · Жалоба ... Функции 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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться