自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

杨善锦技术专栏

专注底层开发

  • 博客(37)
  • 收藏
  • 关注

原创 摄像头读取数据

视觉摄像头读取方法

2024-04-02 11:21:41 275 1

原创 鱼眼标定方式

张氏标定算法,标定相机内参外参

2023-12-24 14:06:08 471

原创 rk3588多模型检测部署quickrun

rk3588 rknn 多线程模型高效并发部署

2023-12-22 14:35:15 588

原创 半自动化标注平台搭建CVAT

半自动化标注平台cvat,支持自动标注,多人同时标注,减少标注工作量

2023-12-21 18:52:44 1057

原创 高并发神经网络推理部署

神经网络部署是边缘计算落地非常重要的环节,highport是一款封装神经网络推理的部署框架,已在皮肤病检测中获取第一名。

2023-12-20 21:30:56 425

原创 C语言到机器语言的过程变化

C语言到机器语言的过程变化当我们写好一个helloword的程序,然后用gcc去编译这个helloworld程序,这个过程到底发生了什么事情?链接后的可以执行程序在内存是怎么分配的?思考个问题,为什么汇编后没有链接的点o文件不能执行?当我们写好一个helloword的程序,然后用gcc去编译这个helloworld程序,这个过程到底发生了什么事情?预编译,处理c语言的一些编译器关键字。编译,从人类可以理解的c语言变到人类不容易理解的汇编语言。gcc -S main.c生成main.s汇编,从汇编语

2020-08-05 16:34:58 772

原创 驱动设备管理

设备管理作用 设备管理接口使用 设备管理实现 设备管理作用一个操作系统往往集成很多设备的驱动,比如led灯,按键,PWM,ADC,SD等等设备。如何管理 这些设备,使得应用层可以使用统一的方式去操作这些设备,类似linux操作所有设备当做操作 文件的方式,FOS也是这种方式,用户可以在驱动层去定义open,read,write,iocontrol,close 等接口,在应用层去做

2017-06-23 11:33:44 550

原创 FOS双向链表

双向链表作用 双向链表接口使用 双向链表实现 双向链表作用双向链表(以下用double list)是一种基本的数据结构,在FOS中,消息队列、阻塞队列、就绪队列、信号量队列等等都是由底层的double list串接起来的,相比单链表,double list的每一个节点都可以两个方向查找,方便遍历list。双向链表接口使用链表的基本操作增删查改, 增是增加链表的节点,主要确定增加在哪个节

2017-06-12 14:20:04 528

原创 FOS的消息队列管理

FOS 消息队列什么是消息队列 消息队列的使用 消息队列的设计 什么消息队列想象一个场景,线程a断断续续的向线程b发送数据,线程b要根据接送到的数据去解析做逻辑处理,但是b线程是优先级比较低的任务,不会去实时处理数据,造成丢数据。如何解决这种问题,可以设想有个大buffer作为缓冲区,线程a发送的数据送到buffer,线程b从buffer提取数据,这样就可以解决线程a发送的数据丢失问题。如何管理buf

2017-06-10 14:15:32 603

原创 自由读书会第一集总结

###单元测试框架1. 程序最重要的是`稳定性`,而不是花销的算法,或是性能,或是节省空间多少。如何保证程序的稳定性?代码规模越大,越容易产生bug,这里的bug分两种, 一是逻辑上的bug,二是程序挂掉。通常避免系统的bug办法是做单元测试。单元测试是保证每一个模块,每一个函数运行正确,不管输入什么参数,都应该正确的输出结果。只要每个子模块都运行正确,那么集成系统的时候就是正确的。

2016-11-02 11:05:37 606

原创 敏捷开发总结

