chenaiguo0503 发表于 2017-5-4 15:58:47

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:01:01

本帖最后由 chenaiguo0503 于 2017-5-4 16:03 编辑

C:\Users\Agness Chen\Desktop\QQ截图20170504155823.png

wajlh 发表于 2017-5-4 17:02:31

本论坛懂CSR这个的应该很少。

chenaiguo0503 发表于 2017-5-8 08:32:06

wajlh 发表于 2017-5-4 17:02
本论坛懂CSR这个的应该很少。

是啊,CSR的软件架构还是有些复杂,相对于有些封闭,学习起来,着实有些困难。还得慢慢啃。

zack_cf 发表于 2017-5-8 09:27:55

Function pointers may not be used in a 16 bit context.

函数指针不能在16位的环境中使用.

liujinhan 发表于 2017-5-8 10:07:53

LZ,此操作的目的是什么?仅仅为了驱动GPIO?
如果是请直接使用API

另外,CSR的操作,建议尽量参考源代码的语法方式实现相关功能。它的编译器与其他MCU的是有差异的。代码空间也很有限!

chenaiguo0503 发表于 2017-5-8 11:09:54

liujinhan 发表于 2017-5-8 10:07
LZ,此操作的目的是什么?仅仅为了驱动GPIO?
如果是请直接使用API



主要目的是想整合一套类似CLI的,这样遍历USB下发过来的命令时候,可以灵活的执行对应的函数子模块,就不需要用switch case这样的场景了。

刚刚了解到了,CSR8670的ADK编译环境,由于STACK的众所周知的原因,不支持动态性的函数指针操作。

chenaiguo0503 发表于 2017-5-8 11:11:03

zack_cf 发表于 2017-5-8 09:27
Function pointers may not be used in a 16 bit context.

函数指针不能在16位的环境中使用. ...

字面理解是16位机不支持函数指针,

估计具体的原因还是因为ADK环境的限制,这款片子与众不同。所以也在慢慢的啃噬当中。

liujinhan 发表于 2017-5-8 11:14:25

chenaiguo0503 发表于 2017-5-8 11:09
主要目的是想整合一套类似CLI的,这样遍历USB下发过来的命令时候,可以灵活的执行对应的函数子模块,就不 ...

CSR 的USB也有对应的HID command

chenaiguo0503 发表于 2017-5-8 11:18:13

liujinhan 发表于 2017-5-8 11:14
CSR 的USB也有对应的HID command

你说的HID command是驱动层的还是应用层的?

liujinhan 发表于 2017-5-8 14:11:35

应用层
你用的是source吧?UsbDeviceClassSendReport 这个API

chenaiguo0503 发表于 2017-5-8 16:05:38

liujinhan 发表于 2017-5-8 14:11
应用层
你用的是source吧?UsbDeviceClassSendReport 这个API

嗯,是的,这个API有用到,在向Host发送时候用到

我们内部把它称为类似MAC层一套API,我们在这上面实现CLI的功能。

你对CSR8670熟悉吗?

liujinhan 发表于 2017-5-8 19:28:15

简单玩过一下,不是很深入。
建议还是用switch case 来得简单。功能实现后,再做其他。指针用多了容易错误,还必须内存申请释放。本身空间就不多了。

chenaiguo0503 发表于 2017-5-9 08:29:51

liujinhan 发表于 2017-5-8 19:28
简单玩过一下,不是很深入。
建议还是用switch case 来得简单。功能实现后,再做其他。指针用多了容易错误 ...

是的,函数指针这条路行不通,只能用switch case这种土方法来完成。

希望以后问题可以跟您多请教请教。

chenaiguo0503 发表于 2017-5-9 08:30:26

管理员怎么把我这个帖子转到ARM的版块了?
页: [1]
查看完整版本: ADK4.0.0编译CSR8670函数指针问题