自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 快速查看平台信息脚本(完善中...)

在熟悉一个平台时,我们经常要去了解这个平台的一些信息,例如架构、CPU核心情况、线程数、用户、内存、磁盘等信息,所以我将这些命令汇总成脚本~方便查看。后面会持续更新,尽量从兼容以及实用地角度修改脚本......

2024-10-19 22:39:37 279

原创 keil SVDCony returned with an error.No uVision SystemViewer file created等error解决

尤其是第三种错误,用了网友的方法,譬如检查路径是否有中文、强行安装等都不行。其实解决方法很简单,就是当前MDK的版本太低了,去网上。编译后没报错,打开项目也没有上述报错弹窗了。4. FreeRTOS编译报错。

2024-10-03 23:41:17 696

原创 从LED硬件控制流程认识Android架构!

层次概述APP层在Android Studio进行开发的人,调Java包的API,就是调API框架层Java API的提供者,它提供了被称为“服务”的东西,就是应用层你调某个API,我帮你做操作并给你返回值思考这里需要思考一个问题,例如硬件只有一个,那如果多个应用程序都要控制它,怎么办?这就要提到“服务”这个东西,就是安卓系统做主,它去建立一个进程访问硬件(上服务),然后应用层的进程要控制硬件,都给系统服务(下服务)发请求,“系统服务”会建立队列让它们排队使用这个硬件服务(

2024-09-02 17:18:28 958 1

原创 Android Studio环境搭建(4.03)和报错解决记录

参考下面截图的,没有的下载下来。这样SDK就算是配置好了,但是这样还是不够的,会有报错,看下面:第一个和第三个报错,简单解释一下这报错是什么意思:com.android.support:appcompat-v7和com.android.suppot:design是安卓的支持库,库的名字叫appcompat-v7和design,其作用是提供安卓组件。

2024-06-30 19:27:36 842

原创 段,页,段页,三种内存(RAM)管理机制分析

linux中每一个进程虚拟地址中的段号都是对应的0~4GB的地址空间,每一个进程段空间范围都一样就意味着虚拟地址中的段号没有划分地址的作用,实际上linux中的虚拟地址是 "虚拟地址 = 段号+页号+页内偏移 ",系统有规定某些段号只有内核程序能使用,应用层程序只能使用另一些段号。缺点:页表本身占用的内存太多了,每一个进程有一个页表,那么理论上32位的机器4G的物理内存,每一页是4K的话,总共会有4G/4K = 2^10 * 2*10 个页表,如果一个页表要4MB,那光是记录页表就要占用800M的内存。

2024-06-24 00:12:45 1061

原创 windows和linux路径斜杆转换脚本,打开即用

windows和linux的目录路径斜杆是相反的,在ssh或者其他什么工具在win和ubuntu传文件时候经常需要用到两边的路径,有这个工具就不用手动去修改斜杆反斜杠了。之前有个在线网站,后来挂了,就想着自己搞一个脚本来用。先看效果,代码放后面了,或者直接下载脚本也行。

2024-06-23 16:09:18 422

原创 Cmake-learning

有的时候目标文件会暂时没指定,那么就看有米有这个语句:target_sources(目标文件 源文件),这是指定目标文件的源文件的语句。新接触一个项目,了解项目组织结构的最快方式就是看编译流程~通过重点关注目标文件、目标库的生成流程,我们可以清晰的看到庞大项目的脉络。add_library(目标库名称SHARED hello.c) #生成动态库文件。add_library(目标库名称SHARED hello.c) #生成动态库文件。target_link_libraries (目标文件 库文件})

2024-05-09 17:59:47 799

原创 linux驱动开发面试题

记住“22”,两级分段两级权限。例如是32位的机器,从内存空间看:顶层1G是内核的,底3G是应用的;从权限看:内核是0级特权,应用是3级特权。系统调用。proc。

2024-03-17 15:50:57 1510

原创 排序算法-一天两个之冒泡、选择排序

准备笔试题中,这几天复习排序算法,尽量一天学一两个,并且以能手写代码的理解方式写出来。

2024-03-15 22:38:18 596 1

原创 常量指针,指针常量;函数指针,指针函数;指针数组,数组指针 一文全解!带示例

最近准备面试,准备把这几个乱人心智的概念一网打尽,顺便记录一下~

2024-03-15 21:47:02 386

原创 rk3568-一种基于wifi的网络环境搭建方案

PC--Ubuntu--开发板 三者之间的网络互相ping通很重要,尤其是ubuntu和开发板互ping成功最关键,关系到nfs,tftp等常用的开发手段。现在大多数开发板都带有wifi芯片,现在提供一种方案可以三个设备无线地搭建网络环境。如果是网线的方案,可以去看我之前的文章,双网卡方案。

2024-02-29 16:17:45 1360

原创 新开发板-正点原子的rk3568

其实受我第一个linux开发板的影响(讯为4412),我很想买讯为的,因为我比较习惯讯为的教程风格,资料也丰富,而且我有一块他们家的lvds屏幕,但是呢讯为是730,原子是660元子,再就是教程目录上起来原子多了一些东东,比如m.2之类的,屏幕当然也是一个很大的影响因素,我想的是我也有一块原子的7寸rgb屏,应该能用吧(结果是没法用,因为原子的3568没有这个rgb接口)。纠结了很久,还是买了,对比来对比去,选择了正点原子的,原因是--原因当然是性价比啦~四核ARM Cotex A55@2.0GHZ。

2024-02-04 16:07:27 1051

原创 10.定时器各功能分析及编码

STM32的定时器有三种,高级定时器,通用定时器,基本定时器就是功能多与少的差别,下面来逐个解释功能:在此之前,需要对几个概念有认知。

2023-12-30 15:15:10 1741

原创 9.独立看门狗IWDG&窗口看门狗WWDG编码思路

看门狗是维护系统稳定性的一向技术,可以让代码跑飞及时复位,在产品中非常常用,俗话说,重启能解决90%的问题,作为产品来说,你总不能因为一次bug就让程序卡死不动了,肯定要试着重启一下的。看门狗的原理简单的说就是它是一个倒数的计数器,倒数到某个数,它就重启,我们正常的程序当然不能莫名其妙重启,所以在它倒数的期间,往它的计数器写一个新的倒数的值,这样它就不会重启了。更简明地说,就是要定时地,往它的某个寄存器写一个值以防它重启。独立看门狗和窗口看门狗原理一致,差异只在于倒数到哪个值就重启。

2023-12-22 15:58:30 1375

原创 8.基于Cortex-M4内核的STM32F40x中断分析

完整的CM4有256个可编程中断(16个内核中断和240个外部中断),而stm32f40x共有92个中断(10内+82可编程),意思是说STM32F40X这个单片机没有完全释放CM4内核的资源。CM4内核的中断是由NVIC来控制的,就像是GIC这样的东西~它一共有几个寄存器用来管理这256个中断的各种行为,包括:中断使能寄存器(ISER[8],这是一个32位数组,共8个。32*8个位控制着256个中断)失能寄存器(ICER[8],看名字就知道了,但是很神奇哈,为啥芯片不设计成写1开写0关)

2023-12-21 21:52:12 1509

原创 7.串口通信uart编写思路及自定义协议

*更改变量 BEGIN-- *///引入该.h可使用//引入该.h可使用//引入该.h可使用//从索引2开始赋值/*更改变量 END-- */协议头0x2c,0x12协议尾0x5b,想要让协议数据位变多,只需要修改变量RxBuffer1[]的定义即可//解析接收的数据 最多11哥,两个帧头,一个帧尾,其他是数据位uint8_t i;//计数u8 pi=0;//打印调试if(RxState==0&&com_data==0x2C) //0x2c帧头 RxCounter1==1。

2023-12-21 11:47:21 2287

原创 6.项目中key扫描的好方案之一

根据新按键的硬件连接选择上拉或者下拉,别忘了初始化时钟。

2023-12-20 16:47:37 1166

原创 5.从点亮led看位带操作

/IO方向设置} //PB9输入模式} //PB9输出模式//IO操作函数#define READ_SDA PBin(9) //输入SDA例如在I2C发送数据时,要设置SDA的方向之后,再操作数据线//IIC发送一个字节//返回从机有无应答//1,有应答//0,无应答u8 t;SDA_OUT();IIC_SCL=0;//拉低时钟开始数据传输for(t=0;t<8;//对TEA5767这三个延时都是必须的IIC_SCL=1;IIC_SCL=0;

