32ビットARMコアマイクロコントローラプロジェクトのCプログラムを作成しました。このプロジェクトは、私はディスプレイ用LCDの内蔵RAMにロードするテキストのための機能を書かれているLCDを持って、この関数は次のとおりです。関数の呼び出しに使用されるコードメモリ(C ARM-GCC)
/*-------------------------------------------
* Name : LCD_Show_String
* Description : Load a line of text to LCD's RAM
* Argument(s) : row - load to which row in LCD.
* *str - The text
* *font_table - the font table to be used
* *font_descriptor - information of the font table
* align - Align ALIGN_LEFT, ALIGN_CENTER or ALIGN_RIGHT
* print_now - 0: Do not print the text on LCD now
* 1: Print the text on LCD immediately
* mode - PIXEL_ON, PIXEL_OFF or PIXEL_XOR (method to print each pixel)
*
* Return value: Total width of the string printed.
* -----------------------------------------------*/
UINT16_T LCD_Show_String(UINT8_T row, const UINT8_T *str, const UINT8_T *font_table, \
const UINT16_T *font_descriptor, LCD_Align_t align,
UINT8_T print_now, LcdPixelMode mode)
私はこの関数を呼び出すとき:
LCD_Show_String(7, "TEST", small_font_bitmap,
small_font_des, ALIGN_CENTER, 0, PIXEL_ON);
私は各ことがわかりました私はこの関数を呼び出すときに、40バイトのコードメモリを使い果たしました。また、関数内のパラメータの数を増やすと、必要なメモリが増えます。たとえば、もともと私はこの関数に13個のパラメータを持っていました。この関数を呼び出すたびに最大約100バイトを使いました。
私はそれは正常ですか?なぜそれは非常に多くのメモリを使い果たしたのですか?使用するメモリを減らすことはできますか?
コンパイラはARM GCCコンパイラ
ありがとうございます。
MCUにはどのくらいのRAMが搭載されていますか? –
それは16KBのRAMを持っていますが、私はRAMではなくプログラムメモリについて話しています。それは256KBのメモリを持っていますが、私はほとんどそれを使い果たしています。 – eepty
'-Os'モードでコンパイルしようとしましたか? –