网易首页 > 网易号 > 正文 申请入驻

UDS 0x22服务DID读取处理:基于AUTOSAR的SW-C与NvM数据获取深度解析

0
分享至

一、概述

在AUTOSAR架构中,UDS 0x22服务(ReadDataByIdentifier)用于通过DID从ECU读取应用数据或存储数据。DCM(Diagnostic Communication Manager)本身并不存储任何应用数据,当DCM的DID级处理函数被触发后,需要通过RTE(Run-Time Environment)调用相应的软件组件(SW-C)或基础软件模块(BSW)来获取实际数据。本文将深入解析实时动态数据和存储数据两类DID的数据获取原理,并提供C++代码实现示例。

二、DID数据的来源分类

DID数据通常分为两大类:

类型

数据示例

数据来源

读取方式

实时动态数据

车速、发动机转速、水温、油门踏板位置、车门状态

应用层SW-C周期性计算或采集

通过RTE调用SW-C的输出端口获取

存储数据

VIN码、硬件版本号、软件版本号、生产日期、配置参数

非易失性存储器(EEPROM/Flash)

通过NvM模块读取

实时动态数据反映车辆当前运行状态,具有强时效性;存储数据则持久化于NVM中。理解这一分类是正确设计DID映射配置的前提。

三、AUTOSAR工具链DID配置概述

在深入代码实现之前,首先需要理解DID在AUTOSAR工具链(如ETAS ISOLAR/Virtual PC、Vector DaVinci)中的配置流程,这是后续代码能够正确运行的基础。

配置步骤概览:

  1. CDD(CANdb++ Diagnostic Description)准备 :创建DID定义文件,配置DID标识符、数据类型、数据长度等

  2. 工具链配置 :

    • 在DaVinci Developer中为应用层诊断SW-C创建RAM数组(如 NvMShw_xxxx )

    • 创建NvM Block Needs,配置存储属性(上电读取、下电存储等)

    • 将NvM Block与RAM数组关联

  3. 关联Client/Server接口 :

    • 将DCM模块的DID关联接口至应用层诊断SW-C

    • 将NvM模块的DID关联接口至应用层诊断SW-C

    • 在SWC中建立DID的Access Point

  4. 代码生成 :配置完成后,工具链会生成以下内容:

    • BSW模块的C源文件和头文件(如 Dcm.c 、 NvM.c )

    • RTE骨架代码

    • 自定义DID处理函数的框架(待开发者填充)

四、通过RTE获取实时数据——以车速DID 0x0202为例 4.1 配置映射关系

在系统工程设计中,首先需要在RTE配置工具中将DID 0x0202映射到应用层软件组件的输出端口。这通常通过以下方式实现:

  1. 在DaVinci Developer中创建SW-C的Sender-Port,定义车速数据元素的数据类型

  2. 配置DCM模块中DID 0x0202的数据源属性,将其指向上述SW-C的输出端口而非NvM存储

  3. 配置RTE数据映射,将DCM读取请求路由到对应的SW-C端口

这种设计使得DCM无需区分数据来源,RTE作为抽象层自动完成路由,极大提升了软件的复用性和可维护性。

4.2 读取流程


4.3 代码实现示例

以下代码演示了在AUTOSAR架构下,DCM如何通过RTE获取实时车速数据的完整实现。

4.3.1 应用层SW-C代码

// ============================================================================
// 文件: Sensor_SWC.h
// 描述: 应用层传感器处理软件组件头文件
// ============================================================================

#ifndef SENSOR_SWC_H
#define SENSOR_SWC_H

#include "Std_Types.h" // AUTOSAR标准类型定义
#include "Rte_Sensor_SWC.h" // RTE生成的头文件

#ifdef __cplusplus
extern "C" {
#endif

// 车速数据类型定义
typedef uint16 VehicleSpeedType; // 车速范围: 0-65535 km/h
typedef uint16 EngineSpeedType; // 发动机转速
typedef uint8 TemperatureType; // 温度值

// ============================================================================
// Runnable实体函数声明
// ============================================================================

/**
* @brief Runnable_ReadVehicleSpeed - 读取车速值
* @details 该Runnable由RTE周期性调度,从CAN驱动读取最新车速并更新到输出端口
* @param none
* @return void
*/
extern FUNC(void, SENSOR_SWC_CODE) Runnable_ReadVehicleSpeed(void);

/**
* @brief Runnable_ReadEngineSpeed - 读取发动机转速
* @details 周期性读取发动机转速值
*/
extern FUNC(void, SENSOR_SWC_CODE) Runnable_ReadEngineSpeed(void);

#ifdef __cplusplus
}
#endif