2023-12-19 11:28:40 963

原创 4.配置系统时钟思路及方法

一个时钟树一般先对复杂,我们先调出主频(及编程好时钟源、PLL倍频这一部分)其他的之后再说,如此编程才不会太复杂。实际上这个一般厂家会给一个配置文件的,但是如果要自己做些超频之类的操作,就要彻底掌握时钟树的配置了,见人见智,追求技术的这个内容是逃不掉的。

2023-12-18 13:10:05 1693

原创 基于IEEE 802.15.4协议的Zigbee的PHY层、MAC层理解分析

IEEE 802.15.4标准的一种无线通信协议,主要应用于低功耗、短距离的设备。它包含了一系列的协议层,用于实现设备之间的通信和网络组建。(有点像废话,总之三点,无线,低功耗,短距离。

2023-12-15 11:45:18 1823

原创 3.滴答定时器1ms中断

之前是用stm32cube建立工程,也没体会到臃肿,然而现在使用寄存器开发,真正感觉快太多了,整个工程特别清爽~一共也没几个文件,几乎只需要启动文件(.s那个汇编文件),还有正点原子给的时钟、串口初始化文件就差不多够了,编译速度简直不要太快~想起之前做一些单片机小项目经常要用到的就是滴答定时器,1ms中断一次,可以用来计时计数,指示程序运行状态之类的,很好用,但是正点原子的delay相关的函数就是用这个来实现的,占用了滴答定时器,所以我就想着。

2023-12-14 08:54:36 1190

原创 2.keil5部分配置和仿真

f12跳转到定义。

2023-12-12 21:56:02 645

原创 1.新入手的32位单片机资源和资料总览

买了 正点原子stm32f407探索版+4.3LCD, 3.5LCD,ov2840摄像头+转接板,一共351,感觉还行。其中3.5寸LCD是买多的,但是懒得退了。我觉得重要的信息,就简单的记了一下,无非就是芯片型号、封装、RAM和FLASH.还有各种外设。硬件资源大概就是这样,开发还需要~原理如图、芯片数据手册、例程等,一并下载下来~看看成色:还是不错的,跑了综合例程,没有发现问题。完~接下来有空就进入学习了。

2023-12-12 20:20:27 508

原创 CC2530 IAR环境搭建及使用

学校上了这个课,顺便记录一下~正常安装即可,需要注意的是它这个IDE的路径是:如果先前有安装了MSP430的IAR,那更需要注意的是,。例如我的IAR FOR MSP430它的IDE的exe就是在下图处参考:https://blog.youkuaiyun.com/as480133937/article/details/88700160。

2023-12-08 11:36:25 944

原创 讯为4412全能版移植uboot2020问题之DDR3

按照讯为的精英版的文档去移植,固然能够启动,但是其实并不适用于2GDDR的全能版4412,因为文档里的是使用于1GDDR的情况。其中CHIP_MASK设置的是0xc0,设置为0xc0,那么DDR3容量上限只有1G,设置超过2G就会报错,而设置为0X80,可以使用所有容量的DDR。我们可以看到,板级配置文件写的每一bank的容量是256M,8*256M就算2G,这样uboot识别到的DDR就是2G了。(尴尬,我的uboot被我改的面目全非,凑活着看吧。根本原因在于,DMC的。

2023-11-16 22:18:08 177 1

原创 linux挂载rootfs到运行第一个程序分析

在上一篇博客“linux启动流程学习与总结”里,我们提到挂载根文件系统后,内核代码调用了init_post()函数执行了第一个应用程序,那么这个init_post()里面是干了什么呢?

2023-11-05 22:38:03 318

原创 linux启动流程学习与总结

无论是linux还是uboot,首先首先要看的就是其配置文件,而linux各种配置文件,例如xxx_defconfig、make menuconfig(Kconfig)、.config等,最终最终都是服务于makefile的。先看配置文件吧,且看下面这个图,网课截的总结起来就是,配置文件要么在架构-平台的configs文件夹里,找一个和你的板子相近的xxx_defconfig来作为蓝本,以此为基础进行修改,要么就用开发板厂家提供的xxx_defconfig或者xxx_config覆盖.config。

2023-11-04 22:53:39 154

原创 make_ext4fs 报错解决ubuntu20.04

因为讯为教程是基于ubuntu12.04的,而我的是ubuntu20.04的,不知道兼容不兼容,如果是静态链接的应该可以,动态链接的估计又有一堆依赖问题,不管怎么样只能试一试了。将这两个工具拷贝到ubuntu20.04,覆盖原来的make_ext4fs,然后打包文件系统,登登登登登登,成功了!-l 指定分区大小,314572800是十进制的数,单位是B,换成M就是300M,意思是这个是生成的镜像大小的上限值,如果实际的大小超出300M会打包镜像失败。的内容,想着去借鉴借鉴。

2023-10-30 12:55:51 1280

原创 ubuntu12.04升级gcc到4.8流程与问题解决

今天要用buildroot,配置完编译的时候提示gcc要4.8以上,我的是.4.4.7所以需要安装高版本的gcc。参考链接 第二个链接可以不看的,第一个链接应该就解决了证书认证问题。上面报错是说服务器证书认证失败,解决方法简单的说就是重装证书。另外贴一下我的ubuntu12.04的软件源,超级好用。c++编译器也一样,把上面的gcc改成g++即可。结合了诸多帖子,解决了。

2023-10-25 15:16:54 227

原创 linux驱动i2c子系统之0.96寸oled

没有前言~相关知识参照我滴另一篇博客~这个是用来练手滴。总体思路还是在设备树写i2c设备地址,在驱动代码中,注册i2c驱动,写好probe中的“入号注节硬操”操作,然后根据oled数据手册,初始化它,然后根据应用层传来的字符去显示到oled上,至于怎么显示涉及的一些踩点算法,是参考之前stm32写的oled代码,其实都差不多,c语言移植起来也方便。linux驱动i2c子系统之mpu6050_灵魂之Ca的博客-优快云博客。

2023-10-17 17:20:17 369

原创 linux驱动i2c子系统之mpu6050

其实也没什么新颖的,因为Linux内核贯彻设备和驱动分离的原则,i2c驱动开发的流程和平台总线设备驱动开发差不太多。这个i2c子系统呢同样也是系统帮我们做好了bus,在硬件外设信息方面,我们描述好i2c外设设备然后注册进去或在设备树中描述好i2c外设硬件信息,设备这部分就搞定了,而i2c驱动方面,也和之前学过的一样,写好匹配的符号表,和proce的函数然后注册这个驱动到系统中,如果在系统中找到对应的设备或者在设备树中找到了一致的compatible,就会进入probe函数。

2023-10-16 14:52:50 798

原创 linux驱动输入子系统之多输入设备

这篇写的是一次性给5个按键写好驱动~用输入子系统实现。

2023-10-15 19:06:02 77

原创 linux驱动输入子系统

输入子系统,就是 入号注节硬操 中 申请设备号,注册设备,生成设备节点,fops,不用自己写了,系统帮忙写好了,可以方便的开发。要不要用就看需求了,对于输入设备例如key等等确实很方便。/sys/class/input/enentx/device 中可以查看属于输入子系统的设备信息输入子系统参数内涵:Type就是哪种输入设备,例如鼠标、键盘、触摸屏等类型code就是按键的内涵,例如是电源开关、EXT、左键等,人为赋予的内涵value就是该按键的状态,0没按下,1是按下(规定死的)

2023-10-15 18:51:34 113 1

原创 平台总线设备驱动模型

平台总线设备驱动模型,其实是总线设备驱动模型的一个子集。它的总线是platform_bus,由linux内核提供,我们只需要往里面注册设备和驱动就行了。现在有了设备树,不注册设备也行。

2023-10-14 22:27:49 130 1

原创 总线设备驱动模型

字符设备驱动和总线设备驱动的关系用下图可以表明:这张图片中右边的device代表着系统中所有的设备,无论是字符设备驱动注册的字符设备抑或是总线设备,都会汇总到/sys/devices中,那为什么在已经有了字符设备、我们可以编写驱动了的情况下还有总线设备驱动呢?答案就是分离和复用的思想,总线设备驱动中,bus里面有dev和drv两个链表,当我们注册dev和drv时,需要指定bus和name,通过bus可以把dev/drv注册到bus的链表中,而通过name可以在同一个bus中将设备和驱动配对起来。

2023-10-14 13:14:34 102 1

原创 linux驱动两种中断上下文的实现

中断上下文又称中断上下步,其实就是,写在中断服务函数的代码(上半步)先做掉,然后返回之后再找时间做下班步函数里的代码。适用于数据量比较多的情况,因为中断要求快进快出嘛。有两种中断上下文的实现,一种是基于内核线程的tasklet等待链表,一种是基于内核进程的work工作队列。它们的效果一样,但是区别是前者不能够在中断下半步执行休眠(挂起)相关的函数,而后者可以。

2023-10-13 19:45:02 101

原创 IO模型之异步IO

异步IO的实现主要是通过linux的信号机制。框架:字符设备驱动框架。

2023-10-13 16:20:48 186

原创 IO模型之POLL

在很多编程情景都有用到poll或者select的思想,大白话就是“监听”,用一个组件来监听哪一路通道有动静,进而再去处理。而在驱动编程中,这个组件就是poll函数。poll的机制大致可以用下图来描述:具体的代码流程是这样的:应用程序--使用poll函数监听多个文件描述符(其实就是外设之类的东西)--判断、处理-------------根据linux的层次,应用程序的poll会对应一个驱动的poll函数-----------------

2023-10-13 15:04:55 84

原创 IO模型之阻塞模型

框架:字符设备驱动框架IO顾名思义就是输入输出,对于linux驱动而言,输入输出就是file_operations里的read和write操作。至于模型,这个词听起来牛批,其实就是io读写的不同模式,比如非阻塞io,从应用程序的角度(驱动是服务于应用的),无论有没有read到数据,都会返回一个值,程序不会卡在原地;而阻塞io,就是应用程序,没有read到数据就会卡在原地不动(后面我们会知道其实是这个应用程序的read所对应的驱动被吊起来了,既不进行下去,也不返回,造成了应用程序卡在那里的情况~)

2023-10-13 10:15:18 110

原创 传统方式和设备树方式获取中断

再瞄一眼,按顺序是CON,DAT,PUD,DRV寄存器,也就是说~基地址+0是CON,基地址+1是DAT,基地址+2是PUD,基地址+3是DRV。这个比较麻烦,不熟悉板级驱动的还真不太好搞,这个可以去参考讯为的手册,我记得他有讲过。在/kernel/arch/arm/boot/dts/exynos4412-itop-elite.dts中搜索关键词”gpx1“或者“Home”"key"可见果然有别的地方占用了,把home里面的内容都注释掉即可,我们自己的驱动就不会报错了。这就是GPX1寄存器的物理地址了,

2023-10-12 20:59:20 187

查看linux平台信息脚本

查看linux平台信息脚本

2024-10-19

windows和linux路径斜杆转换脚本,打开即用

windows和linux路径斜杆转换脚本,打开即用

2024-06-23

空空如也

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

TA关注的人

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