変数

2017-04-24 4 views
0

で動作するように私自身のprintf関数を取得しようとすると、私はディスプレイをプログラミングしていると私は、この機能を使って、ディスプレイに文字を表示することができています:変数

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最初のステップは、それは整数なので答えは、3になります1000ことによって、これを分割することであると言うことができます:私はこのようなコードを書かれています。 printChar関数を使用してこの文字を表示します。

次の手順では、3164から3000を削除し、値を100で割ります。この値もprintf関数を使用して出力されます。その後、164は100から除外され、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 & 

私は&でアドレスを取得した場合、私が正しいを得ることはありません値が表示されます。

どうすればこの問題を解決できますか?

+0

char型のtekstであるそれは最後の時間は、Cを果たし時間前、私でしたが、私が思うに、あなたには、いくつかの操作を行いますもの、それはより良いことができます。あなたの関数は文字列のアドレスを期待していますが、あなたはただ一つのcharを必要とします。私はあなたが定数または定数(& - 演算子)のアドレスを渡すことができるかどうかはわかりません。私は、どのtestImageとconvertCharが使用されているのか分かりません。とpowを使用してより良いことはありません。結果がゼロになるまで10で割ることができます。私が覚えている限りでは。 "printChar(char tekst)"と入力した場合、問題は終了するはずですか? – am2

+0

私は経験豊富なCプログラマではありませんので、より良い結果が得られるはずです。 'testImage'は各ASCII文字はこの配列内に16バイトを持ち、convertChar関数はASCII文字ごとに正しい16バイトを選択する関数です 私のプログラムを編集してprintCharのポインタを削除しましたそれは今正しく動作するようです!ありがとう! –

+0

@ am2は、printChar関数内のポインタを削除することで問題を解決しました。あなたは答えとしてこれを投稿することができますので、私はこの質問を回答として指定できますか? –

答えて

0

1文字だけを印刷したいので、パラメータとしてポインタを使用する必要はありません。あなたの関数は次のように動作します:

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 *テキスト