#endif /* SENSOR_SWC_H */

// ============================================================================
// 文件: Sensor_SWC.c
// 描述: 应用层传感器处理软件组件实现
// ============================================================================

#include "Sensor_SWC.h"
#include "CanIf.h" // CAN接口模块
#include "Can.h" // CAN驱动模块

/* 静态变量 - 最新数据值(RAM中的Buffer) */
static VAR(VehicleSpeedType, SENSOR_SWC_VAR) s_lastVehicleSpeed = 0U;
static VAR(EngineSpeedType, SENSOR_SWC_VAR) s_lastEngineSpeed = 0U;
static VAR(uint8, SENSOR_SWC_VAR) s_speedValidFlag = 0U; // 数据有效性标志

/* CAN接收的数据结构定义 */
typedef struct {
uint16 speed_raw; // 原始车速值
uint8 signal_quality; // 信号质量标志
} CanSpeedMsgType;

/**
* @brief Runnable_ReadVehicleSpeed - 周期间隔5ms运行
* @details 1. 通过CanIf读取CAN总线上的车速信号
* 2. 进行数据处理和有效性校验
* 3. 通过RTE接口将数据发送到输出端口
*/
FUNC(void, SENSOR_SWC_CODE) Runnable_ReadVehicleSpeed(void)
{
CanSpeedMsgType rxMsg;
VehicleSpeedType processedSpeed = 0U;
uint8 retVal = 0U;
/* 步骤1: 通过CanIf从CAN驱动读取原始报文 */
/* 假设车速报文CAN ID为0x3A0 */
retVal = CanIf_ReadRxPduData(0x3A0U, (uint8*)&rxMsg, sizeof(rxMsg));
if (retVal == E_OK)
{
/* 步骤2: 数据处理 - 原始值转换为实际物理值 */
/* 假设转换公式: 实际车速 = 原始值 * 0.1 */
if (rxMsg.signal_quality == 0x01U) /* 有效信号 */
{
processedSpeed = (VehicleSpeedType)((uint32)rxMsg.speed_raw * 10U / 100U);
s_lastVehicleSpeed = processedSpeed;
s_speedValidFlag = 1U;
}
else
{
/* 信号无效,保持上次有效值 */
s_speedValidFlag = 0U;
}
}
else
{
/* CAN读取错误,维持上次值或给默认值 */
s_speedValidFlag = 0U;
}
/* 步骤3: 通过RTE_Send接口将数据发送到输出端口 */
/* 该端口已在工具链中配置映射,连接到DCM的DID 0x0202数据源 */
(void)Rte_Send_VehicleSpeed(s_lastVehicleSpeed);
}

4.3.2 DCM DID级处理函数实现

// ============================================================================
// 文件: Dcm_DidProcessing.h
// 描述: DCM模块DID级处理函数头文件
// ============================================================================

#ifndef DCM_DID_PROCESSING_H
#define DCM_DID_PROCESSING_H

#include "Std_Types.h"
#include "Dcm_Cfg.h"

/* DCM API返回类型定义 */
#define DCM_E_OK 0x00U /* 成功完成 */
#define DCM_E_FAIL 0x01U /* 一般错误 */
#define DCM_E_PENDING 0x02U /* 异步操作进行中 */

/* 响应数据缓冲区最大长度 */
#define DID_MAX_RESPONSE_LEN 128U

/* 预定义的DID标识符 */
#define DID_VEHICLE_SPEED 0x0202U /* 实时车速 */
#define DID_VIN_CODE 0xF190U /* VIN码(标准定义) */
#define DID_HW_VERSION 0xF180U /* 硬件版本号 */
#define DID_SW_VERSION 0xF188U /* 软件版本号 */

/* DID处理函数类型定义 */
typedef uint8 (*Dcm_DidReadHandlerType)(uint8* dataBuffer, uint16* dataLength);

