试图让我自己的printf函数来处理变量

时间:2017-04-24 10:10:02

标签: function pointers variables printf quotation-marks

我正在编程显示器,我可以使用此功能在显示器上显示字符:

void printChar(char *tekst, uint16_t xPos, uint16_t yPos)
{
    //calculate the position the first byte should be placed on
    uint16_t startPos = yPos * width_disp_byte + (xPos/8);
    int i;

    //put all 16 bytes on the right place on the display based on the users' input
    for(i=0;i<16;i++)
    {
        test_image[startPos]=convertChar(*tekst,i);
        startPos += width_disp_byte;
    }
}

基本上我得到一个角色并在我构建的数组中找到它的位置。比我拿16字节的数据并把它放在显示器上。

下一步是在显示屏上显示整数变量。我编写了一个代码如下:

void printVariable(uint16_t integer, uint16_t xPos, uint16_t yPos)
{
    uint16_t value;
    uint16_t remainder;
    char printValue;

    //max value is 9999 that can be displayed, caused by the '4' in the for loop
    for(int i = 0; i < 4;i++)
    {
        value = integer;
        //int_power calculates the divisor. going from 3 to 0. cq 1000,100,10,1.
        value /= int_power(10,(3-i));

        //remove highest number from integer value (for 312, remove the 3 by substracting 300)
        integer -= (value) * (int_power(10,(3-i)));

        // add '0' to value to get the correct ASCII value.
        value += '0';

        // convert uint16_t value into char
        printValue = value;
        printChar(printValue,xPos,yPos);

        xPos += 8;
    }
}

我拿一个变量,比方说3164.第一步是将它除以1000.答案是3,因为它是一个整数。我使用printChar函数显示这个字符。

下一步从3164中删除3000并将值除以100,得到1.再次使用printf函数打印此值。然后将100从164中移除,然后除以10等等

此代码的使用非常有限,但它完全符合我想要实现的目标。无需在字符串中打印变量。

这里的问题是printChar函数不像我在代码中编写的那样工作。通常我会像这样使用printChar函数:

printChar("F",0,0);

这将在topleft角中打印字符F.如果我想使用这样的printChar函数,它不起作用:

printChar(printValue,xPos,yPos);

警告信息显示:

incompatible integer to pointer conversion passing 'char' to parameter of type 'char *'; take the address with &

如果我带的地址是&amp;我没有在显示屏上显示正确的值。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您只想打印一个字符,因此您不需要指针作为参数。你的功能会像这样工作:

void printChar(char tekst, uint16_t xPos, uint16_t yPos){
...
    //depending on the Parameters of your convertChar- function either
    ... = convertChar(tekst,i); // if you can modify this function too

    ... = convertChar(&tekst,i); // if the function is to use as it is

}

不同之处在于 char tekst ,而不是 char * text