(智能车比赛)基于 ADS 逐飞库 英飞凌 TC264 377系列 的多核使用经验

多核并行主要有两个方面

一,程序,变量储存地址设置

二,运行核选择

一、内存分配

概念及过程描述

尽量将不同的功能划分为各个模块,然后交给不同的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里设置与中断对应的优先级

TC377是一款嵌入式微控制器,其定时器模块可以产生中断,以实现定时功能。下面是TC377定时器中断的基本步骤: 1. 配置定时器模块:设置定时器的计数值、时钟频率等参数,使其能够按照预定的时间间隔产生中断。 2. 配置中断控制器:使能定时器中断,并设置中断优先级。 3. 编写中断服务函数:当定时器产生中断时,中断服务函数会被调用,可以在其中实现具体的定时功能。 4. 启动定时器:使定时器开始计数,当计数值达到预定值时,会产生中断,触发中断服务函数的执行。 下面是一个简单的示例代码,用于实现每隔1秒产生一次定时器中断: ``` #include <tc377.h> void timer_isr() // 定时器中断服务函数 { // 在这里实现定时功能 } int main() { // 配置定时器 TC377_Timer_Setup(1000000); // 定时器时钟频率为1MHz TC377_Timer_SetCount(1000000); // 定时器计数值为1秒 TC377_Timer_EnableInterrupt(); // 使能定时器中断 TC377_Interrupt_SetPriority(TC377_TIMER_IRQ, 1); // 设置定时器中断优先级 // 注册中断服务函数 TC377_Interrupt_RegisterHandler(TC377_TIMER_IRQ, timer_isr); // 启动定时器 TC377_Timer_Start(); while (1) { // 主循环 } return 0; } ``` 在上面的代码中,我们使用TC377的定时器模块实现了每隔1秒产生一次定时器中断,并在中断服务函数中实现了具体的定时功能。注意,中断服务函数的实现需要根据实际需求进行编写。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零质量泡沫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值