/**
* @brief Dcm_ReadDid_VehicleSpeed - 处理车速DID 0x0202的读取
* @param dataBuffer - 输出缓冲区指针,用于存放读取的数据
* @param dataLength - 输出数据长度指针
* @return 执行状态码
*/
extern FUNC(uint8, DCM_CODE) Dcm_ReadDid_VehicleSpeed(uint8* dataBuffer, uint16* dataLength);

#endif /* DCM_DID_PROCESSING_H */

// ============================================================================
// 文件: Dcm_DidProcessing.c
// 描述: DCM模块DID级处理函数实现
// ============================================================================

#include "Dcm_DidProcessing.h"
#include "Rte_Dcm.h" /* RTE头文件,包含Rte_Read_SWC接口 */
#include "SchM_Dcm.h"

/**
* @brief Dcm_ReadDid_VehicleSpeed - 处理车速DID 0x0202的读取
* @details
* 1. 通过RTE_Read接口获取SW-C提供的最新车速值
* 2. 将收到的数据封装到数据缓冲区中
* 3. 设置数据长度返回给DCM上层处理
*/
FUNC(uint8, DCM_CODE) Dcm_ReadDid_VehicleSpeed(uint8* dataBuffer, uint16* dataLength)
{
VehicleSpeedType speedValue = 0U;
uint8 retStatus = DCM_E_OK;
/* 参数有效性检查 - MISRA C规范要求 */
if ((NULL_PTR == dataBuffer) || (NULL_PTR == dataLength))
{
return DCM_E_FAIL;
}
/* 通过RTE接口读取SW-C中的车速数据 */
/* Rte_Read_VehicleSpeed已在工具链配置时生成 */
if (Rte_Read_VehicleSpeed(&speedValue) == RTE_E_OK)
{
/* 将车速值以小端序格式写入响应缓冲区 */
/* 车速数据长度为2字节 */
dataBuffer[0U] = (uint8)(speedValue & 0xFFU); /* 低字节 */
dataBuffer[1U] = (uint8)((speedValue >> 8U) & 0xFFU); /* 高字节 */
*dataLength = 2U;
retStatus = DCM_E_OK;
}
else
{
/*
* RTE读取失败时的错误处理:
* 返回NRC 0x22 - 条件不满足
*/
retStatus = DCM_E_FAIL;
}
return retStatus;
}

4.3.3 DCM配置回调注册

// ============================================================================
// 文件: Dcm_Cfg.c
// 描述: DCM启动配置与DID回调映射(由工具链自动生成框架,开发者填充)
// ============================================================================

#include "Dcm_Cfg.h"
#include "Dcm_DidProcessing.h"

/* DID处理函数表 */
/* 该结构体由配置工具自动生成,开发者需要将自定义处理函数填充到对应DID条目 */
const Dcm_DidReadHandlerType Dcm_DidReadHandlerTable[][2] = {
/* {DID值, 处理函数指针} */
{DID_VEHICLE_SPEED, Dcm_ReadDid_VehicleSpeed}, /* 0x0202 - 实时车速 */
{DID_VIN_CODE, Dcm_ReadDid_VinCode}, /* 0xF190 - VIN码 */
{DID_HW_VERSION, Dcm_ReadDid_HardwareVersion}, /* 0xF180 - 硬件版本 */
/* 更多的DID条目根据需要添加 */
};

/* DCM主控逻辑接收到0x22服务请求时,框架层代码会查找该表 */
uint8 Dcm_DispatchReadDidRequest(uint16 did, uint8* responseBuffer, uint16* responseLen)
{
uint8 idx;
for (idx = 0U; idx < NUM_OF_HANDLERS; idx++)
{
if (Dcm_DidReadHandlerTable[idx][0] == did)
{
if (Dcm_DidReadHandlerTable[idx][1] != NULL_PTR)
{
return ((Dcm_DidReadHandlerTable[idx][1])(responseBuffer, responseLen));
}
else
{
return DCM_E_FAIL; /* 空函数指针 */
}
}
}
return DCM_E_FAIL; /* 未找到对应的DID */
}
五、通过NvM获取存储数据——以VIN码DID 0xF190为例 5.1 配置存储映射

