免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4145 | 回复: 4
打印 上一主题 下一主题

[内核模块] 这个代码是什么意思啊:goto_start = (void (*)(U32, U32))a2 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-22 10:50 |只看该作者 |倒序浏览
这是boorloader里面的nandflash的call_linux函数里面的下面是call_linux的代码:
void call_linux(U32 a0, U32 a1, U32 a2)
{
        void (*goto_start)(U32, U32);
       
        rINTMSK=BIT_ALLMSK;
       
        cache_clean_invalidate();
        tlb_invalidate();       

        __asm{
//                mov        r0, a0//%0
//                mov        r1, a1//%1
//                mov        r2, a2//%2
                mov        ip, #0
                mcr        p15, 0, ip, c13, c0, 0        /* zero PID */
                mcr        p15, 0, ip, c7, c7, 0        /* invalidate I,D caches */
                mcr        p15, 0, ip, c7, c10, 4        /* drain write buffer */
                mcr        p15, 0, ip, c8, c7, 0        /* invalidate I,D TLBs */
                mrc        p15, 0, ip, c1, c0, 0        /* get control register */
                bic        ip, ip, #0x0001                        /* disable MMU */
                mcr        p15, 0, ip, c1, c0, 0        /* write control register */
                //mov        pc, r2
                //nop
                //nop
                /* no outpus */
                //: "r" (a0), "r" (a1), "r" (a2)
        }
//        SetClockDivider(1, 1);
//        SetSysFclk(FCLK_200M);                //start kernel, use 200M
        //SET_IF();
        goto_start = (void (*)(U32, U32))a2;
        (*goto_start)(a0, a1);       
}
我想是不是go_start函数的起始地址是a2,参数是a1,a2;但我完全没见过这种奇怪的写法,完全弄不懂,求解释。

论坛徽章:
0
2 [报告]
发表于 2012-08-22 12:46 |只看该作者
goto_start是个函数指针,把a2强制变为同类型函数指针赋值给它,调用该函数,a0,a1是参数

论坛徽章:
0
3 [报告]
发表于 2012-08-22 13:24 |只看该作者
怎么还有这种写法啊void (*)(U32, U32)回复 2# janetliu9


   

论坛徽章:
0
4 [报告]
发表于 2012-08-22 22:07 |只看该作者
函数指针,返回值为void,参数类型为u32,u32

论坛徽章:
0
5 [报告]
发表于 2012-08-23 14:24 |只看该作者
四楼回了,函数指针
回复 3# dsj889


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP