- 博客(22)
- 资源 (3)
- 收藏
- 关注
原创 【好奇一刻】芯片性能评估&内核优化路线(1)
芯片技术迭代不断年年有新品发布,如何选择一款适合的平台?如何洞察芯片底层的技术更新?希望一起交流,我负责记录。
2025-08-28 19:27:31
624
原创 【UI】像素颜色格式
本文介绍了两种常见的图像色彩格式:RGB和YCbCr。RGB格式通过红绿蓝三原色混合呈现色彩,包括RGB888(24位真彩色)、ARGB8888(带透明通道)和RGB565(16位高彩色)等变体,适用于不同显示需求。YCbCr格式则将色彩分离为亮度(Y)和色度(Cb/Cr)分量,支持4:4:4、4:2:2和4:2:0等色度抽样方式,可大幅降低带宽需求,是视频压缩的主流格式。文章还解析了JPEG压缩的关键步骤:色彩空间转换、分块、DCT变换、量化和熵编码,其中色度抽样和量化是实现高效有损压缩的核心技术。
2025-10-16 16:27:01
647
原创 【OS zephyr】编译分析(3)
本文分析了Zephyr项目中west build命令的执行流程,重点解析了build.py和zcmake.py文件的功能。详细介绍了CMake构建过程,包括do_run()入口方法、_run_cmake()构建和_run_build()编译等关键步骤。特别对subprocess.Popen()和os.system()两种Python线程启动方法进行了对比。最后解剖了一个典型CMake命令的参数含义,该命令使用Ninja生成器针对特定硬件平台配置Zephyr项目,为后续CMakeLists.txt的执行做好准
2025-10-13 21:15:29
959
原创 【OS zephyr】编译分析(2)
本文分析了build.py脚本的主要功能:1.配置工程目录常量,包括SDK、RTOS、应用等路径;2.read_choice()函数实现交互式配置选择,生成.build_config中间文件;3.build_zephyr_app_by_gcc()作为编译入口,调用west build命令进行应用构建;4.支持ELF文件拆分和固件打包功能。该脚本是Zephyr RTOS项目构建系统的核心组件,负责管理整个编译流程的配置和执行。
2025-10-13 19:35:42
378
原创 【OS zephyr】cmake脚本开发记录
1、语法cmake官方说明文档:https://cmake.org/cmake/help/latest/manual/cmake-commands.7.html1.1、常用原生命令
2025-09-26 18:26:04
611
原创 【OS zephyr】编译分析(1)
本文介绍了Zephyr项目的编译流程和工具链。Zephyr采用Python+West+CMake+Ninja的构建方式,主要分为四个阶段:配置阶段(由West和CMake主导)、编译阶段(编译器主导)、链接阶段(链接器主导)和后处理阶段(objcopy等工具)。文章详细解析了build.sh/zephyr-env.sh/build.py脚本的参数处理、.build_config文件生成和West构建命令的执行过程,并阐述了CMake在构建系统中的作用,包括如何生成构建规则和文件。最后还介绍了West工具的功
2025-09-19 20:30:26
1005
原创 【MCU ATS3231】宏定义那些事
弯弯绕绕的宏定义一一把它理清楚。//UART设备引脚管理//UART设备软件配置//UART设备数据结构DEVICE_DT_DEFINE(UARTNODE(idx), //通用设备结构定义&uart_acts_init,//初始入口NULL,va_list ap;va_end(ap);va_list ap;va_end(ap);if(!return;
2025-09-12 20:26:57
526
原创 【MCU ATS3231】炬芯APP启动分析
WLMIC -- Wireless microphone 无线麦。firmware.xml -- 磁盘分区表信息定义。bootloader.ini -- bootloader程序的配置文件。如何在boot中生效?ats3231L_dvb_ext_nor.dts -- 板型对应的设备树。ats3231L_dvb_ext_nor-pinctrl.dtsi -- 板型对应的 GPIO 复用配置。app.conf -- 编译方案所需要的编译宏配置。
2025-09-10 15:20:18
1100
原创 【好奇一刻】芯片架构与芯片内核的区别
内核是架构的具体物理实现。它是根据架构的规范,用晶体管实际设计出来的硬件电路。不同的内核可以遵循同一套架构,但通过不同的微架构设计来实现,从而在性能、功耗、面积上产生差异。微架构:这是内核设计的核心,包括流水线级数、缓存大小、分支预测策略、执行单元数量等。这些设计决定了内核的效率和特性。
2025-09-01 11:41:16
930
原创 【MCU HI332X】OS适配层:cmsis_os2.h
typedef struct { const char *name; ///< name of the thread uint32_t attr_bits; ///< attribute bits void *cb_mem; ///< memory for control block uint32_t cb_size; ///< size
2024-12-03 16:34:10
609
原创 【SE FDKJ】嵌入式软件设计与模块化编程通用规范
本文介绍了嵌入式开发中的模块化编程规范,重点阐述了模块与类的区别、驱动编写方法、移植规范以及编码约定。模块需具备独立输入输出接口,类则无需输入适配文件。详细说明了驱动、文件系统、操作系统等各类模块的移植方法,包括端口文件、驱动实现和API接口的命名规范。同时提供了工程模块划分方案和打印管理方法,并制定了严格的编码标准,包括编辑器设置、命名规则、代码风格和注释要求,强调防御式编程和模块化设计思想,以提高代码可移植性和可维护性。
2022-05-07 16:57:22
1777
原创 【SE FDKJ】嵌入式互拆锁的创建
本文总结了互拆锁的创建位置对系统运行的影响。互拆锁的作用是防止共享接口重入,创建时需进行非空判断。文章分析了四种创建方式:1)任务前创建需判断系统状态;2)任务中创建可能导致锁操作次数不匹配;3)调度器启动前创建最为理想;4)通过start_task任务初始化。方式3结构清晰,方式4本质与方式3相同但多一个任务。建议优先选择调度器启动前创建的方式,避免任务运行顺序带来的问题。
2022-03-24 10:10:01
395
原创 【UI LVGL7】tileview控件
控件特点以page为基础扩展的控件,增加了释放后会有动画定格效果。lv_tileview_set_tile_act(tileview, ext->act_id.x + x_move, ext->act_id.y + y_move, true);//切入时开启动画效果。static void drag_end_handler(lv_obj_t * tileview){ lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tilevie
2022-03-17 15:37:48
2208
原创 【UI LVGL7】obj对象
对象创建1、lv中所有的对象都以obj为基础进行扩展的。创建对象时父对象是空,则在显示器屏链表增加一个节点,父对象非空则在其子链表增加一个节点。创建完成会通过parent->signal_cb(parent, LV_SIGNAL_CHILD_CHG, new_obj)通知父对象。lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy){ lv_obj_t * new_obj = NULL; /*C
2022-03-15 18:48:28
2161
原创 【UI LVGL7】style
style的接口1、接口名通过宏定义来申请名(这里只是申明),每一种type都会有三个接口。get_style//获取某种style_type的风格。优先返回local值。set_style//设置某种style_type的风格会修改静态style的内容,从而也会改变其它引用了些静态style的控件。set_style_local//设置某种style_type的风格只作用于当前对象。#define _LV_OBJ_STYLE_SET_GET_DECLARE(prop_name, fu
2022-03-15 15:38:58
1121
原创 【UI LVGL7】label控件
1、label的对齐方式 lv_obj_set_width(label, LV_HOR_RES_MAX);// lv_obj_align(label, parent, LV_ALIGN_IN_TOP_MID, 0, 95 + (j*157));//文本控件的对齐方式 lv_label_set_long_mode(label, LV_LABEL_LONG_BREAK); lv_label_set_align(label, LV_LABEL_AL...
2022-03-12 20:28:03
3728
原创 【UI LVGL7】输入设备LV_INDEV_TYPE_POINTER类型
LV_INDEV_TYPE_POINTER类型调用过程:void _lv_indev_read_task(lv_task_t * task)//定进运行的输入任务。static void indev_pointer_proc(lv_indev_t * i, lv_indev_data_t * data)//static void indev_proc_press(lv_indev_proc_t * proc)//按下的处理static void indev_proc_...
2022-03-10 22:15:39
1386
原创 【UI LVGL】page控件
page的子对象1、控件创建时会发送信号给它的父对象:lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy){…… /*Send a signal to the parent to notify it about the new child*/ if(parent != NULL) { parent->signal_cb(parent, LV_SIGNAL_CHILD_CHG...
2022-03-10 17:06:08
1515
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1