PROGMEM从字符串数组中获取单个字符
PROGMEM get single char from string array?
我正在尝试从字符串数组中获取单个字符,以写入Arduino上的LCD显示器。只是我没有真正得到任何有效的数据。
LCD写入代码:
void LCD::drawString(uint16_t x, uint16_t y, uint16_t color, uint16_t background, uint8_t str_nr)
{
for(uint16_t i=0; getChar(str_nr, i) != ' '; i++)
{
drawChar(x + i * FONT_WIDTH, y, color, background, getChar(str_nr, i) );
}
}
StringPool.h:
#ifndef STRINGPOOL_H_
#define STRINGPOOL_H_
#include <avr/pgmspace.h>
#define STR_SCREEN_CAL 0
#define STR_HIGHSCORE 1
#define STR_SETTINGS 2
#define STR_BACK 3
#define STR_MENU_MAIN_TITLE 4
#define STR_MENU_MAIN_PLAY 5
#define STR_MENU_SCORE_TEXT 6
#define STR_MENU_SETTINGS_RESETSCORE 7
#define STR_MENU_SETTINGS_SCORERESET 8
#define STR_MENU_SETTINGS_CAL 9
#define STR_MENU_SETTINGS_BRIGHTNESS 10
#define STR_GAME_SCORE_NEW 11
#define STR_GAME_SCORE_NONE 12
#define STR_GAME_TOUCH_SCREEN 13
#define STR_GAME_TO_CONTINUE 14
uint8_t getChar(uint8_t str_nr, uint8_t offset);
#endif /* STRINGPOOL_H_ */
StringPool.cpp:
#include "StringPool.h"
const PROGMEM char screen_cal[] = "Screen Calibration";
const PROGMEM char highscore[] = "Highscore";
const PROGMEM char settings[] = "Settings";
const PROGMEM char back[] = "Back";
const PROGMEM char menu_main_title[] = "Floppy Bird";
const PROGMEM char menu_main_play[] = "Play";
const PROGMEM char menu_score_text[] = "The current highscore is";
const PROGMEM char menu_settings_resetscore[] = "Reset Highscore";
const PROGMEM char menu_settings_scorereset[] = "Highscore Reset!";
const PROGMEM char menu_settings_cal[] = "Calibrate Touch";
const PROGMEM char menu_settings_brightness[] = "Set LCD Brightness";
const PROGMEM char game_score_new[] = "New Highscore!";
const PROGMEM char game_score_none[] = "No Highscore";
const PROGMEM char game_touch_screen[] = "Touch the screen";
const PROGMEM char game_to_continue[] = "to continue";
const char * StringPool[] =
{
screen_cal,
highscore,
settings,
back,
menu_main_title,
menu_main_play,
menu_score_text,
menu_settings_resetscore,
menu_settings_scorereset,
menu_settings_cal,
menu_settings_brightness,
game_score_new,
game_score_none,
game_touch_screen,
};
uint8_t getChar(uint8_t str_nr, uint8_t offset)
{
char * ptr = (char *)pgm_read_word( &StringPool[str_nr] );
return pgm_read_byte(ptr + offset);
// return pgm_read_byte( &(StringPool[str_nr]) + offset); // doesn't work either
}
函数getChar
似乎没有返回正确的数据。
如何从progmem中的字符串数组中读取单个字符?
尝试
char * ptr = (char *)pgm_read_word( StringPool[str_nr] );
而是省略了&,因为这将产生指向字符串的指针的地址。指针的地址在RAM中。StringPool[str_nr]已经是您想要的闪存中的地址。
相关文章:
- 与多个 for 循环与单个 for 循环 wrt 相关的性能从多映射获取数据
- 这个针对单个写入器 + 读取器的发布/检查更新类是否可以使用 memory_order_relaxed 或获取/发布以提
- 从单个标志C++获取多个参数
- 如何从用户那里获取单个字符,直到他输入"."或输入
- 获取单个文件的 Clang AST
- 如何从unordered_set获取单个项目
- 如何在单个 (.a) 存档中仅获取所需的对象文件
- 如何使用C Win32 API设置和获取多个值(数组值)到Active Directory中的单个属性
- 如何从文件中写入的UTF-8编码的URDU字符串中获取单个字符
- 如何获取从GetPrivateProfileSection()返回的单个字符串
- 如何使用 clang 获取单个 cpp 文件的 AST
- PROGMEM从字符串数组中获取单个字符
- 如何使用OpenCV和Eclipse从视频剪辑中获取单个帧
- CRITICAL_SECTION用于设置和获取单个布尔值
- 获取单个平面中两个矢量之间角度的有效方法
- 从字符串中获取单个字符串字符
- 获取单个非循环链表中指针后面节点的值
- 我如何从boost库(例如shared_pointer)中获取单个元素
- 从java中的多字节变量中获取单个字节
- 从boost::python::object列表中获取单个元素,用于python例程