本帖最后由 一只耳朵怪 于 2018-6-25 15:46 编辑
大家好:
我在用6678进行多核同步,在共享内存里开一个8个的数组,每个元素对应一个核,主核对应的元素置0使能从核开始运行,从核之前一直轮询主核对应的元素,全部从核对应的元素置0使能主核开始运行,主核之前轮询。可是从核如果一个一个运行就可以,如果一起运行的话,就不能使对应元素值置0,貌似死置完零又被置1了,因为我有语句:
while(Mark[core_num])
[
Mark[core_num] = 0;
Cache_wb(&Mark[core_num], 4, Cache_Type_ALL, TRUE);
]
之后就一直停在:
while(Mark[0])
[
Cache_inv(&Mark[0], 32, Cache_Type_ALL, TRUE);
asm (" NOP 9");
asm (" NOP 9");
asm (" NOP 9");
asm (" NOP 9");
asm (" NOP 9");
]
主核的程序是:
printf("使能从核运行2n");
Mark[0] = 0;
Cache_wbInv(&Mark[0], 4, Cache_Type_ALL, TRUE);
platform_delay(30);
printf("等待从核运行完成2n");
while(Mark[1]|Mark[2]|Mark[3]|Mark[4]|Mark[5]|Mark[6]|Mark[7])
[
Cache_inv(&Mark[1], 28, Cache_Type_ALL, TRUE);
]
主核停在了轮询上,应该不存在cache 一致性的问题,我每次都writeback和invalide了。最后看共享内存里面,除了Mark[7] = 0,其他的都是1,不知道为啥,很纠结!请专家不吝赐教!跪谢!
0