第一条 每个人都应该明确自己的目标 ,现实生活中我发现很多人都容易发散思维去做一件事情结果做一件事情导致做好几件事情,最后这件事情并没有做好也导致时间大量的流失,正确的字做法是盯住一件事情做,看板工具就很好的把自己的任务明确起来.第二条 任何一个故事都可以分解 为小任务,完成每个小任务就是完成一个大任务,每个小任务的完成时间应该控制在两天到一天之内,如果不是,那就是分解有问题第三条 增强工具 的

2016-07-31 12:06:38 657

原创 优秀程序员的生活品质

1。 优秀的程序员都具备幽默感,能给人舒心的感觉。因为在机器代码的世界里,优秀程序员的大脑是紧绷着,他们很需要人与人有趣的交流。2。优秀的程序员不管那方便都是谦逊的,能示弱于人,甘愿做配角。因为优秀的程序员很多事情都看淡了。3。优秀的程序员应该是体育健儿,不管是游泳,篮球,乒乓球,羽毛球, 足球,排球,桌球,毽子,保龄球等等,至少4项以上达到平均水平之上。因为优秀的程序员比

2016-06-12 19:41:44 1244

原创 自由读书会第一集总结

2016年6月1号,我召集小伙伴们一起到深圳湾公园进行第一次读书分享会,我们读书会的团体叫"自由读书会", 主要倡导思想自由,不要因为各种束缚限制思想交流。分享读书的内容可以是自己的读书感悟,也可以是生活小经验分享。每次读书会都会有个主题,6月1号的主题就是如何做人!在生活中,总是能看到性格很冲的人, 这些人在一般人看来可能就是年轻气盛,这个年龄符合这种性格。可是细细思考,我认为性

2016-06-03 12:33:37 577

原创 优秀软件攻城狮团队的氛围

1. 重视单元测试与集成测试;2. 积极参与技术论坛,技术讲座分享;3. 极客精神,快速学习,快速发现问题,快速解决问题;4. 乐于开源分享,学会使用开源软件解决问题;5. 全系统看待问题,多点对软件的思考。6. 不加班。7. 沟通无阻, 思想迸发。5. 尊重版权,原作;

2016-05-26 20:55:01 666

原创 git 常用操作

熟悉git的操作不是一朝一夕能做好的事情,练习git的操作会很费很长时间和精力,但是坚持下来,从长远角度看,这会为以后更省时间省事情。GIT基本使用配置git的用户名和email git config --global user.name "Your Name" git config --global user.email [email protected]添加修改文件 git add

2015-11-18 17:19:51 701 1

原创 基于framebuffer显示图片(bmp && png)和汉字

章节1 功能描述2 图片显示,字体显示接口3 使用实例功能描述图片显示: 支持位置设置,支持BMP && PNG格式的图片,程序通过读取bmp&&PNG图片的路径,解析图片的点阵掩码mask,再把mask写入framebuffer 汉字显示: 支持字体大小设置(修改代码),可以位置设置,字符串输入 ascii显示: 支持字体大小设置(需要修改代码),可以位置设置,ascii输入 字体显

2015-11-17 11:57:42 4117

原创 freetype 交叉编译

*libfreetype.so*libpng.so*libz.so*libfreetype.so./configure --prefix=/opt/include --host=mipsel-linux出错:src/gzip/ftgzip.c:50:18: fatal error: zlib.h: No such file or directory下载libz库ht

2015-09-24 13:54:59 3614

原创 gdbserver

target system: gdbserver --debug --remote-debug 127.0.0.1:3333 testhost system: gdb test && arget remote 127.0.0.1:3333

2015-06-04 01:38:46 635

原创 C语言使用注意点

