一、静态代码包相关的问题
1.由于芯片厂商的epd文件有问题,导致在使用vector的工具集成静态代码后,在达芬奇工具中缺少模块和配置选项

2.达芬奇与EB生成的FLS模块的CFG文件不一致,导致存储功能实现有问题
二、一类中断触发不准确的问题
由于我们的项目需要用到电机算法进行电机控制,为了电机算法相应更快速,使用PWM波触发电机算法控制,但出现了电机算法触发周期不准确并有阻塞的现象。

经过排查,修复项如下
1. DCache使能
cpp
/* Invalidate cache (L1CSR1) */
__MTSPR(1010, 0x02);
/* Synchronize instruction stream */
asm("msync");
/* Wait until cache invalidation has finished (L1CSR1) */
do
{
__MTSPR(1010, (0x01) | (0x01 << 5));
value = (uint32)__MFSPR(1010);
}while ((value & 0x02) == 0x02);
__MTSPR(1010, (0x01) | (0x01 << 5));
初始化DTCM区域
cpp
void BrsMain_MemoryInit_StageZero_Hook(uint32 coreId)
{
memset(Start_Address, offset, Size);
}
2.打开pflash预取
cpp
PFLASH.PFCR1.R = 0xFFFF0A55;
PFLASH.PFCR2.R = 0xFFFF0055;
3.一类中断的操作
3.1.使能一类中断
一类中断不受OS管理,所以需要手动使能
cpp
INTC_LLD_Set_IRQ_Priority(IntrId, IntrPri);
INTC_LLD_Set_IRQ_Enable(IntrId);
3.2退出一类中断现场
cpp
uint32 intc_eoir = INTC_0.EOIR[0].R; /* read register of EOIR */
Motor_Control();
INTC_0.EOIR[0].R = intc_eoir; /* write register of EOIR,exit interrupt */
4.配置ITCM和DTCM区域
通过达芬奇工具配置,并将电机控制代码放入该区域,提高代码运行速度。具体步骤如下:
4.1.vLinkGen配置
在vBaseEnv中加入这两区域

配置区域的地址以及大小


配置电机控制的代码和变量相关的section和group
section配置如下



group配置如下,注意将group链接至section



4.2.MemMap配置
在developer中创建关于电机的代码、变量名称

在达芬奇中的MemMap中配置以下内容


GenericMappings


MemorySection

经过上述配置,就可以将电机算法的代码进行加速运算。
三、event触发不正常的问题
在多次重启程序后,会出现某些event无法正常触发的现象,通过排查,发现出问题的时候,setalarm的时间戳会在短时间内增加到一个很大的数值,导致程序后续运行的判断条件无法成立,不能触发event。

经过尝试,将alarm的初始化由绝对(硬件PIT计时)变为相对(从当前时刻计时),这个问题会消失,但具体原因还仍需研究。

以上就是目前项目中遇到的一些比较代表性的问题,如果后续再遇到一些典型问题,会继续更新,和大家分享。也欢迎大家分享在国产化项目中遇到的一些具有代表性的问题,一起学习,共同进步!!!