VIN码等存储数据的配置需要在工具链中建立DID到NvM Block的映射:

  1. 在DaVinci Developer中为诊断SW-C创建NvData类型的接口,定义VIN码结构体

  2. 配置NvM Block Descriptor,指定RAM Block大小(如17字节存储VIN码)、存储属性(立即存储或周期存储)

  3. 在执行NvM_ReadAll接口的初始化阶段,将Flash中的VIN码数据同步到RAM Mirror

  4. DCM的DID配置中标记数据来源为 NvM_SERVICE ,设置对应的NvM块ID;这样在运行时,DCM级处理函数会调用 NvM_ReadBlock 而非 Rte_Read ,实现通过存储管理块(而非实时RTE)读取持久数据

5.2 NvM数据操作模型


在AUTOSAR NvM架构中:

  1. Nv Block :实际存储在EEPROM或Flash中的数据

  2. RAM Block :上电读取时的数据镜像,便于快速访问

  3. Immediate Block :用于Crash Data,具有最高优先级(优先级0),发生事件时必须立即写入存储,不能被延迟

5.3 同步机制的选择

NvM提供两种数据同步访问方式:

同步方式

特点

适用场景

隐式同步

应用与NvM共享RAM Block,应用直接读写RAM,NvM负责与NVM的数据同步

对响应时间敏感,实时性要求高的读取场景

显式同步

应用需显式调用NvM_ReadBlock/NvM_WriteBlock发起读写请求

对数据一致性要求严格,或处理大块数据的场景


5.4 读取流程


5.5 代码实现示例

5.5.1 NvM Block配置结构(BSW层配置)

// ============================================================================
// 文件: NvM_Cfg.h
// 描述: NvM模块配置定义(由工具链生成,可手工修改)
// ============================================================================

#ifndef NVM_CFG_H
#define NVM_CFG_H

#include "Std_Types.h"

/* 定义NvM块ID */
#define NVM_BLOCK_ID_VIN 0x01U /* VIN码块ID */
#define NVM_BLOCK_ID_HW_VERSION 0x02U /* 硬件版本块ID */
#define NVM_BLOCK_ID_SW_VERSION 0x03U /* 软件版本块ID */
#define NVM_BLOCK_ID_CALIB_DATA 0x04U /* 标定数据块ID */

/* VIN码存储定义(17位字符 + 1字节结束符) */
#define VIN_DATA_LENGTH 18U
#define VIN_STANDARD_LENGTH 17U /* 标准VIN码长度 */

/* NvM块属性配置 */
typedef struct {
uint16 blockId; /* 块标识符 */
uint16 blockSize; /* 数据长度(字节) */
uint8 priority; /* 优先级(0最高,255最低) */
boolean isImmediate; /* 是否为立即块(Crash Data) */
boolean readAllInit; /* 是否上电自动读取 */
} NvM_BlockConfigType;

/* 实际NvM块配置表(由BSW配置工具生成) */
const NvM_BlockConfigType NvM_BlockConfigTable[] = {
{NVM_BLOCK_ID_VIN, VIN_DATA_LENGTH, 10U, FALSE, TRUE},
{NVM_BLOCK_ID_HW_VERSION, 16U, 20U, FALSE, TRUE},
{NVM_BLOCK_ID_SW_VERSION, 32U, 20U, FALSE, TRUE},
{NVM_BLOCK_ID_CALIB_DATA, 256U, 5U, FALSE, TRUE}
};

#endif /* NVM_CFG_H */

5.5.2 NvM回调函数实现

// ============================================================================
// 文件: NvM_Callbacks.c
// 描述: NvM模块回调函数实现
// ============================================================================

#include "NvM_Callbacks.h"
#include "NvM.h"
#include "Dcm.h"

/* 异步读取状态结构体 */
typedef struct {
uint16 requestedDid; /* 请求的DID */
uint8 responseBuffer[DID_MAX_RESPONSE_LEN]; /* 响应缓冲区 */
uint16 responseLen; /* 实际数据长度 */
boolean pending; /* 异步请求进行中标志 */
} NvM_AsyncReadContextType;

/* 全局异步读取上下文 */
static VAR(NvM_AsyncReadContextType, NVM_VAR) s_asyncReadCtx;

/* VIN码数据RAM Mirror */
static VAR(uint8, NVM_VAR) s_vinData[VIN_DATA_LENGTH] = {0U};

