реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Скрипты в микроконтроллере
Jenya7
сообщение Feb 17 2016, 15:53
Сообщение #31


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(shreck @ Feb 2 2016, 09:19) *
Файл amx.c сдержит реализацию виртуальной машины на переносимом С.
amxexec_thumb2.s содержит оптимизированную реализацию виртуальной машины на асме.
Их не получится скомпилировать вместе в одном проекте. Выбирайте что-то одно.

странно. а у меня скомпилировалось.
Go to the top of the page
 
+Quote Post
uriy
сообщение Apr 3 2016, 15:13
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Наконец-то добрались руки до реализации.
Накидал такой скрипт
Код
#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 корректно изменяется.
Go to the top of the page
 
+Quote Post
shreck
сообщение Apr 4 2016, 09:24
Сообщение #33


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(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;
}

Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 00:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016