2019-01-14 22:32
⁄ 工业·编程
⁄ 共 1012字
freemodbus 的应用场景 主要是在 非linux下的 单片机系统,当然了,freemodbus 1.6 版本也开始支持了 linux,不过在linux下,如果不是一定要移植源码的话,个人觉得 libmodbus 相比 freemodus 还是更方便一些,功能更加灵活而且丰富。当然如果是 普通单片机系统,freemodbus 是一个不错的 开源modbus 从机 功能,不仅代码开源,重要的是非常稳定可靠。
这里先简单的 从文字的角度 来分析一下 freemodbus 从...
freemodbus阅读全文
2019-01-12 22:27
⁄ 工业·编程
⁄ 共 878字
本文简单的说一下 libev 的 使用关键点。
libev 是一种高性能事件循环 / 事件驱动库。作为 libevent 的替代作品,由于其支持linux,而且其作者声称其相比libevent速度更快,代码更少,所以我们在嵌入式linux中采用 libev。
libev 同样需要循环探测事件是否产生。Libev 的循环体用 ev_loop 结构来表达,并用 ev_loop( ) 来启动。
void ev_loop( ev_loop* loop, int flags )
...
libev, 网络编程阅读全文
2019-01-11 21:54
⁄ 工业·编程
⁄ 共 4649字
libev目前最典型的应用场景可能就是 网络服务器的 编程框架中,常规的 网络服务器编程都是 从 bind()、listen()、accept()、read()等接口开始的,标准的 socket 编程套路,不管Windows还是linux都是一样的,这些标准的接口,可以方便的构建 服务器/ 客户机的模型的。假设我们希望建立一个简单的服务器程序,实现向单个客户端提供 “一问一答”的内容服务。
单线程、阻塞型网络编程
图 1. 简单的一问一答的服...
libev, 网络编程阅读全文
2019-01-10 21:46
⁄ 工业·编程
⁄ 共 649字
libev 是 一种 “事件驱动”的编程框架,所谓“事件驱动”,简单地说就是就是 有什么动作(点按钮、中断),程序就执行什么操作(中断服务函数、回调函数),当然事件不仅限于用于的操作,只要是定义好的,各种突发、预设的各种将要发生的事情,都是事件。这里,我对CPU相对熟悉一些,可以把“事件驱动”理解为 自定义软件中断。这里我们举几个案例来分析:
案例1: 状态机FSM
状态机是一种常用的编程框架,本质上...
libev阅读全文
2019-01-07 21:40
⁄ 工业·编程
⁄ 共 1888字
一、宏定义中 “#”知识点
#的作用是将“#”后面的宏参数进行字符串转换操作,也就是将#后面的参数 两边加上一对双引号,使其成为字符串。
这里面有几个知识点:
1、直接转换字符串,不展开。
这句话的意思是,带参数宏定义也是宏,而不是普通函数,所以要保留宏的基本特性,也就是全部替换,而不展开。示例代码:
#include <stdio.h>
#include <stdlib.h>
#define CONVERT(a) #a
int main(int argc, char *argv...
c++阅读全文
2019-01-05 21:27
⁄ 工业·编程
⁄ 共 298字
与“非阻塞模式”相关的有两个 标志,就是 O_NONBLOCK与O_NDELAY,这两种参数的结果都是使I/O操作设置为“非阻塞模式”,也就是non-blocking,当进行read/write操作时,不管结果如何,都会马上返回,而不会阻塞。
他们的区别是:在read时,如果读不到数据,O_NDELAY会返回0,由于正常读取到文件末尾时,也会返回0,这样就无法区分是否是遗产隔离,所以就引入了O_NONBLOCK,在读不到数据时,返回-1,并且设置errno为EAGAIN,而读到结尾...
linux编程阅读全文
2019-01-03 21:15
⁄ 工业·编程
⁄ 共 551字
关于函数fcntl的参数讲解的比较多,但是这个函数功能只有简单的一句话“fcntl函数可以改变已经打开文件的属性”。
我们知道,在Unix/linux环境下,不管是设备、I/O、socket等等,几乎一切都是文件,所以fcntl的功能就是对于这些设备、文件、I/O的属性进行设定,比如常用的功能:
1、复制一个已有的描述符,类似于dup函数功能。
2、获取/设置文件描述符标志。
3、获取/设置文件状态标志。
4、获取/设置一步I/O所有权。
5、获取/设...
linux编程阅读全文
2019-01-01 21:03
⁄ 工业·编程
⁄ 共 1837字
1、静态库和动态库的区别
(1)所谓静态库(*.a),就是程序link的时候就把静态库中的东西取出来,放到生成的可执行文件中,当这个可执行文件执行时,就不需要再次调用这个静态库了。
(2)所谓动态库(*.so),就是程序link的时候,只是将库中的 符号包含,并没有包含静态库里的内容,等到可执行程序在执行
时,需要依赖动态库中的内容,也就是“随用随取”。
(3)在linux编程中,对于静态库和动态库,在makefile中引用方式一模...
linux编程阅读全文
2018-12-31 20:53
⁄ 工业·编程
⁄ 共 1172字
我们开始程序一般会用IDE,也就是集成开发环境,比如Visual Studio、Keil、IAR等,IDE的出现极大的解放了程序员的工作,使得程序员不用再去关注过于底层的物理性的操作,而只去关注应用层面的开发,但是也有缺点,就是对于我这种想象力不强的笨程序员来讲,对于一些底层操作,很难直观的去想象。
IDE同城会将编译和链接的过程一步完成,这个合并的过程,就是我们熟悉的IDE中的build,当然也可以单独编译,也...
软件开发阅读全文
2018-12-29 20:55
⁄ 工业·编程
⁄ 共 548字
由于在linux中,内核空间和用户空间的内存是不能之间互相访问的,所以需要借助上面2个函数完成数据传输。
copy_to_user:从内核空间复制数据到用户空间
copy_from_user:从用户空间复制数据到内核空间。
在进行驱动相关程序设计时,经常会用到这两个函数,因为底层驱动显然是内核空间,调用驱动的是用户空间。
具体函数模型解释如下:
unsigned long copy_to_user(void __user *to, const void *from, u...
linux编程阅读全文