【问题标题】:Embedded: C Coding for Ctrl-C interrupt in u-boot terminal嵌入式:u-boot 终端中用于 Ctrl-C 中断的 C 编码
【发布时间】:2013-02-12 20:05:46
【问题描述】:

我是嵌入式编程的初学者。我正在研究起重机板(ARM Cortex A8)。源代码位于github

我创建了一个 C 代码来使通过 GPIO 连接的外部 LED 闪烁。它可以在 u-boot 控制台中作为命令执行。目前,

我无法通过 Ctrl-C 停止 LED 的闪烁。
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);
             }

        }
}

请指导我。

【问题讨论】:

  • 显示你的代码,除非我们知道你做了什么,否则你不能指望我们帮你找出错误。
  • 您的控制台输入是类似 RS232 的连接,还是连接了 USB 或 PS/2 键盘?
  • @MartinThompson 是的。该板通过UART连接。

标签: c embedded arm interrupt u-boot


【解决方案1】:

试试ubootctrlc功能:

if(ctrlc())
    return 1; // or whatever else you want to do

【讨论】:

  • 谢谢。但是,我的代码会不断地向 GPIO 引脚发送数据(1 或 0)。我如何在其中获得意见?
  • @Gomu:对不起。我认为U-Boot可以通过ctrlc函数处理Ctrl+C。请查看更新的答案。
【解决方案2】:

你是在低级工作,所以你需要使用的方法也是低级的:

  • 检查循环中的 UART“数据可用”标志 - 这非常依赖于硬件,但通常涉及读取寄存器、屏蔽一些位并查看是否设置了正确的位。
  • 如果数据可用,检查它是否是 CTRL-C (0x03) 字符,如果是则退出,如果不是则丢弃

现在看到了 nneonneo 的回答,我认为这就是 ctrlc() 函数的作用......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多