で動作するように私自身の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 &
私は&でアドレスを取得した場合、私が正しいを得ることはありません値が表示されます。
どうすればこの問題を解決できますか?
のchar型のtekstであるそれは最後の時間は、Cを果たし時間前、私でしたが、私が思うに、あなたには、いくつかの操作を行いますもの、それはより良いことができます。あなたの関数は文字列のアドレスを期待していますが、あなたはただ一つのcharを必要とします。私はあなたが定数または定数(& - 演算子)のアドレスを渡すことができるかどうかはわかりません。私は、どのtestImageとconvertCharが使用されているのか分かりません。とpowを使用してより良いことはありません。結果がゼロになるまで10で割ることができます。私が覚えている限りでは。 "printChar(char tekst)"と入力した場合、問題は終了するはずですか? – am2
私は経験豊富なCプログラマではありませんので、より良い結果が得られるはずです。 'testImage'は各ASCII文字はこの配列内に16バイトを持ち、convertChar関数はASCII文字ごとに正しい16バイトを選択する関数です 私のプログラムを編集してprintCharのポインタを削除しましたそれは今正しく動作するようです!ありがとう! –
@ am2は、printChar関数内のポインタを削除することで問題を解決しました。あなたは答えとしてこれを投稿することができますので、私はこの質問を回答として指定できますか? –