无标题
• 这次输出进一步确认:板端运行的 MCU1 固件不是刚才编译出来的带 trace 的版本,或者 MCU1 没有被重新启动,仍然在运行旧固件。 依据是: received IPC log doorbell test command 0x6c6f6700 这三个是旧代码中的测试 doorbell。新代码进入 LogIpc_Init() 后,至少应该先出现: received MCU1 log trace 0x6c670100 但是当前完全没有任何 0x6c670xxx,所以还没有进入新版本的 LogIpc_Init() trace 路径。 为什么 /tmp/log/mcu1.log 仍为空 当前 MCU1 的启动过程很可能是: 旧版本 MCU1 发送第一个测试 doorbell。 elog_init() 调用 elog_port_init()。 log IPC 初始化失败或旧固件卡住。 旧代码继续发送另外两个测试 doorbell。 MCU1 没有写入有效的 Channel 6 control block。 A55...
tool
订阅转换转换链接sub SwitchyOmega (V3) 配置 配置备份.bak ssh-keygen -R ip
C++ 泛型编程和模板
SFINAESubstitution Failure Is Not An Error : 替换失败不是错误*** 在模板的参数替换过程中,如果某个模板参数导致不合法的替换,编译器并不会立即报错,而是尝试寻找其他匹配的模板。 ***当编译器在实例化一个模板时,进行模板参数替换,如果替换过程中发生了错误(例如类型不匹配、表达式非法等),编译器会忽略这个模板,而不会将其视为编译错误。这时,编译器会继续寻找其他可能匹配的模板。如果没有找到其他匹配的模板,编译才会失败。SFINAE 主要用于函数模板的重载,通过某些条件选择合适的模板函数,而忽略不适用的函数模板。 typenametemplate <typename T>typename std::enable_if<std::is_integral<T>::value, void>::typeprocess(T value) { std::cout << "Processing integral type: " << value...
动态链接库和pybind11
构建 为了在C++项目下直接测试该DLL,在头文件中也需要暴露dll的API.如果需要生成python可调用的pyd模块, 需要include python解释器的include目录和boost目录、site-packages下的pybind11de include目录,另外还需要添加python的libs目录和boost目录下的编译完的stage下的lib目录。链接python*.lib #define BOOST_PYTHON_STATIC_LIB#include <boost/python.hpp>#define NOMINMAX#include<pybind11/pybind11.h>#undef max//放在<pybind11/numpy.h>之前(#define NOMINMAX有时不起作用)#include<pybind11/numpy.h>#define EXPORT_DLL __declspec(dllexport)class EXPORT_DLL className{ ...
architecure design
RPC远程过程调用(RPC):RPC 是一种通信机制,用于在分布式系统中不同的进程或计算机之间进行远程调用,使得它们可以像本地调用一样进行通信和交互。在嵌入式系统中,RPC 可用于实现分布式应用程序的模块化设计,允许不同的嵌入式设备或模块之间通过网络或其他通信介质进行函数调用和数据传输。通过 RPC,嵌入式系统的不同组件可以相互协作,共享资源和功能,提高系统的可扩展性和灵活性。
effective python
单例类的实现单例类的实现需要注意几点: 显式创建单例,重写__new__方法 确保线程安全,加线程锁 import threadingclass Test: _instance = None _lock = threading.Lock() def __new__(cls, *args, **kwargs): if not cls._instance: with cls._lock: if not cls._instance: cls._instance = super(Test, cls).__new__(cls, *args, **kwargs) return cls._instance def __init__(self): # 初始化代码,确保只会在第一次实例化时执行 if not hasattr(self, '_initialized'): # 初始化代码...
C artifice
artifice结构体字面量赋值struct hal_support_s{ uint16_t data0; uint16_t data1;};const struct hal_support_s hal_support ={ .data0 = 1, .data2 = 2}; HAL(Hardware Abstraction Layer,硬件抽象层)┌──────────────────────────────┐│ 应用/业务层 ││ (如主循环、业务逻辑、CLI等) │└─────────────▲────────────────┘ │ │ 调用 │┌─────────────┴────────────────┐│ HAL 支持层 ││ hal_support_s 函数指针表 ││ ┌─────────────────────────┐ ││ │...
C++ 常用函数
Welcome to [C++]CPP合集(github)虚函数表实现机制 Quick Start 多引用自github上的C++项目 成员变量或函数的命名约定public : 公共的成员变量不建议直接暴露,而是通过公共成员函数来获取protect : 结尾加下划线, 比如member_private : 结尾加下划线, 比如member_ (我觉得也可用开头加下划线 _member) UML类图箭头 普通箭头: 箭头通常表示关联关系(Association)。它指示两个类之间的连接,表示类之间的关联或依赖关系。 空心箭头:空心箭头通常用于表示继承关系(Inheritance)。它表示一个类继承自另一个类,即子类继承父类的属性和方法。 菱形符号菱形通常用于表示聚合关系(Aggregation)或组合关系(Composition)。聚合关系:表示整体与部分之间的关系,部分可以存在独立于整体。组合关系:表示整体与部分之间的关系,部分不能存在独立于整体。 实线和虚线实线:...
Eigen
矩阵Matrix 模板参数Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime, int Options = 0, int MaxRowsAtCompileTime = RowsAtCompileTime, int MaxColsAtCompileTime = ColsAtCompileTime> Options 参数是指定矩阵使用行为主存储顺序,比如RowMajor(枚举) 就是指定行主序,一行在内存中是连续的。MaxRowsAtCompileTime和MaxColsAtCompileTime在需要指定时非常有用,即使在编译时不知道矩阵的确切大小,但在编译时知道一个固定的上限。这样做的最大原因可能是为了避免动态内存分配。 点乘和叉乘dot(), cross() 欧几里得范数squaredNorm : 所有系数的平方之和norm : 欧几里得范数的平方根v.lpNormEigen::Infinity() :...
