当前位置:  技术问答>linux和unix

list_for_each_entry在keil下编译出错

    来源: 互联网  发布时间:2016-07-26

    本文导语:  我将linux下一个程序移植到Keil for arm下. 遇到一个郁闷的问题就是在linux下一个宏 /**  * list_for_each_entry - iterate over list of given type  * @pos: the type * to use as a loop cursor.  * @head: the head for your list.  * @member:...

我将linux下一个程序移植到Keil for arm下. 遇到一个郁闷的问题就是在linux下一个宏
/**
 * list_for_each_entry - iterate over list of given type
 * @pos: the type * to use as a loop cursor.
 * @head: the head for your list.
 * @member: the name of the list_struct within the struct.
 */
#define list_for_each_entry(pos, head, member)
for (pos = list_entry((head)->next, typeof(*pos), member);
     prefetch(pos->member.next), &pos->member != (head); 
     pos = list_entry(pos->member.next, typeof(*pos), member))


#define list_entry(ptr, type, member) 
container_of(ptr, type, member)
#define container_of(obj, type, memb) 
((type *)(((char *)obj) - offset_of(type, memb)))
#define offset_of(type, memb) 
((unsigned long)(&((type *)0)->memb))

我在keil下用这个宏怎么写都出错. 即使我将嵌套的宏化简化成单独一个宏编译还是说类型匹配出错.
有没有这个函数的详细资料.

|
菜鸟帮顶

|
list_for_each_entry 用到了gcc的一个特性
能通过结构体里的一个元素得到结构体本身的首地址
最重要的是typeof ,这个是gcc的扩展

linux内核依赖gcc的特性,我只听说过似乎intel的编译器能编译linux内核


|

上面的containerof宏 就是啊  问题不在这
prefetch(pos->member.next), 这个预取指令 可能就是问题所在

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3