/**
* @brief Dcm_ReadDid_VinCode - VIN码DID处理函数
* @details 通过NvM_ReadBlock发起异步读取请求
*/
FUNC(uint8, DCM_CODE) Dcm_ReadDid_VinCode(uint8* dataBuffer, uint16* dataLength)
{
NvM_RequestResultType result;
/* 参数校验 */
if ((NULL_PTR == dataBuffer) || (NULL_PTR == dataLength))
{
return DCM_E_FAIL;
}
/* 检查是否已经有正在进行的异步读取请求 */
if (s_asyncReadCtx.pending == TRUE)
{
/* 异步读取进行中,根据NvM规范返回E_PENDING */
/* DCM框架层会等待回调完成后再组装响应 */
return DCM_E_PENDING;
}
/* 保存上下文信息 */
s_asyncReadCtx.requestedDid = DID_VIN_CODE;
s_asyncReadCtx.pending = TRUE;
/*
* 发起NvM异步读取请求
* NvM_ReadBlock原型: uint8 NvM_ReadBlock(NvM_BlockIdType BlockId, void* BufferPtr)
* 该API将读取请求放入异步队列,完成时自动调用注册的回调函数
*/
result = NvM_ReadBlock(NVM_BLOCK_ID_VIN, (void*)&s_vinData[0]);
if (result == NVM_REQ_OK)
{
/*
* 请求已成功提交,数据暂未返回
* NvM完成读取后会调用回调函数NvM_ReadVinCallback
* 此处返回E_PENDING,DCM等待回调完成后再回复客户端
*/
return DCM_E_PENDING;
}
else if (result == NVM_REQ_PENDING)
{
/* 请求已在队列中,等待处理 */
return DCM_E_PENDING;
}
else
{
/* 请求失败,清除pending标志 */
s_asyncReadCtx.pending = FALSE;
return DCM_E_FAIL;
}
}

/**
* @brief NvM_ReadVinCallback - NvM读取完成回调函数
* @details
* 1. 当NvM_ReadBlock异步读取操作完成后,NvM模块会调用此回调
* 2. 在回调中将读取到的数据复制到响应缓冲区
* 3. 通知DCM模块继续完成响应发送
*/
FUNC(void, NVM_CODE) NvM_ReadVinCallback(NvM_BlockIdType BlockId, NvM_RequestResultType Result)
{
uint8* dataBuffer = NULL_PTR;
uint16 dataLength = 0U;
/* 检查块ID是否正确 */
if (BlockId != NVM_BLOCK_ID_VIN)
{
return;
}
if (Result == NVM_REQ_OK)
{
/* 读取成功,获取DCM的响应缓冲区指针 */
if (Dcm_GetResponseBuffer(&dataBuffer, &dataLength) == E_OK)
{
/* 将VIN码数据复制到DCM响应缓冲区,并设置数据长度 */
(void)memcpy(dataBuffer, s_vinData, VIN_STANDARD_LENGTH);
/* DCM模块完成正响应帧组装 */
Dcm_SendPositiveResponse(DID_VIN_CODE, dataBuffer, VIN_STANDARD_LENGTH);
}
}
else
{
/* 读取失败,需要填充否定响应(NRC 0x22: 条件不满足) */
uint8 nrc = 0x22U;
Dcm_SendNegativeResponse(DID_VIN_CODE, nrc);
}
/* 清除pending标志 */
s_asyncReadCtx.pending = FALSE;
}

5.5.3 NvM初始化与周期调度实现

// ============================================================================
// 文件: NvM_SchM.c
// 描述: NvM模块初始化与周期性任务调度(由SchM配置工具编排集成)
// ============================================================================

#include "SchM_NvM.h"
#include "NvM.h"
#include "NvM_Callbacks.h"

/* 注册回调函数到NvM模块 */
FUNC(void, NVM_CODE) NvM_InitCallbacks(void)
{
/* 注册异步读取完成回调 - NvM配置中以ServicePort形式映射到相应回调入口 */
/* 实际框架调用方式:NvM_SetReadCallback(NVM_BLOCK_ID_VIN, NvM_ReadVinCallback); */
}

