AutoSar点灯
各位一灯大师,还在打电动哦,点个灯吧
-
硬件环境: S32K144Q176EVB
-
软件环境:(App)->Vector Davinci Developer
(BSW)->Vector Davinci Config
(MCAL)->EB treos + S32K14X_MCAL_4.2_RTM_HF3_1.0.1
如果你没有Vector工具链, 我也帮不了你 EB和MCAL可以在NXP官网免费下载安装激活
这篇文章只记录我在配置第一个Autosar工程中遇到的问题,至于软件安装请参考其他地方,至于其中的原理我也不是很懂,我也是初学者,我是参考了Vector的例程和一些网上的资料 -
1.MCAL配置
打开EB,File->New->Config Proj

这里注意选4.2.2,这里MCAL和EB已经关联起来

这里注意ECU ID应该和.dbc中对应 Target 选ARM/S32K14X 并勾选Auto add…(不勾选貌似会出错,我没勾选之后无法添加一些模块)

添加需要用到的MCAL模块,这里BASE和Resource默认添加就好,由于我们只需要点个灯所以Port和Dio是必要的,Mcu(时钟配置,电源模式配置)也是必要的,但是我不理解的是Can模块在例程中使用到了,为啥不在这里配置?

熟悉的界面兄弟们, 这里MCU这个模块就不配置了,因为现在还没仔细研究怎么配置,等会直接拷贝例程里面的Mcu_PBCfg.c就行,总之保持这里的默认配置待会肯定用不了会卡在时钟初始化

改一下名吧阿伟,EVB上LED GREEN对应引脚为PTE22

这里PCR = 32*PortE(4)+22

PortE对应ID=4

添加一个Ch 对应id为22 刚刚说了LED GREEN对应PTE22引脚
Generate Project一下

新建一个文件夹如图,待会用来存放总的配置工程

右键这儿, 选Im- and Exporter到处MCAL的配置文件xx.arxml

导出到刚刚新建的文件夹, 在里面新建一个文件MCAL_Config.arxml并选择
至此MCAL配置完成 -
2.App配置
这里先配置SWC这些
但是这里呢新建工程要先在Davinci Config中新建

在Cfg中新建工程,目录选刚建好的文件夹

选single file,其他保持默认

编译器我选iar,因为我装的是iar

在这里找到input files导入DBC,不导入dbc貌似工程啥都没有,我的dbc是直接用的例程里面的里面包含了诊断和网络管理报文

可以看到解析dbc过后有三个ECU节点,这里我们的ECU命名为MyECU

导入过后可以看到一些模块就自动生成好了,但还有很多错误,待会解决,然后倒入MCAL配置

先把这里Mcu模块删了,待会导入MCAL时会重新生成,怎么删呢?

点setting进去就可以delete单独模块

选中点红叉就行


选择我们刚刚在EB中导出的MCAL_Config.arxml

大家注意看Import Mode是Add,如果是在EB里面做了修改,这里可以选Merge或者Replace

可以看到Davinci cfg 已经导入了MCAL
这里先不要关Cfg,打开Davinci Developer待会可以同步

developer里选open work

目录如下,这个是在CFG里面生成的

新建一个SWC Type


再新建一个

新建一个Interface



这里的话IoHwAb 会有一个Runable(函数)SetLed(led_ch, led_state)供client调用,最终调用Dio驱动

双击编辑IoHwAb


新建一Pp供Rp调用,选择刚刚建立的Interface
Port Interface等概念呢只是抽象,最终要调用的是Runable

在IoHwAb SWC中新建Server Runable

好了兄弟们IoHwAb好了,那么Server通过Interface 端口 Pp提供给Client Rp Operations,那么这路就该配置Client LedBlinkSWC了

铁子们懂了吧

新建一个Runable 并设置Trig为周期性500ms触发

设置一下Access Point

新建个Irv用来记录LED 状态,是可以用Dio Flip来实现闪灯,但是我这里是在学习下Irv使用方法
点击这玩意,这是工程自动创建的

拖过来吧阿伟

Graphic->Draw Connector

developer 点一下保存

CFG就可以同步,App设计就完成,现在配置BSW
- 3.BSW配置
兄弟们,我是初学者我现在也不是很懂怎么配,所以大多数参考例程

可以看到Task没有,需要自己创建

先配置Isr好了,为啥是这几个Isr呢(根据导入的DBC生成,或许MCAL也会影响这里的生成),因为我们用了Can 然后SysTimer提供必要的Systick(心跳),为Alarm提供基准,所以也是默认生成的
这里的interrupt source


对比startup.s 和例程中的Os_Hal_Entry_Lcfg.c就可以看出中断源分别为94 97 98

优先级设为小于32(数字大于32,数字越高,优先级越低,比如NMI的优先级为0),因为这里是CAT2中断,优先级高于32的是CAT1不受OS管理,没有统一的入口函数,低于32的为CAT2受OS管理,入口统一,中断下半部都放到一个Thread中跑

为BSW搞一个Task吧,具体怎么配现在不知道

再搞一个Task 跑LED灯吧

再搞一个InitTask吧,里面要进行EcuM_StartupToo 进行BSW初始化和RteStart, 当时调试发现如果不调用SchM_Init 和 Rte_Start 配置好的Alarm没有被设置周期,也就不会周期性触发事件,Task得不到运行
待会再回来配置OS,这个Task搞成Basic(只调用一次),并且要AutoStart(不然不会加入Schedule),由于它优先级比较高,所以会在StartOS后首先被调用并执行一次


直接根据提示设置




这里要把Entry 改为 Reset_Handler 因为在Os_Hal_Entry_Lcfg.c中会重建中断向量表,这个函数定义在Startup.s


这里SysTimer的 Tick Per Base设置为8000(参考例程) 否则这个定时器中断太快,会发生Overload(来不及处理,当时我没配置这里在Error_Hook里面发现了这个问题)

Can里面添加Clock Ref

波特率按照推荐配置

添加Counter Ref

由于闪个灯不需要网络管理,所以这里直接删除CanNm 和Nm模块,由于诊断功能这里也不配置,删除CanTp和Dcm

由于删除了Nm所以这里改为NONE

可以看到I-PDU里面很多消息没有被匹配(网络管理和诊断),在EcuC 和PduR中删除即可

PduR就保留这么几帧消息

Rte里面把BSW Runable map到Task中去


验证通过了,表示可以生成代码了,其实中间还有一些步骤主要是根据CFG提升修改,为什么这么修改我现在也不是很懂,这篇文章只是做一下笔记,记录我遇到的问题,下篇文章将用IAR进行工程集成,编译,调试
本文记录了在S32K144平台上利用AutoSar实现LED点亮的过程,包括MCAL、App及BSW配置步骤,适合初学者参考。
3428





