嵌入式系统开发
硬族嵌入式
Life is short,Play more!
展开
-
Mutt and Smtp Notes
1 Environment and resourcesIn order to achieve an email client, need to download the following four files:1. mutt-1.5.22.tar.gz http://www.mutt.org/download.html2. openssl-1.0.0d.tar.gz http://w原创 2016-12-03 11:14:29 · 1189 阅读 · 0 评论 -
Linux下mount/umount函数应用
针对海思平台system命令占用资源较大的问题,因此程序中与系统调用相关的就只能用函数实现了。demomount.c:#include int main(void){ int ret = 0; ret = mount("/dev/mmcblk0p1","/mnt/sd_card","vfat",MS_SYNCHRONOUS,"iocharset=utf8");原创 2017-10-18 16:35:23 · 2906 阅读 · 0 评论 -
Linux查看可执行程序依赖的库名
readelf -a 可执行程序|grep library原创 2017-10-18 17:01:09 · 3011 阅读 · 0 评论 -
海思平台GPIO驱动最简单实现
闲来无事,发两个小程序玩玩利用HI_MPI_SYS_SetReg、HI_MPI_SYS_GetReg实现GPIO驱动程序源码:#include /*#define GPIO_IR_CUT (0x201C0000 + 0x400) //GPIO8_0 0x00#define GPIO_CDSADC (0x201B0000 + 0x400) /原创 2017-10-18 17:33:45 · 6678 阅读 · 4 评论 -
ti8148 dvrrdk开发小结
从接触这个平台到现在已接近一年时间,之前很多时间虽然一直在这个平台做应用还有部分的驱动,但是一直没真正理解这个平台到底真正的优势和技术难点在哪里,其实也就是最近搞这个平台的SWMS时才有了更进一步的认识,从底层的硬件到上层的dvrrdk的学习,学习了这个四核视频协处理平台的软件框架。一、下面我就从TI提供的DM81xx DVR_RDK Overview来引入一些概念:介绍DVR RDK原创 2016-12-07 12:00:51 · 4638 阅读 · 0 评论 -
ti8148内核编译驱动模块-手动加载mmc驱动
情景:由于出现开机加载SD卡失败导致主机重启的情况,现对加载mmc驱动时间做一下调整,等主机完全准备好再加载mmc驱动,之前mmc驱动是放在内核里编译的,现调整为开机完成后应用层的APP启动之前手动加载mmc驱动。1、首先看每个驱动源码下面的Kconfig文件config MMC_BLOCKtristate "MMC block device driver"depends on B原创 2016-12-07 10:15:09 · 1102 阅读 · 0 评论 -
HTTP协议之post multipart/form-data数据类型实例
首先,说这个问题之前吐槽一下网上的文章,做这个东西的时候几乎看了所有的博客,没一个说到点上的,太笼统,也不完整,我就在想等我做好一定要写篇完整的文章,其实最好的源码就是提供的demo。1、先说下问题背景http://help.robotscloud.com/book/osr/api/hsr_detection2.html这是萝卜头的一个人形识别的请求实例,我现在要做的就是把图片上传并拿到返原创 2017-10-27 11:43:48 · 64354 阅读 · 1 评论 -
读写锁pthread_rwlock_t的使用
读写锁是用来解决读者写者问题的,读操作可以共享,写操作是排他的,读可以有多个在读,写只有唯一个在写,同时写的时候不允许读。具有强读者同步和强写者同步两种形式强读者同步:当写者没有进行写操作,读者就可以访问;强写者同步:当所有写者都写完之后,才能进行读操作,读者需要最新的信息,一些事实性较高的系统可能会用到该所,比如定票之类的。读写锁的操作:读写锁的初始化:定义读写锁转载 2017-11-13 17:05:15 · 520 阅读 · 0 评论 -
解决嵌入式系统用户态和内核态定时时间精度不够的问题
现象:使用top进行cpu占有率统计不是很准确,可能会出现波动,特别是在小业务场景,top统计的cpu占用率波动会很大。分析:版本Linux kernel 默认使用HZ为100,也即为10ms调度统计,统计时间粒度较粗,导致统计精度不够,如此波动会比较大。解决:如果期望比较准确的cpu占用率统计值,可以修改kernel HZ为1000,如此可以提高统计精度。具体实施原创 2017-11-13 19:47:41 · 777 阅读 · 0 评论 -
最简单的嵌入式Linux下ntp实现
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define JAN_1970 0x83aa7e80 /* 2208988800 1970原创 2017-11-04 10:45:51 · 1145 阅读 · 0 评论 -
hrtimer内核高精度定时器
#include #include #include #include MODULE_LICENSE("GPL");static struct hrtimer hr_timer;static struct work_struct wq_hrtimer; static ktime_t ktime;static unsigned int interval=5000; /* uni原创 2018-01-02 14:07:50 · 1205 阅读 · 0 评论 -
海思步进电机驱动
hisi_motor.c#include //所有模块都需要的头文件#include #include //文件系统有关的,结构体file_operations也在fs头文件定义#include //init和exit相关宏#include #include #include //linux中的用户态内存交互函数,copy_from_user(),copy_to_user()等原创 2018-01-02 14:13:01 · 1735 阅读 · 0 评论 -
select函数相关
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式...转载 2018-05-25 21:56:38 · 301 阅读 · 0 评论 -
Linux进程间通信:信号量 semget()、semop()、semctl()
一、什么是信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,也就是说信号量是用来调协进程对共享资源的访问的。信号量是一个特殊的变量,程序对其访问都是原子操作...转载 2018-05-29 20:37:48 · 978 阅读 · 1 评论 -
Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches
通常在嵌入式系统开发中会使用这样一条命令来释放缓存:"echo 3 > /proc/sys/vm/drop_caches"Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches频繁的文件访问会导致系统的Cache使用量大增$ free -mtotal used free shared buffers cachedMem: 3955转载 2017-07-19 18:17:51 · 2716 阅读 · 0 评论 -
嵌入式开发之--Linux下C语言实现小工具集合
直接上代码,很好用很实用哦!#include #include #include #include #include #include #include /* offsetof */#include #include #include #include #include #include #include #include #include #include原创 2017-07-18 15:55:45 · 1273 阅读 · 1 评论 -
Linux系统对IO内存和IO端口的管理
一、I/O端口端口(port)是接口电路中能被CPU直接访问的寄存器的地址。几乎每一种外设都是通过读写设备上的寄存器来进行的。CPU通过这些地址即端口向接口电路中的寄存器发送命令,读取状态和传送数据。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。二、IO内存例如,在PC上可以插上一块图形卡,有2MB的存储空转载 2016-10-25 09:43:32 · 390 阅读 · 0 评论 -
Ubuntu12.10下获取PC的实时网速
本文提供两种获取实时网速的方法:一、Nload命令Nload是Linux的一款网络流量实时监控软件,可以通过 sudo apt-get install nload 来安装。输入命令nload:显示说明:默认第一行是网卡的名称及IP信息,使用键盘上的左右键可以切换网卡。默认上边Incoming是进入网卡的流量;默认下边Outgoing是网卡出去的流量;默认右边原创 2016-09-09 15:23:17 · 1215 阅读 · 0 评论 -
嵌入式wifi开发--设置动态的账户密码信息
在嵌入式平台下当wifi驱动移植好之后,我们可以用Wireless和wpa_spplicant工具进行网络的配置,这两个工具的具体移植方法这里不再讲述!但是此时我们会发现我们上网都是通过wpa_spplicant读取wpa_spplicant.conf文件进行访问的,改文件中包含了wifi所需的账号密码等一些主要信息,在启动前我们需手动配置好,下面我们就讲述一下通过脚本实现动态的获取账号密码信息。原创 2016-04-11 17:29:52 · 1737 阅读 · 0 评论 -
共享内存+信号量+消息队列实现IPC
一组服务器与客户端之间通信方式有很多,下面介绍一种共享内存+信号量+消息队列的形式来实现进程间的通信。信号量:信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。特点:信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。转载 2016-09-08 17:35:46 · 1687 阅读 · 0 评论 -
网络传输工具cURL和libcurl
介绍cURL是一个利用URL语法的文件传输工具,是基于libcurl的前端命令行工具。它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。 它同样支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证, HTTP上传, 代理服务器, cookies, 用户名/密码转载 2017-04-13 09:35:12 · 579 阅读 · 0 评论 -
嵌入式Linux下ntp移植
嵌入式设备中,有些需要得到实时的比较准确的时间,以和服务器或是设备之间进行时间同步,但是很多嵌入式设备又不能通过人工设置时间的方式来同步时间,需要自动从网络上获取时间,这就需要用到NTP。NTP是网络时间协议(Network Time Protocol)的简称,它是用来同步网络中各个计算机设备的时间的协议。目前有第三方的代码可以支持NTP,本文讲诉ntpclient的用法。ntpclient的原创 2017-05-03 11:41:24 · 2869 阅读 · 0 评论 -
Unix/Linux系统下的时间知识点
一、Unix/Linux系统下有以下几种时间结构:1、time_t 类型:长整型,一般用来表示从1970-01-01 00:00:00时以来的秒数,精确度:秒;由函数time()获取;该类型定义在头文件 /usr/include/sys/time.h 中:#define _TIME_Ttypedef long time_t; #endif 函数定义:time_t time(转载 2017-05-09 09:11:13 · 373 阅读 · 0 评论 -
G711a音频播放测试
demo:#include #include #include #include #include #include #include #include #include #include #include "gmlib.h"#include "GM8136s_hal_gpio_voice_player.h"void *audio_groupfd2;void *f原创 2017-06-28 17:22:30 · 7854 阅读 · 0 评论 -
关闭看门狗-喂狗
有时候程序运行过程中需要单独关闭看门狗:#include #include #include #include #define TIMEOUT 10#define WDT_DEVICE_FILE "/dev/watchdog"int main(void){ int g_watchdog_fd = -1; int timeout = 0; char arg原创 2017-06-20 09:44:42 · 2737 阅读 · 0 评论 -
C语言 fgets函数与fputs函数用法
fgets (buf, size, fp)其行为方式如下:(1)遇到换行或文件结束EOF则返回。(2)按行读取。(3)每一行结束处的换行字符‘/n’也算该行字符。(4)对于大小为size的buf,最多只读取size-1个字符。(5)自动地把buf中最后一个字符(通常是换行符)的后面一个字节填充零结束符('/0')。因此如果想把buf中的换行符去掉,可以这样:buf[转载 2017-07-11 18:05:05 · 2484 阅读 · 2 评论 -
sd卡U盘异常检测程序
嵌入式系统开发过程中,SD卡是比较常见的外设,SD卡的稳定性与整个嵌入式系统的稳定息息相关,除了相应的驱动,还应有完整的异常检测机制。异常检测demo:#include #include #include #include #include //cw_mark#define STORAGE_UDISK 0#if 0#include "MenuPicCfg.h"#incl原创 2017-06-23 21:39:35 · 847 阅读 · 0 评论 -
LinuxC语言实现上传功能(curl)
该程序是对接阿里云时做得,上传其他平台可能会略有差异,请注意!直接上代码(注意参数,最好能看懂上传的大致流程,其实也是用curl):#include #include #include #include #include #include "curl.h"#include "util.h"static char AccessKeyIdG[64] = {0};static原创 2017-07-06 11:45:36 · 2238 阅读 · 0 评论 -
LinuxC语言实现下载功能(curl)
直接上代码(可直接用,注意参数):#include #include #include "http_upgrade.h"int download_Progress = 0;int http_progress = 0;static int ProgressCallback(void *clientp, double dltotal, double dlnow, double ult原创 2017-07-06 11:28:30 · 2991 阅读 · 0 评论 -
内核hotplug事件---利用Netlink处理hotplug实现热插拔监控
先上monitor的demo:sd_monitor.c#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include原创 2017-07-10 10:12:39 · 4691 阅读 · 0 评论 -
浅谈嵌入式软件架构思想
我从事嵌入式软件开发有6,7个年头,bsp,驱动,应用软件,android hall,framework等都有涉猎。平时除了关注嵌入式行业的发展,也多少对Web,后台服务端,分布式等方向的技术有一些关注。近期有萌生换个行业方向的想法,想做做后台服务器相关的开发,由于之前工作中并没有这方面的实际需求,只是自己平时关注,了解了些知识,比如:NIO,epoll,ngnix,zeromq,...转载 2019-09-23 17:36:41 · 2337 阅读 · 0 评论