S32K144 Autosar OS最小系统实现编译与通用 s32k144 autosar os最小系统 基于s32ds搭建的autosar os最小系统编译器采用gcc或者iar选一实现os跑起来、亮灯。 各种s32k14x系列开发板通用。 s32k1xx系列如s32k144、s32k146、s32k148均可用。搞嵌入式最爽的瞬间是什么当然是第一次把系统跑起来灯亮起来那刻。今天咱们手把手在S32K144上撸个AUTOSAR OS最小系统用GCC编译器代码直接怼到开发板上看效果。上硬菜前的准备开发板S32K144EVB其他S32K1xx系列板子也通用环境S32DS for ARM 2.2别用太老的版本基础技能会点灯、知道啥是任务调度新建工程别踩坑在S32DS里新建AUTOSAR工程时重点盯住三个地方选MCU型号时直接搜S32K144Toolchain选GCC默认路径别乱改勾选OS和BSW基础模块!新建工程截图示意OS配置实战技巧打开OS配置工具重点配置两个地方// Os_Cfg.h 关键参数 #define OS_TASK_COUNT 2 // 至少一个启动任务应用任务 #define OS_ALARM_COUNT 1 // 定时器报警用来闪灯 // 任务堆栈别抠门 const OsTaskConfigType TaskConfig[] { { /* Startup任务 */ .priority 10, .stack_size 1024, // 裸奔够用了 .entry_point Startup_Task }, { /* 闪灯任务 */ .priority 5, .stack_size 512, .entry_point Blink_Task } };这里有个骚操作启动任务里手动激活闪灯任务比用Alarm更直观。手撕闪灯代码s32k144 autosar os最小系统 基于s32ds搭建的autosar os最小系统编译器采用gcc或者iar选一实现os跑起来、亮灯。 各种s32k14x系列开发板通用。 s32k1xx系列如s32k144、s32k146、s32k148均可用。GPIO初始化别傻乎乎写寄存器AUTOSAR有现成的Dio模块// 红灯接PTD15 void Init_LED(void) { Port_Init(Port_Config); // 端口时钟自动使能 Dio_WriteChannel(DioConf_DioChannel_LED_RED, STD_LOW); } TASK(Blink_Task) { while(1) { Dio_FlipChannel(DioConf_DioChannel_LED_RED); // 翻转电平 OsSleep(500); // 单位毫秒实测误差±3ms } }重点说下OsSleep——这货底层用的是SysTick但AUTOSAR做了封装不用自己折腾定时器中断。烧录翻车急救当代码下进去灯不亮时先看启动任务有没有执行上电瞬间GPIO会有电平跳变用J-Link Commander读PC指针halt regs pc如果PC卡在0xFFFFFFFE八成是栈溢出把任务栈调大再试。跨型号移植秘籍换S32K146/S32K148只需改两处工程属性里换MCU型号更新链接脚本中的Flash/RAM大小MEMORY { m_text (RX) : ORIGIN 0x00000000, LENGTH 0x00040000 /* K144是256KB */ m_data (RW) : ORIGIN 0x1FFF8000, LENGTH 0x00008000 }不同型号的LED引脚可能不同查板子的原理图改Dio配置就行。最后上电那刻红灯开始有节奏地眨眼——成了这系统虽然简陋但任务调度、定时器、外设驱动这些核心要素全齐活。下次想加CAN通信直接往任务里塞发送函数就行。