多核并行主要有两个方面
一,程序,变量储存地址设置
二,运行核选择
一、内存分配
概念及过程描述
尽量将不同的功能划分为各个模块,然后交给不同的cpu运行。 或者说不同的cpu负责运行不同的功能,cpu之间以少量的参数进行配合交互,这样可以尽最大化利用多核cpu的资源效率。
具体做法
尽量将.h以及相关函数都存放在#prama section all "cpux_dsram"和#pragma section all restore之间即可
二、中断配置
1.概念及过程描述(可跳过直接去看2.具体操作)
我在一开始使用TC377时一直有个疑问就是,把变量和函数放到那个cpux_main,然后在哪里申请中断 就是那个cpu提供中断服务函数吗?
结果发现不是的,调试的时候,发现中断都在THread[core0]里运行
后来再看zf_driver_pit.c的时候,发现
这里配置的是中断服务。
然后顺藤摸瓜进去之后发现。isr_config.h里不光是定时器中断,还有其他外部中断和dma中断。
isr_config.h里设置的是服务宏定义
上面顺带有注释
//INT_SERVICE: 宏定义决定中断由谁处理,也称为服务提供者(在TC377中,中断被叫做服务),可设置范围IfxSrc_Tos_cpu0 IfxSrc_Tos_cpu1 IfxSrc_Tos_cpu2 IfxSrc_Tos_dma 不可设置为其他值
于是我就顺手把传感器类相关的中断全都改成cpu1,下载运行后发现 寄,运
行不了。
然后又是上网查资料
后来在看一篇文章(此处为链接)时,看到一幅图片
它说,写interrupt函数时要同时声明core和中断优先级。
这一幕我似曾相识,发现和isr.c中的声明函数张的差不多。
于是就在想这个0,会不会就是cpu0的意思。
毕竟这是配置中断接口的,
随手改成 ‘1’后 ,直接下载。
TC377成功运行
再次调试
传感器相关函数的全都到Thread core1里运行。
2.具体做法
1、更改isr_config.h中对应中断的宏定义配置
可设置范围为IfxSrc_Tos_cpu0 IfxSrc_Tos_cpu1 IfxSrc_Tos_cpu2 IfxSrc_Tos_dma
![在这里插入图片描述](https://img-blog.csdnimg.cn/72d11bed202742e08d8e058897ea1933.png
2、在isr.c里
更改中断配置
IFX_INTERRUPT(cc60_pit_ch0_isr, X, CCU6_0_CH0_ISR_PRIORITY)
中的X,0对应cpu0,1对应cpu1。
左边箭头是中断服务函数名称,中间是指提供中断的cpuX,右边的是指在isr_config.h里设置与中断对应的优先级