首页 > 其他分享 >AutoSar AP CM模块骨架侧的服务方法的总结

AutoSar AP CM模块骨架侧的服务方法的总结

时间:2024-10-14 22:17:46浏览次数:11  
标签:core AutoSar const CM ara AP promise Position position

一、服务方法特性

骨架侧的服务方法是抽象方法,需由继承骨架的服务实现子类重写。以服务示例中的Adjust方法为例:

struct AdjustOutput 
{
    bool success;
    Position effective_position;
};

virtual ara::core::Future<AdjustOutput> Adjust(const Position& position) = 0;

服务方法抽象定义中的 IN-parameters 映射到方法参数,此例中Position类型的position参数因是非基本类型被建模为 “const ref”。服务方法的实现必须返回ara::core::Future,以避免在服务调用实际处理分派到中央工作线程池时出现阻塞线程,影响多核 CPU 的有效使用。返回的ara::core::Future包含聚合服务调用所有输出参数的模板参数结构。

二、Adjust方法的两种实现变体

(一)同步处理变体

using namespace ara::com;

/**
 * 对 RadarService 的实现
 */
class RadarServiceImpl : public RadarServiceSkeleton 
{
public:
    Future<AdjustOutput> Adjust(const Position& position)
    {
        ara::core::Promise<AdjustOutput> promise;

        // 调用同步等待内整函数处理完毕,该函数提供结果
        struct AdjustOutput out = doAdjustInternal(position, &out.effective_position);
        promise.set_value(out);

        // 返回一个已经设置承诺的未来结果
        return promise.get_future();
    }

private:
    AdjustOutput doAdjustInternal(const Position& position) {
        //... 实现
    }
};

(二)异步处理变体

using namespace ara::com;

/**
 * 我们对 RadarService 的实现
 */
class RadarServiceImpl : public RadarServiceSkeleton 
{
public:
    Future<AdjustOutput> Adjust(const Position& position)
    {
        ara::core::Promise<AdjustOutput> promise;
        auto future = promise.get_future();

        // 在新线程中异步调用内部调整函数
        std::thread t(
            [this] (const Position& pos, ara::core::Promise prom) {
                prom.set_value(doAdjustInternal(pos));
            },
            std::cref(position), std::move(promise)).detach();

        // 我们返回一个此时可能已设置或未设置的未来...
        return future;
    }

private:
    AdjustOutput doAdjustInternal(const Position& position) {
        //... 实现
    }
};

三、单向(One-Way)又名即发即忘(Fire-and-Forget)方法

签名更简单,是一个不需要向调用者提供反馈的简单void方法:

virtual void LogCurrentState() = 0;

四、引发应用程序错误

当服务方法实现检测到应用程序错误时,将错误码存储到Promise中,Future从该Promise返回给调用者。例如:

using namespace ara::com;
using namespace com::mycompany::division::radarservice;

/**
 * 我们对 RadarService 的实现
 */
class RadarServiceImpl : public RadarServiceSkeleton 
{
public:
    Future<CalibrateOutput> Calibrate(const std::string& configuration)
    {
        ara::core::Promise<CalibrateOutput> promise;
        auto future = promise.get_future();

        // 我们检查给定的配置参数
        if (!checkConfigString(configuration))
        { // 给定的参数无效:
            // 假设在 ARXML 中我们有一个名为 SpecificErrors 的错误域
            // 其中包含 InvalidConfigString 错误。
            // 请注意,数字错误码将隐式转换为 ara::core::ErrorCode
            promise.SetError(SpecificErrorsErrc::InvalidConfigString);
        }
        else
        {
            //...
        }

        // 我们返回一个可能设置了异常的未来
        return future;
    }

private:
    bool checkConfigString(const std::string& config);

    std::string curValidConfig_;
};

标签:core,AutoSar,const,CM,ara,AP,promise,Position,position
From: https://blog.csdn.net/weixin_42108533/article/details/142930565

相关文章

  • JFinalcms代码审计
    JFinalCms是开源免费的JAVA企业网站开发建设管理系统,极速开发,动态添加字段,自定义标签,动态创建数据库表并crud数据,数据库备份、还原,动态添加站点(多站点功能),一键生成模板代码。环境布置:IDEA打开项目,等待maven加载好。使用phpstudy集成的mysql5.7数据库即可,导入JFinalCMS.sql数据......
  • Mybatis的Mapper映射文件中常用标签
    "mapper":是整个映射文件的根元素,包含了所有的其他标签,有一个重要的属性:namespace,用来指定映射文件对应的接口的全限定名,保证多个映射文件中使用相同的ID不会产生冲突,因为每个ID都是基于其命名空间唯一的点击查看代码<mappernamespace="com.example.mapper.Use......
  • Mybatis的Mapper映射文件中常用标签及作用
    MyBatis的Mapper映射文件是一种XML格式的配置文件,它用于定义SQL语句和Java对象之间的映射关系。以下是一些常用的标签及其作用。!DOCTYPEmapperPUBLIC#定义文档类型和公共标识符,用于XML文档的开头。<mapper>#根标签,定义一个映射文件。<namespace>#定义映射文件的命......
  • Mybatis的Mapper映射文件中常用标签及作用
    1、<mapper>:根元素,表示一个Mapper接口的配置。2、<select>:用于编写sql查询语句。3、<insert>:用于编写sql插入数据的<details>4、<update>:用于编写sql更新数据的语句。5、<delete>:用于编写sql删除数据的语句。6、<resultMap>:定义了如何将数据库中的列与Java对象的属......
  • Mybatis的Mapper映射文件中常用标签
    select点击查看代码<selectid="selectPerson"parameterType="int"parameterMap="deprecated"resultType="hashmap"resultMap="personResultMap"flushCache="false"useCache="true"time......
  • Mybatis的Mapper映射文件中常用标签及作用
    MyBatis是一个广泛使用的持久层框架,能够将对象与数据库中的记录进行映射。在MyBatis的Mapper映射文件中,有许多常用标签,它们各自有不同的功能。以下是一些常见标签及其作用:1.select标签作用:用来定义查询操作。示例:点击查看代码<selectid="selectUser"resultType="Use......
  • Mybatis的Mapper映射文件中常用标签及作用
    mapper标签作用:根标签,用于定义一个Mapper文件。属性:namespace,指定Mapper接口的全限定名。select标签作用:定义一个查询语句。属性:id:语句的唯一标识符,对应Mapper接口中的方法名。parameterType:输入参数的类型。resultType:返回结果的类型。resultMap:返回结果......
  • Mybatis的Mapper映射文件中常用标签
    增删改查标签增:<insertid=""parameterType=""useGeneratedKeys="true"keyProperty="id">id接口名,parameterType传参类型,useGeneratedKeys是否使用数据库生成的主键,keyProperty将主键映射到哪个属性删:<deleteid=""></delete>改......
  • Mybatis的Mapper映射文件中常用标签以及作用
    1.SqlMapConfig标签SqlMapConfig标签是Mybatis配置文件中的根标签,它用于配置Mybatis的全局属性,包括数据库连接信息、类型别名、事务管理器等1.properties:用于指定外部属性文件的位置,可以用来配置数据库连接信息等敏感信息。2.settings:用于配置Mybatis的全局属性,包括......
  • Mybatis的Mapper映射文件中常用标签及作用
    1.<sql>标签定义重复使用的字段提高复用性点击查看代码<sqlid="Base_Column_List">id,name,contract_no,pdf_url,member_phone,elder_id,start_time,end_time,status,sort,level_desc,create_time,create_by,update_time,update_by,remark,......