文章作者: Liya Huang
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 wdfk-prog的个人博客!
相关推荐
2025-10-03
hash
[TOC] hash 哈希 散列 给定一个键,哈希表在常数时间内返回相应的值,无论哈希表中有多少个键 为了确定在多大数量以上哈希查找比线性查找和二分查找更快,我们需要考虑它们的时间复杂度和实际性能。 时间复杂度对比 哈希查找:O(1) 线性查找:O(n) 二分查找:O(log n) 实际性能分析 哈希查找:在理想情况下,哈希查找的时间复杂度是常数时间 O(1),即无论哈希表中有多少个键,查找时间都是固定的。然而,哈希查找的性能也依赖于哈希函数的质量和哈希冲突的处理方式。 线性查找:随着数据量的增加,查找时间线性增加。当数据量较小时,线性查找的性能可能还可以接受,但随着数据量的增加,性能会显著下降。 二分查找:需要数据是有序的,查找时间随着数据量的增加而对数增加。对于较大的数据量,二分查找的性能优于线性查找,但不如哈希查找。 数量级对比 特性 哈希表 线性查找 二分查找 插入时间 O(1) 平均 O(n) O(n) 删除时间 O(1) 平均 O(n) O(n) 修改时间 O(1) 平均 O(n) O(log n) 查找 + O(n) 修改 查找时间 O(...
2025-10-03
lib
initcall.cinitcall_run_list 初始化调用列表1234567891011121314151617181920212223242526272829303132333435363738394041int initcall_run_list(const init_fnc_t init_sequence[]){ ulong reloc_ofs; const init_fnc_t *ptr; enum event_t type; init_fnc_t func; int ret = 0; for (ptr = init_sequence; func = *ptr, func; ptr++) { reloc_ofs = calc_reloc_ofs(); //计算偏移 type = initcall_is_event(func); //判断是否是事件 //执行函数 是事件执行事件通知函数,否则执行函数 ret = type ? event_notify_null(type) : func(); if (ret) break; ...
2025-10-03
of_live
[TOC] of_live 将平面设备树转换为分层设备树,将原来紧凑的二进制设备树转换为分层的设备树,以结构体的形式存储,便于查找和操作 of_live_build unflatten_device_tree, 创建活动设备树 of_alias_scan, 扫描设备树中的别名 struct device_node12345678910111213141516171819202122232425262728293031323334/** * struct device_node:设备树节点 * * 此树的顶部通常是 gd->of_root,它指向根节点。 * * 根节点(和任何其他节点)的子节点列表的头部为 * 在 @child 中,@sibling 提供指向下一个子项的链接。 * * 每个子项都有一个指向其父项的指针 @parent。 * * 节点可能具有属性,在这种情况下,属性列表的头部 * @properties指向第一个的指针,其中 struct property->@next 指向 * 到下一个。 * * @name:节点名称,根节点的 “” * @typ...
2025-10-03
api
[TOC] 介绍用于外部应用程序的 U-Boot 机器/独立于架构的 API 主要假设 API 只有一个入口点 (syscall) 根据当前的设计,syscall 是 U-Boot 中的 C 语言可调用函数text,它可能会演变成一个真正的 syscall using machine exception 陷阱,一旦此初始版本证明有效 使用者应用程序负责生成适当的上下文(调用 number 和参数) 进入后,系统调用将调用分派给其他(现有的)U-Boot功能区域,如网络或存储操作 消费者应用程序将通过搜索来识别 API 可用指定的(按照约定假定的)地址空间范围签名 API 的 U-Boot 组成部分是精简且非侵入性的,将尽可能多的处理留给消费者应用程序端,例如,它不保留状态,而是依赖于来自应用程序的提示,并且以此类推 可选 (CONFIG_API) 调用 控制台相关(GETC、PUTC、TSTC 等) 系统(重置、平台信息) 时间 (delay, current) env vars (枚举所有、get、set) 设备 (枚举所有、打开、关闭、读...
2025-10-03
bootm
cmd/bootm.c 从内存中的映像引导应用程序映像do_bootm1234567891011121314151617181920212223242526//bootm 90080000//cmdtp:命令表,flag:标志位,argc:参数个数,argv:参数列表int do_bootm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]){ struct bootm_info bmi; int ret; //执行子命令 //默认命令执行默认参数初始化 bootm_init(&bmi); if (argc) bmi.addr_img = argv[0]; //设置镜像地址 字符串"90080000" if (argc > 1) bmi.conf_ramdisk = argv[1]; if (argc > 2) bmi.conf_fdt = argv[2]; /* set up argc and argv[] since some OSes ...
2025-10-03
arch
[TOC] arch 架构介绍ARC (Argonaut RISC Core) ARC 是一种基于 RISC(精简指令集计算机)原理的处理器架构,广泛应用于嵌入式系统中。 ARC 处理器由 Synopsys 公司开发和推广,广泛应用于嵌入式系统中,因其高性能和低功耗特性而受到欢迎。 ARM ARM M68K M68K,也称为 68K 或 Motorola 68000,是一种由摩托罗拉公司(Motorola)开发的16/32位微处理器架构。M68K 系列处理器在20世纪80年代和90年代广泛应用于计算机、嵌入式系统和游戏机中。 MICROBLAZE MicroBlaze 是由 Xilinx 公司开发的一种软处理器核心,专门用于其 FPGA(现场可编程门阵列)产品。MicroBlaze 处理器可以通过硬件描述语言(如 VHDL 或 Verilog)在 FPGA 中实现,并根据具体应用需求进行定制。 MIPS MIPS(Microprocessor without Interlocked Pipeline Stages)是一种由 MIPS Technologies 开...
评论