1. 函数参数为一级指针,函数内部参数的指针改变并不影响原来传入指针本身的值。void ptr_mdy(void *ptr){ ptr = malloc(100); assert(ptr); printf("In the func: %x\n", (unsigned int)ptr);}int main(){ void * ptr = malloc(100); assert

2015-01-20 21:21:43 895

原创 RTOS一般锁保护使用与解决死锁问题

RTOS有时候会因为用户的一句代码造成实时性或是性能降低,锁的正确使用更是能体现这一点。一、RTOS一般锁使用情景:Semaphore:适用于较长代码的保护,或是任务之间、中断与任务之间的同步。如果该函数会引起任务阻塞,则不可以在中断中去获取信号量。Mutex:适用于三个任务以上抢占的资源保护。因为mutex有优先级反转解决策略。 而semaphore一般都没有,所以它只适用于两个任务

2015-01-16 22:54:11 4112

原创 为何使用RTOS与商业如何选择哪个RTOS

一、为什么要使用RTOS?个人觉得如下:1. 当代码量超过上万行时,需要有一个稳定的,结构清晰的框架,方便后面开发与维护,而且对于新人对接较快。2. RTOS中间件比较多,可以方便移植使用。3. 用RTOS写task,可以做到更加模块化,高内聚,低耦合,比较文雅,有利于学习,技术提升。4. 未来32位的cpu占据市场会越来越多,RTOS使用是一个趋势。5.可以用RTOS代替使用

2015-01-15 23:48:31 3427

原创 openwrt 默认gpio-leds配置和网络配置

一、GPIO-LED1. 首先查看电路,看看led灯接在哪个IO口,然后设置gpio口DTS文件gpio-leds内容gpio-leds {compatible = "gpio-leds";wan {label = "deco:wan"; // 使用于01_leds文件gpios = ; //使用了gpio2的第4个引脚,1 表示高电平有效,就是说电路的led阴极接地。

2014-11-27 11:24:57 13817 2

原创 openwrt添加已经支持的cpu的bsp

openwrt添加已经支持的cpu的bsp:例如我要添加的板级叫FOS,1. tartget/linux/ramips/base-files/lib/ramips.sh在ramips_board_detect()里面添加*"FOS")name="fos"        ;;2.target/linux/ramips/base-files/lib/upgrade/pl

2014-11-26 15:59:43 3755

原创 mutex和semaphore不为人知的秘密

mutex 缘由:试想这么一个问题:优先级 task1 > task2 > task3, 并且拥有同一资源。task3运行,并且获取资源,这时候task1运行抢占资源,task1获取不到资源阻塞,这时候task2就绪运行。这个过程违背了RTOS的原理,任何时候都是最高优先级就绪的任务运行的,task1没有运行,task2就运行了。这就是优先级转问题。所以为了解决这个问题,可

2014-11-24 11:07:20 1222

原创 嵌入式实时操作系统FOS简介

FOS功能:1. 支持多任务运行, 支持机遇

2014-09-15 18:06:22 4648 4

原创 FOS信号量管理

FOS信号量管理: 一般的RTOS会通过初始化信号量建立相对应的阻塞链表。这样做会增加使用资源。FOS主要通过semaphore阻塞队列管理信号量。把被semaphore阻塞的任务挂在该链表上。而且自始至终都使用一条链表。FOS在系统初始化时候需要初始化该链表。1、信号量初始化void sem_init(SEM *semaphore, U8 *name, U32 num){

2014-09-15 16:47:00 1081

原创 openwrt目录与编译

一、目录1. package目录这个目录里面的文件主要是makefile。我觉得openwrt更加像是一个shell + Makefile编译代码框架,wrt源代码并没有linux kernel,file system,luci和各种各样的应用程序,它把这些软件当作package,通过每个package的makefile,去下载(本地有源码的不用去下载),编译。这样做法的好处是精简open

2014-09-08 11:21:03 2473

原创 swconfig结构框架

OpenWrt的swconfig结构框架swconfig命令模式swconfig dev [port |vlan |csmap ] (help|set |get |load |show)swconfig 结构框架是应用层与内核驱动通信的一种框架,主要实通过应用层命令去配置交换机芯片的底层驱动,应用层与内核层采用netlink通信机制.首先看到 - package/netwo

2014-07-25 21:01:21 8529

原创 linux Phy 设备驱动

MII/MDIOMII是Medium Independent Interface的缩写,是一种标准接口,该接口主要应用于MAC层和PHY层之间的以太网数据传输。MII接口的类型有很多,常用的有MII、RMII、SMII、SSMII、SSSMII、GMII、RGMII、SGMII、TBI、RTBI、XGMII、XAUI、XLAUI等。MDIO是Management Data Input/

2014-07-25 20:48:47 3927 3

原创 Protothread调度分析

Prothread存在于contiki、uip中,是由用户创建线程必须要使用系统提供的框架,static int user_pthread( struct pt *pt){    YSJ_INIT(pt);    YSJ_BEGIN(pt);     while(1)    {        YSJ_WAIT_UNTIL(pt, your_event ==

2014-07-13 10:59:54 2684

原创 RTOS基本原理概述

嵌入式实时操作系统英文为EmbedReal Time OperatingSystem,简称RTOS。与PC机上的通用的操作系统Windows或是Linux相比,RTOS精简,实时性强。不同的RTOS根据性能特点适应于航天航空、生物医学、工业控制、消费电子等行业。RTOS是一种架构。历史以来,任何一个阶段都有一定的软件架构在主宰软件行业。最开始的架构是前后台的超循环模式。While(1)大循

2014-07-09 23:21:14 5848

原创 FOS调度算法

FOS调度算法是基于优先级任务调度的,期货

2014-07-08 22:40:43 1924

原创 实现flash延长写寿命算法

flash的擦写次数是有限的,NAND flash中每个块的最大擦写次数为100万次,而NOR是10W次,flash单个存储单元bit只能从1变为0,而不能从0变成1。想要变成1,只能block擦 除,这里的block表示一个擦除单位,擦除过程就是把block所有的位都写1.这种硬件特性决定需要一种比较高效的写flash算法。总不能一次更改数值时擦除整一大片flash。总体思想:写满一个blo

2014-07-07 23:28:38 5336

原创 FOS中断管理

一、FOS中断管理中断管理分软硬件。硬件分两种类型中断,一是中断向量表存放地址,一种是存放指令。在处理中断之前要初始化其栈指针二、软件上设计:中断发生,PC跳转到中断向量表,然后我们要做的事情如下:保存被中断的任务的上下文;增加中断嵌套次数变量;进入用户处理函数;1) 清中断;2)查找中断号,根据中断号调用相应的用户函数;减少中断

2014-05-03 21:02:18 1160

原创 FOS时间管理

FOS时间管理包括软定时器、延时函数两者管理(目前是这两者对象,后面会补充各种对象的timeout)。通过一条链表连接对象,由style标识特定对象。/*time manage*/typedef structTICK_STR{    LIST list;    U8 style; //timer,delay,wait signer    U32 timeout;    TC

2014-05-03 17:12:05 1390

原创 搭建一个多任务调度环境

目标实现一个多任务环境。1. 可以多任务;2. 任务模块编程;3. 没有调度算法, 调度点由用户决定。操作系统描述的是多任务处理。多任务的意思是在宏观上多个任务是同时在运行的,但是微观上,任何一个时刻只有一个任务在运行。操作系统有一个任务控制块的结构体,里面有一个最重要的成员:栈指针,记录任务在切换时候上下文的位置。先定义TCB结构体typedef struct T

2014-03-22 22:26:00 1776

原创 YSJ_FSM状态机软件框架分析

基于状态机的软件框架好处1. 有较好的代码框架2. 相对与一般的操作系统,占用内存比较少,因为传统的操作系统每个任务必须给够栈,一般都要3K左右。而FSM始终用一个栈。3. 避免了由于资源竞争引发的问题FSM的最基本思想: 当前状态 + 事件 = 动作 + 下一个状态。状态、事件、动作是FSM的三个基本属性。一般进入FSM有一个初始化的状态,事件触发其状态的动作

2013-12-07 22:45:04 1272

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除