ADK4.0.0编译CSR8670函数指针问题
ADK4.0.0编译CS8670的相关代码,在调用如下代码时出现编译错误/* 函数名列表 */
struct _m_usmart_nametab
{
void *func; /* 函数指针 */
const uint8 *name; /* 函数名(查找串) */
};
struct _m_usmart_nametab usmart_nametab[] =
{
{(void *)led_set, (uint8 *)("void led_set(u8 sta)")},
{(void *)bird_set, (uint8 *)("void bird_set(void)")},
};
编译出现如下问题
Function pointers may not be used in a 16 bit context. 本帖最后由 chenaiguo0503 于 2017-5-4 16:03 编辑
C:\Users\Agness Chen\Desktop\QQ截图20170504155823.png 本论坛懂CSR这个的应该很少。 wajlh 发表于 2017-5-4 17:02
本论坛懂CSR这个的应该很少。
是啊,CSR的软件架构还是有些复杂,相对于有些封闭,学习起来,着实有些困难。还得慢慢啃。 Function pointers may not be used in a 16 bit context.
函数指针不能在16位的环境中使用. LZ,此操作的目的是什么?仅仅为了驱动GPIO?
如果是请直接使用API
另外,CSR的操作,建议尽量参考源代码的语法方式实现相关功能。它的编译器与其他MCU的是有差异的。代码空间也很有限! liujinhan 发表于 2017-5-8 10:07
LZ,此操作的目的是什么?仅仅为了驱动GPIO?
如果是请直接使用API
主要目的是想整合一套类似CLI的,这样遍历USB下发过来的命令时候,可以灵活的执行对应的函数子模块,就不需要用switch case这样的场景了。
刚刚了解到了,CSR8670的ADK编译环境,由于STACK的众所周知的原因,不支持动态性的函数指针操作。 zack_cf 发表于 2017-5-8 09:27
Function pointers may not be used in a 16 bit context.
函数指针不能在16位的环境中使用. ...
字面理解是16位机不支持函数指针,
估计具体的原因还是因为ADK环境的限制,这款片子与众不同。所以也在慢慢的啃噬当中。 chenaiguo0503 发表于 2017-5-8 11:09
主要目的是想整合一套类似CLI的,这样遍历USB下发过来的命令时候,可以灵活的执行对应的函数子模块,就不 ...
CSR 的USB也有对应的HID command liujinhan 发表于 2017-5-8 11:14
CSR 的USB也有对应的HID command
你说的HID command是驱动层的还是应用层的? 应用层
你用的是source吧?UsbDeviceClassSendReport 这个API liujinhan 发表于 2017-5-8 14:11
应用层
你用的是source吧?UsbDeviceClassSendReport 这个API
嗯,是的,这个API有用到,在向Host发送时候用到
我们内部把它称为类似MAC层一套API,我们在这上面实现CLI的功能。
你对CSR8670熟悉吗? 简单玩过一下,不是很深入。
建议还是用switch case 来得简单。功能实现后,再做其他。指针用多了容易错误,还必须内存申请释放。本身空间就不多了。 liujinhan 发表于 2017-5-8 19:28
简单玩过一下,不是很深入。
建议还是用switch case 来得简单。功能实现后,再做其他。指针用多了容易错误 ...
是的,函数指针这条路行不通,只能用switch case这种土方法来完成。
希望以后问题可以跟您多请教请教。 管理员怎么把我这个帖子转到ARM的版块了?
页:
[1]