vxWorks中的多核间的通信

本文探讨vxWorks操作系统中,核间通信如何借助中断机制进行实现。通过分析全局变量的功能和中断控制器的处理流程,揭示了核间中断驱动控制器如何设置路由信息。
摘要由CSDN通过智能技术生成
平台介绍:
loongson3a-4核cpu,vxWorks6.8环境

一,核间通信的控制器驱动

核间通信是通过中断来进行实现的。系统中定义了两个全局变量,是用来管理核间通信的,看看他们作用具体是什么?

_WRS_DATA_ALIGN_BYTES(32) INT_CTLR vxbSbIntCtlr[VX_MAX_SMP_CPUS];

typedef struct sb1IntCtlr
    {
    volatile UINT64 *bcm1xxxIntMaskL;
    volatile UINT64 *bcm1xxxIntStatusBaseL;
    volatile UINT64 *bcm1xxxIntMapBaseL;
    volatile UINT64 *bcm1xxxLdtIntClearL;
    } INT_CTLR;
这个全局变量看起来不是很明显,具体呢就是记录核间中断的寄存器的地址,这样呢每次触发一个核间中断呢只需要通过这个全局变量来进行设置就行了。

MIPS_SB_INT_CTLR_DRVCTRL * pVxbPMipsSbIntCtlrDrvCtrl;

typedef struct mipsSbIntCtlrDrvCtrl
    {
    VXB_DEVICE_ID        pInst;
    struct intCtlrHwConf isrHandle;
    cpuset_t             enabledCpus;
    int                  defaultCpu;
    BOOL                 initialized;
    } MIPS_SB_INT_CTLR_DRVCTRL;
这个呢记录了默认的cpu以及核间中断时的中断处理函数。

二,核间通信控制器初始化

看看这个核间中断驱动控制器的处理化:

LOCAL void vxbMipsSbIntCtlrInstInit
    (
    VXB_DEVICE_ID pInst
    )
    {
    HCF_DEVICE * pHcf = hcfDeviceGet (pInst);

/*获取bcmFamily这个资源的值*/
    if (devResourceGet (pHcf, "bcmFamily", HCF_RES_INT, (void *) &vxbBcmFamily)	!= OK)
	return;
/*构建pVxbPMipsSbIntCtlrDrvCtrl这个结构体*/
    pVxbPMipsSbIntCtlrDrvCtrl = (MIPS_SB_INT_CTLR_DRVCTRL *)hwMemAlloc \
                              (sizeof(MIPS_SB_INT_CTLR_DRVCTRL));


    pVxbPMipsSbIntCtlrDrvCtrl->pInst = pInst;
    pInst->pDrvCtrl = pVxbPMipsSbIntCtlrDrvCtrl;

/*记录已经初始化了的cpu的数量*/
    pVxbPMipsSbIntCtlrDrvCtrl->enabledCpus = (1 << vxCpuIdGet());

/*记录初始化pVxbPMipsSbIntCtlrDrvCtrl这个结构体的cpu*/
    pVxbPMipsSbIntCtlrDrvCtrl->defaultCpu = vxCpuIdGet();

/*通过这个函数获取这个核间通信控制器的资源,中断号,中断引脚,中断路由等信息*/
    intCtlrHwConfGet(pInst,
                (HCF_DEVICE *)pInst->pBusSpecificDevInfo,
                &(pVxbPMipsSbIntCtlrDrvCtrl->isrHandle));

    pInst->pMethods = &mipsSbIntCtlr_methods[0];
    }
简单看一下这获取资源的函数:
STATUS intCtlrHwConfGet
    (
    VXB_DEVICE_ID               pInst,
    HCF_DEVICE *                pHcf,
    struct intCtlrHwConf *      pEntries
    )
    {
    struct intrCtlrInputs *     pCtlrInputs;
    struct intrCtlrXBar *       pXbar;
    struct intrCtlrCpu *        pCpuTable;
    struct intrCtlrPriority *   pPrioTable;
    stru
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值