Встроено: кодирование C для прерывания Ctrl-C в терминале u-boot

Я новичок во встроенном программировании. Работаю над крановым щитом (ARM Cortex A8). Исходный код доступен на github.

Я создал код C, чтобы внешний светодиод, подключенный через GPIO, мигал. Его можно выполнить в консоли u-boot как команду. В настоящее время,

Я не могу остановить мигание светодиода с помощью Ctrl-C.
Где находится код прерывания Ctrl-C?

ret=set_mmc_mux();
if(ret<0)
    printf("\n\nLED failed to glow!\n\n");
else{
        if(!omap_request_gpio(lpin))
    {
        omap_set_gpio_direction(lpin,0);

        for(i=1;i<21;i++)
        {
            ctr=0;
            if((i%2)==0)
            {
                num=num-1;
                omap_set_gpio_dataout(lpin,num);
            }
            else
            {
                num=num+1;
                omap_set_gpio_dataout(lpin,num);
            }

                    udelay(3000000);
             }

        }
}

Пожалуйста, направьте меня.


person Gomu    schedule 27.02.2013    source источник
comment
Покажите свой код, вы не можете рассчитывать, что мы поможем вам найти ошибку, если мы не знаем, что вы сделали.   -  person harald    schedule 27.02.2013
comment
Используется ли вход вашей консоли через соединение типа RS232, или у вас подключена клавиатура USB или PS / 2?   -  person Martin Thompson    schedule 27.02.2013
comment
@MartinThompson Да. Плата подключена по UART.   -  person Gomu    schedule 27.02.2013


Ответы (2)


Попробуйте функцию uboot ctrlc:

if(ctrlc())
    return 1; // or whatever else you want to do
person nneonneo    schedule 27.02.2013
comment
Спасибо. Но мой код будет постоянно отправлять данные (1 или 0) на вывод GPIO. Как я могу получить информацию об этом? - person Gomu; 27.02.2013
comment
@Gomu: Извини. Я думаю, что U-Boot может обрабатывать Ctrl + C через функцию ctrlc. См. Обновленный ответ. - person nneonneo; 27.02.2013

Вы работаете на низком уровне, поэтому методы, которые вам нужно использовать, также низкоуровневые:

  • Проверьте флаг UART «данные доступны» в вашем цикле - это очень зависит от оборудования, но обычно включает чтение регистра, маскирование некоторых битов и проверку правильности установки.
  • если данные доступны, проверьте, является ли это символом CTRL-C (0x03), выйдите, если да, отмените, если нет

Теперь, увидев ответ nneonneo, я предполагаю, что это то, что делает функция ctrlc() ...

person Martin Thompson    schedule 27.02.2013