/**
* @brief NvM_MainFunction - NvM主调度函数
* @details
* 该函数需要周期性地被SchM(System Clock Manager)调用。
* 它以固定的时间间隔(例如10ms)运行,负责:
* 1. 从异步任务队列中取出读写请求并执行
* 2. 处理基于优先级的任务调度
* 3. 在上电阶段执行NvM_ReadAll将数据从NVM同步到RAM Mirror
* 4. 在需要时将RAM Mirror中的数据写回NVM(WriteAll或WriteBlock)
* 5. 检查CRC校验,管理数据完整性
* 6. 处理错误并触发相应的回调
*/
FUNC(void, NVM_CODE) NvM_MainFunction(void)
{
/* 调用NvM模块主函数,处理队列中的请求 */
NvM_MainFunction_Internal();
}
六、响应发送与各层报文字段说明

DID级处理函数将数据返回后,DCM主状态机会触发响应发送流程:

  1. DCM层 :DCM将已通过PduR注册的Tx回调与响应数据组装成I-PDU,调用 PduR_DcmTransmit

  2. PduR层 :根据配置的路由表确定目的地(通常是CanTp或直接发往CanIf)并转发

  3. CanTp层 :如果需要分段(N_Cro+N_Data),CanTp负责生成FF/CF/FC等N-PDU并调用 CanIf_Transmit

  4. CanIf层 :调用CAN驱动发送CAN帧到总线

以下是实际数据报文格式说明:

报文方向

报文内容(十六进制)

字段解析

请求

22 02 02

22 = SID(0x22);02 02 = DID

正响应

62 02 02 00 20

62 = SID+0x40;02 02 = DID;00 20 = 数据(32 km/h)

负响应

7F 22 31

7F = 负响应标识;22 = SID;31 = NRC(请求超出范围)


七、常见NRC处理

NRC

名称

触发场景

SID

数据字段

诊断仪侧含义

0x13

incorrectMessageLength

报文长度或格式错误

7F

22

请求报文长度无效

0x14

responseTooLong

响应数据超过传输层长度限制

7F

22

响应数据超过CanTp最大分段限制

0x22

conditionsNotCorrect

读取数据的条件不满足(如车速条件)

7F

22

当前条件不允许读取该DID

0x31

requestOutOfRange

DID不存在或当前会话不支持

7F

22

请求的DID无效

0x33

securityAccessDenied

安全访问未解锁

7F

22

需要先通过0x27服务解锁安全等级


八、总结

本文详细解析了AUTOSAR架构下UDS 0x22服务的DID数据读取机制,重点阐述了:

  1. 数据来源分类 :实时动态数据和存储数据两大类,以及它们各自的获取方式和配置要点

  2. 实时数据读取路径 :通过RTE调用应用层SW-C的Runnable,并提供完整代码示例

  3. 存储数据读取路径 :通过NvM模块的异步读取机制,涵盖NvM Block配置、同步方式选择、回调处理与周期调度

在实际工程开发中,开发者需要借助AUTOSAR工具链(如ETAS ISOLAR/Virtual PC、Vector DaVinci、EB tresos)完成DCM、NvM、RTE等相关模块的配置,生成代码框架后,再根据本文提供的示例填充具体的数据读取逻辑。合理区分DID的数据来源类型并选择正确的数据获取路径,是确保诊断服务正确、高效运行的关键。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
清华工程师,把代工做成1700亿大生意

清华工程师,把代工做成1700亿大生意

财天COVER
2026-09-27 19:58:33
孙燕姿上海开唱,因太过肥胖裙子拉链崩到一半拉不上,超尴尬!

孙燕姿上海开唱,因太过肥胖裙子拉链崩到一半拉不上,超尴尬!

荆楚寰宇文枢
2026-09-25 22:30:33
从开的车能看出一个人的家庭条件吗?网友回答太真实了!

从开的车能看出一个人的家庭条件吗?网友回答太真实了!

另子维爱读史
2026-09-27 20:25:28
四川一名53岁寡妇耐不住寂寞,找个大她6岁的男人居然处处算计她

四川一名53岁寡妇耐不住寂寞,找个大她6岁的男人居然处处算计她

小影的娱乐
2026-09-27 18:19:21
多名学生反映吃华科大定制月饼拉肚子,“皇冠幸福里”承认制作,校医院回应暂未接诊病例

多名学生反映吃华科大定制月饼拉肚子,“皇冠幸福里”承认制作,校医院回应暂未接诊病例

大风新闻
2026-09-27 10:03:04
韩国检察厅即将被撤销

韩国检察厅即将被撤销

参考消息
2026-09-27 20:59:26
比亚迪新车官宣:10月13日,正式上市

