- 博客(71)
- 资源 (5)
- 收藏
- 关注
原创 ambarella misc
#进入预览模式init.sh --ov4689modprobe lcd_ili9342rmmod ambarella_fbmodprobe ambarella_fb resolution=960x240test_image -i 0 &test_encode -i0 --lcd 960x240 --mixer 1 --osd-mixer off#录制h264/h265命令...
2018-11-16 10:43:53
1177
原创 怎样从网络的内核和根文件系统启动开发板
首先在ubuntu虚拟机上要有nfs服务器1.启动开发板uboot,输入 下面的命令set bootargs console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.19:/work/nfs_root/tmp/fs_mini ip=192.168.1.17:192.168.1.19:192.168.1.1:255.255.255.0::eth0:of...
2018-09-16 17:43:31
710
转载 U_boot 的 bootcmd 和bootargs参数详解
U-boot的环境变量值得注意的有两个: bootcmd 和bootargs。u-bootcmd 前面有说过bootcmd是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数。u-bootargs bootargs是环境变量中的重中之重,甚至可以说整个环境变量都是围绕着bootargs来设置的...
2018-09-15 23:33:55
448
原创 关于linux输入子系统
input输入子系统将硬件设备配置部分input_dev和驱动程序handler分开,并通过一个input_handle将两者连接起来 input-----(核心层) |input_dev--------------|------------------ inp...
2018-09-09 07:42:59
425
原创 关于环形缓冲区
环形缓冲区实质是一个数组.开始时读指针和写指针均指向数组第一个元素.buf是数组1.初始化w_pos=r_pos=buf;2.写操作buf[w_pos]=val;w_pos=(w_pos+1)%len //len是buf数组长度3.读操作val=buf[r_pos]r_pos=(r_pos+1)%len 4.判断环形缓冲区是否为空r_pos==w_...
2018-09-06 21:30:46
1381
1
原创 linux中字符驱动程序的几种常用方法
以按键检测驱动程序为例1.查询方式 缺点是需要消耗较多CPU资源2.中断方式 应用的read函数调用驱动程序的的read函数,驱动程序的read函数会调用wait_event_interruptible()等待按键中断的发生.中断发生之前会处于睡眠状态,中断发生后会唤醒该read函数,将按键值传回应用层.睡眠状态不会消耗cpu资源3.poll方式在方式2 的基础上加上pol...
2018-09-06 11:42:57
683
原创 linux驱动程序编写过程中常用的命令
insmod xxx.ko 加载模块lsmod 查看模块rmmod xxx.ko 卸载模块ls /dev/xxx 查看dev下是否安装了此设备 xxx为设备名如 ls /dev/led*# ls /dev/led*/dev/led1 /dev/led2 /dev/led3 /dev/leds cat proc/devices 查看主设备号mknod /...
2018-09-04 09:16:49
665
原创 ARM裸机驱动中的main函数调用前的准备工作
硬件方面1.关闭CPU看门狗2 配置CPU的工作时钟3.程序要在SDRAM中运行,因此必须初始化SDRAM软件方面1 函数要运行,需要栈空间,因此必须初始化栈指针SP2 设置main函数的返回地址3 调用main4 清理工作 ...
2018-09-03 16:30:25
388
原创 JTAG工作原理
JTAG是CPU内核的一部分,cpu发出的数据信号和地址信号都要经过JTAG单元.利用这一点,可以控制CPU.例如,当地址信号等于0xXXXXXXXX时停止CPU,或者当数据信号等于0xXXXXXXXX时停止CPU, 停止时可以读出各个寄存器的值,停止之后还可以让CPU继续运行.电脑软件ADS,KEIL,openOCD等可以通过JLINK,openJTAG来控制JTAG.ARM9内...
2018-09-03 16:30:05
3566
原创 linux驱动程序中的虚拟地址动态映射和静态映射
所谓虚拟地址映射就是从虚拟地址映射到物理地址,MMU开启后,CPU访问的地址都是虚拟地址。虚拟地址映射分为动态映射和静态映射静态映射的特点在内核启动时建立静态映射表,在内核关机时销毁,中间一直有效,优点是执行效率高,缺点是始终占用虚拟地址空间,空间利用率低不同版本内核静态映射表位置,文件名可能不同不同的SOC静态映射表位置,文件名可能不同所谓的映射表其实是头文件中的宏定义...
2018-09-03 12:08:35
800
原创 linux中应用与驱动之间的数据交换方法
static struct file_operations char_leds_fops = { .owner = THIS_MODULE, /* 这是一个宏,推向编译模块时自动创建的__this_module变量 */ .open = char_leds_open, .read = char_leds_read, .write = ch...
2018-09-03 11:42:58
2299
原创 常用的模块操作命令
驱动一般可实现为驱动的方式,但是模块不只是驱动,还有别的东西也可以实现为模块1.lsmod (list module 将当前内核已安装的模块列表显示出来)\2.insmod 安装模块 如 insmod *.ko,该命令会运行module_init()后面括号中的函数3.modinfo 查看模块版本信息insmod时模块的版本信息vermagic必须与内核zImage的版本信息...
2018-09-02 22:08:21
456
原创 内核源码解压.打补丁以及配置.编译方法
比如内核压缩包为linux-2.6.22.6.tar.bz2补丁为linux-2.6.22.6_xxx.patch1解压tar -xvf linux-2.6.22.6.tar.bz22.打补丁cd linux-2.6.22.6patch -p1 <../linux-2.6.22.6_xxx.patch 3. make xxxx_defconfig比如如果...
2018-09-02 18:37:29
1120
原创 怎样在虚拟机ubuntu上编译任意版本linux内核
在编写linux驱动程序时,在交叉编译环境下,必须保证编译系统的内核源码树与开发板上的内核源码树版本等一致,ubuntu的内核版本 一般与开发板系统的内核版本是不一致的.解决问题的方法是将与开发板内核版本一致的源码copy一份到ubuntu系统中,比如放到/work/system/linux-2.6.22.6下面.然后linux驱动程序的makefile可以这样编写KERN_DIR = /...
2018-09-02 18:23:46
2281
原创 交叉编译环境中虚拟机ubuntu向开发板传送文件的方法
预备知识:NFS是什么?NFS:Network File System(网络文件系统),NFS只是一种文件系统,本身并没有传输功能,是基于RPC协议实现的,为C/S架构。也就是说,NFS也只是文件系统而已,与jffs2,yaffs,ext4等是一类东西。但是NFS的特殊之处在于,它可以通过网络来挂载,而不用烧写到设备上。这就跟网吧里使用PXE启动来搭建无盘系统一样:每台电脑并没有安装硬盘,...
2018-09-02 18:04:28
1355
1
原创 linux交叉编译环境中的网络配置
应该设置虚拟机 ,windows主机 ,开发板在同一个网段。1.安装vmware,在vmware中安装ubuntu,或者直接运行做好的ubuntu vmx文件。2.打开开发板电源。用网线和windows主机相连。同时开发板串口也和主机串口连接,也可以用USB转串口。windows中用MobaXterm来监控串口并输入命令操控开发板。虚拟机部分设置首先设置为桥接模式如下图 ...
2018-08-28 11:56:40
323
原创 中断中的数据共享问题
如果中断处理程序和一个函数共享数据,直接在该函数中关中断和开中断并不是最好的方法.int a,b,c;void interrupt update(void) //中断处理程序{ a++; b++; c++;}void get_abc_value(void){ disable(); //关中断 return a*100+b*10+c...
2018-08-28 08:13:16
1321
原创 RTOS环境中的中断程序应该注意的问题
1. 中断程序决不能获取信号量,读取可能会空的队列或者信箱,等待事件等,如果某个中断程序调用了RTOS函数,并被阻塞,那么除了该中断程序之外,被中断的任务也会被阻塞。即使该任务有最高的优先级也是如此。2.中断程序不能对有任务等待的队列或者信箱执行写操作,不能设置事件,释放信号量等,如果某个中断程序破坏了这个规则。操作系统会把控制从该中断程序切换掉,而去运行另外一个任务,这样这个中断程序就会长...
2018-08-27 16:20:27
1458
1
原创 保护共享数据的方法
1.关中断2.使用信号量3.禁止任务切换关中断是最激烈的方法。它会影响系统中所有中断程序和其他任务的响应时间。如果关中断则也禁止了任务切换,因为调度程序不能控制处理器切换。关中断有两个优点。1.它是在数据由任务代码和中断程序共享的情况下,唯一能工作的方法。因为中断程序,不允许获取信号量。而禁止任务切换,不能禁止中断。2.速度快,多数处理器能用一条指令开关中断。使用信号量是保护共享数...
2018-08-27 15:47:32
671
原创 地址和长度的字节对齐算法
长度为n, align字节对齐的三种方法unsigned int calc_align(unsigned int n,unsigned align) { if ( n / align * align == n) return n; return (n / align + 1) * align; } unsign...
2018-08-27 15:29:09
1563
1
原创 关于优先级反转
如果一个低优先级任务C获取信号量后,在这个低优先级任务C执行过程中,RTOS有可能调度到一个中等优先级B的任务上执行,一个想获取信号量的高优先级任务A不得不等待,直到中等优先级任务B放弃了处理器,低优先级任务C直到它获得了处理器后才会释放信号量.这个过程中,中等优先级任务B会不让C释放信号量,因而阻塞了高优先级任务A,这就是优先级反转.有的RTOS用优先级继承解决这个问题,即在任务C持有信号量...
2018-08-27 15:28:01
642
转载 STM32 之 USB 虚拟串口
在现代个人电脑的USB是几乎所有外设的标准通信端口。然而许多工业应用软件仍然使用经典的串口(UART)。USB虚拟串口提供了绕过这个问题的一个简单的解决方案。 为了让USB被视为一个COM端口,USB设备必须根据通信设备类(CDC)规范来实现两个接口:1.抽象控制模型通信,在端点中有1个中断:在我们的实现中,这个接口在描述符中声明,但是相关的端点(端点2)不被...
2018-08-11 22:03:23
53753
5
原创 怎样用STM32CAN总线接口发送和接收数据
CAN协议基础知识I2C.SPI总线多用于短距离传输,协议简单,数据量少,主要用于IC之间的通讯,而 CAN 总线则不同,CAN(Controller Area Network) 总线定义了更为优秀的物理层、数据链路层,并且拥有种类丰富、简繁不一的上层协议。与I2C、SPI有时钟信号的同步通讯方式不同,CAN通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有CAN_High和CAN_L...
2018-08-05 09:17:21
57879
7
转载 一文看懂傅里叶变换
还记得上大学的时候的机械振动还有工程测试利用的傅立叶变化,当时感觉云里雾里的,感觉好难,也就没有去搞,浑水摸鱼也就过来了,然后现在到了研究生阶段,发现傅立叶变换呀,卷积呀非常的重要,也是学术研究最基础的工具。在做人脸识别的时候刚好用上,所以静下心来学习一下,找了一些资料,感觉不错,下面...
2018-07-30 12:23:37
17128
7
原创 怎样写SPI NOR FLASH 驱动
SPI 总线相关知识请自行百度。STM32 SPI 状态寄存器(SPI_SR)中的一些常用标志位TxE:发送缓冲为空 (Transmit buffer empty) ,为空则可发送数据RXNE:接收缓冲非空 (Receive buffer not empty) 为非空则可读取数据BSY:忙标志 (Busy flag)STM32 SPI读写时序这里以W25Q64...
2018-07-28 15:44:02
9437
转载 怎样用STM32 中的 I2C读写EEPROM(二)
假设硬件电路如下图EEPROM芯片的设备地址一共有 7 位,其中高 4 位固定为:1010 b,低 3 位则由 A0/A1/A2 信号线的电平决定,图中的 R/W是读写方向位,与地址无关。按照我们此处的连接,A0/A1/A2均为0,所以EEPROM的7位设备地址是:101 0000b ,即 0x50。由于 I2C 通讯时常常是地址跟读写方向连在一起构成一个 8 位数,且当 R/...
2018-07-28 13:36:38
2390
转载 怎样用STM32 中的 I2C读写EEPROM(一)
I2C协议简介I2C是一种串行同步通信方式,由一根时钟线和一根数据线组成.由Philips公司发明.由于它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。它是一个支持多设备的总线。“总线”指多个设备共用的信号线。在一个I2C通讯总线中,可连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机。每...
2018-07-28 10:07:43
6469
原创 怎样用STM32 ADC测量电压(DMA方式)
接上篇怎样用STM32 ADC测量电压(中断方式)由STM32参考手册可知,ADC2只能在双模式下用DMA。Only ADC1 and ADC3 have this DMA capability. ADC2-converted data can be transferred in dual ADC mode using DMA thanks to master ADC1.因此我们选用...
2018-07-26 19:26:38
8084
原创 怎样用STM32 ADC测量电压(中断方式)
ADC 概述ADC是模数转换的缩写,是将连续的模拟信号转换为离散的数字信号,在通信,自动控制等多个领域有着广泛的应用,利用各种传感器,能将现实世界中的模拟量转换为机器能够识别的数字量,机器有了ADC,就像人有了各种感官,能够感知周围的世界并做出反应。STM32F10x ADC特点l 12位逐次逼近型的模拟数字转换器。l 最多带3个ADC控制器l 最多支持18个通道,可最多测量...
2018-07-26 10:11:04
44408
8
原创 怎样用STM32 通用定时器 输出PWM信号
概述脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在电机控制,电力电子功率控制与变换的许多领域中。可以将其看作是数模转换的一种。配合DAC模块,还可以输出正弦波。STM32 的四个通用定时器TIM2~TIM5均可以同时产生4路PWM输出。STM32 定时器输出PWM的原理如上图,ARR是STM32中自动重装载寄存器的值,计数器从0开始计...
2018-07-20 10:59:46
8647
2
yuv播放器yuvplayer-2.5
2022-03-31
400*400的YUYV,YUV420P YUV422P三个文件
2022-03-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