包含/使用scanf时我的系统停止

时间:2016-05-10 00:35:08

标签: c raspberry-pi scanf bare-metal newlib

我一直在研究" os" (对于我的Raspberry Pi B +来说还不是真正的操作系统)当我处理数据输入时,我无法使scanf()工作,每次我将它包含在我的操作系统中时,我的操作系统甚至都没有启动。我搜索了很多网站,但似乎这是我犯的错误(非常可能),而且我不知道如何找到它,所以我请大家帮忙。我将提供所需的所有代码,如果您还需要其他任何东西,请告诉我。

我的输入功能:

int _read(int file, char *buf, int len) {
    volatile int i;
    for(i = 0; i < len; i++)
    {
        buf[i] = RPI_GetChar();
        if(buf[i] == '\n')
        {
            return i;
        }
    }
    return i;
}

char RPI_GetChar(void)
{
    unsigned char in;
    unsigned char pot = 0;
    char out = 0;
    unsigned char confirm = false;
    unsigned char shift = false;
    while(!confirm)
    {
        in = RPI_UartRead();
        if(in & 0x80)
        {
            pot = in & 0x0F;
        }
        else
        {
            switch(in)
            {
            case 0:
                break;
            case 1:
                //Enter - Space
                if(shift)
                    return ' ';
                else{
                    return '\n';
                }
                break;
            case 2:
                //Shift - Select key
                if(shift)
                    confirm = true;
                else
                    shift = true;
                break;
            case 3:
                out = 97;
                break;
            case 4:
                out = 107;
                break;
            case 5:
                out = 117;
                break;
            case 6:
                if(shift)
                    out = 33;
                else
                    out = 48;
                break;
            case 7:
                break;
            }
        }
        sendChar(out+pot);
        mvCursor(getx()-1, gety());
    }
    mvCursor(getx()+1, gety());
    return out+pot;
}

我的Cflags:-O1 -mfpu = vfp -mfloat-abi = hard -march = armv6zk -mtune = arm1176jzf -s -nartartfiles -Wall

我已经解决了为printf()启用VFP的问题,因此它应该是一个问题。

int kernel_main()
{
    initLCD();
    RPI_UartInit();
    char i = 'a';

    printf("Hi?\n");
    // Always when I add scanf to my code, my os does not start
    scanf("%c", &i); 
    printf("Hi %c\n", i);
    while(1);
}

我已经测试了相同的代码,但使用了getchar()而不是scanf(),并且它运行得很好。并且RPI_GetChar()本身没有任何问题。

感谢您的帮助。 (即使没有开始,我的意思是我的操作系统根本没有开始,就像kernel_main函数是空的一样)

0 个答案:

没有答案