比亚迪新车官宣:10月13日,正式上市

科技堡垒
2026-09-26 09:16:57
活捉赖清德不再是口号!美军司令亲口承认:留给台岛的时间不多了

活捉赖清德不再是口号!美军司令亲口承认:留给台岛的时间不多了

无悔的灿烂人生
2026-08-17 20:15:59
“这和裸奔有什么区别?”戚薇身穿3D打印水花裙亮相

“这和裸奔有什么区别?”戚薇身穿3D打印水花裙亮相

白宸侃片
2026-09-27 14:29:19
精神的伤,一生都无法真正痊愈

精神的伤,一生都无法真正痊愈

青苹果sht
2026-09-26 05:57:37
人是怎么废掉的?主要就两点:1、人的环境怎样;2、人的想法如何

人是怎么废掉的?主要就两点:1、人的环境怎样;2、人的想法如何

老方
2026-04-05 09:29:12
爷爷带娃半小时,妈妈换尿不湿发现女儿下面流血,崩溃直冲医院,医生:不用治,回家吧!

爷爷带娃半小时,妈妈换尿不湿发现女儿下面流血,崩溃直冲医院,医生:不用治,回家吧!

菁妈育儿
2026-09-22 07:59:21
欧洲想把俄罗斯移出五常?美专家警告,此事落地,中国就是下一个

欧洲想把俄罗斯移出五常?美专家警告,此事落地,中国就是下一个

慕名而来只为你
2026-09-28 03:59:36
天道轮回!这次美国做对了,让日本永难翻身!

天道轮回!这次美国做对了,让日本永难翻身!

兵国大事
2026-09-28 00:05:51
四名议员施压特朗普,想恢复对台军售,鲁比奥表态,释放两大信号

四名议员施压特朗普,想恢复对台军售,鲁比奥表态,释放两大信号

DS北风
2026-09-24 14:30:03
75岁大爷与保姆生下儿子,做亲子鉴定后,大爷却被子女们气得心梗

75岁大爷与保姆生下儿子,做亲子鉴定后,大爷却被子女们气得心梗

黄家湖的忧伤
2025-03-06 09:30:21
套现146亿后跑路新加坡就能万事大吉?国家新规重拳出击:只要钱还在中国赚,拿了绿卡也照样得补税!申通前老板如意算盘,这下彻底落空了

套现146亿后跑路新加坡就能万事大吉?国家新规重拳出击:只要钱还在中国赚,拿了绿卡也照样得补税!申通前老板如意算盘,这下彻底落空了

人生录
2026-08-16 00:05:13
全球惊愕!哈佛专家研究已证实:中国不是在崛起,而是在逐步回归

全球惊愕!哈佛专家研究已证实:中国不是在崛起,而是在逐步回归

史之韵
2026-09-23 10:30:24
局势突变!中美同步接到重磅消息,普京或将缺席G20峰会,新的混战已经开始

局势突变!中美同步接到重磅消息,普京或将缺席G20峰会,新的混战已经开始

史源观点
2026-09-26 17:21:28
哈维:拿到三分我很高兴,但我们在很多阶段需要踢得更好

哈维:拿到三分我很高兴,但我们在很多阶段需要踢得更好

懂球帝
2026-09-28 03:51:06
2026-09-28 04:48:49
新能源自动驾驶 incentive-icons
新能源自动驾驶
专注于半导体行业资讯
1015文章数 348关注度
往期回顾 全部

科技要闻

星舰第14飞,为什么准备绕地球六圈?

头条要闻

孙颖莎2比4不敌王曼昱摘银 称可能等不到下届亚运会了

头条要闻

孙颖莎2比4不敌王曼昱摘银 称可能等不到下届亚运会了

体育要闻

114项指控成立,曼城已经完蛋了吗?

娱乐要闻

刘欢去世后谣言四起,韩磊被翻旧账

财经要闻

“为了看短剧,我妈两年花了22万 ”

汽车要闻

MAZDA EZ-60激光版上市 焕新全系11.39万元起

态度原创

本地
时尚
教育
亲子
公开课

本地新闻

中秋逛白塔寺,体验国医妙荟雅集

兰香如故:谁为打工人的情绪工伤买单?

教育要闻

成绩靠后的老师,就该“强制”自费培训20周吗?

亲子要闻

工程车小故事:洗澡澡

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版