首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Arduino上使用PROGMEM中结构函数指针

在Arduino上使用PROGMEM中结构函数指针
EN

Stack Overflow用户
提问于 2016-01-03 13:41:15
回答 1查看 1K关注 0票数 1

我试图从存储在PROGMEM中的结构中读取一个函数指针,然后将一个值(输入)传递给相应的函数并保存返回的值,但是我找不到正确的语法。

代码语言:javascript
复制
uint8_t (*pStateFunc) (uint8_t);
uint8_t input; 
uint8_t nextstate;

enum MENUSTATES {STATE1, STATE2};

typedef struct PROGMEM {
  unsigned char state;
  uint16_t someNumber;   // Just arbitrary information
  uint8_t (*pFunc) (uint8_t input);
} MENU_STATE;

const MENU_STATE menu_state[] PROGMEM = {
  //  state  someNumber  pFunc
  {STATE1,   2,          NULL}, 
  {STATE2,   4,          doSomething},
  {0,        0,          NULL}
  };


// Get the Function 
pStateFunc = (PGM_VOID_P) pgm_read_byte(&menu_state[1].pFunc); 

// Execute the Function and save the returned state
nextstate = pStateFunc(input);

// Function Definition
uint8_t doSomething(u8int_t input){
    return STATE1;
}

我得到的只是来自Arduino IDE 1.6.5的以下错误:

代码语言:javascript
复制
invalid conversion from 'const void*' to 'uint8_t (*)(uint8_t) {aka unsigned char (*)(unsigned char)}' [-fpermissive]

如何从PROGMEM读取函数并正确执行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-03 13:53:29

你似乎只读了一个字节--我认为pgm_read_ptr会更合适。你需要把它转换成正确的类型:

代码语言:javascript
复制
typedef uint8_t (*StateFunc) (uint8_t);
pStateFunc = (StateFunc) pgm_read_ptr(&menu_state[1].pFunc); 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34577142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档