UINT32 smpCnt=0;
void myIdleTaskShow(void)
{
UINT32 currentCpuIdx;
cpuset_t cpuSet;
UINT32 cpuIdx=0;
while(1)
{
currentCpuIdx=vxCpuIndexGet();
cpuSet=vxCpuConfiguredGet();
//cpuIdx=_WRS_CPU_INDEX_GET ();
printf("currentCpuIdx=%d,cpuSet=%d,smpCnt=%x\n",currentCpuIdx,cpuSet,smpCnt);
smpCnt++;
taskDelay(100);
}
}
void CCIdle(void)
{
TASK_ID tId;
tId=taskSpawn("ccTask", 150,0,8192,myIdleTaskShow,0,1,2,3,4,5,6,7,8,9);
}
这个程序运行在ZYNQ7K硬件平台上,硬件平台内部有2个ARMv7的内核,两个CPU分别是CPU0和CPU1,默认从CPU0启动,两个CPU同时运行同一个VxWorks Kernel程序。从执行结果分析:
--同一个任务可以在CPU0上运行,也可以在CPU1上运行
--2个CPU共享内存,都可以访问到smpCnt变量
--2个CPU共享同一个外设,都通过同一个串口打印输出。