现在位置: 首页 > 自动控制 > 工业·编程 > 文章
2019-01-14 22:32 工业·编程 ⁄ 共 1012字 暂无评论
freemodbus 的应用场景 主要是在 非linux下的 单片机系统,当然了,freemodbus 1.6 版本也开始支持了 linux,不过在linux下,如果不是一定要移植源码的话,个人觉得 libmodbus 相比 freemodus 还是更方便一些,功能更加灵活而且丰富。当然如果是 普通单片机系统,freemodbus 是一个不错的 开源modbus 从机 功能,不仅代码开源,重要的是非常稳定可靠。     这里先简单的 从文字的角度 来分析一下 freemodbus 从...
阅读全文
本文简单的说一下 libev 的 使用关键点。     libev 是一种高性能事件循环 / 事件驱动库。作为 libevent 的替代作品,由于其支持linux,而且其作者声称其相比libevent速度更快,代码更少,所以我们在嵌入式linux中采用 libev。     libev 同样需要循环探测事件是否产生。Libev 的循环体用 ev_loop 结构来表达,并用 ev_loop( ) 来启动。 void ev_loop( ev_loop* loop, int flags )    ...
阅读全文
    libev目前最典型的应用场景可能就是 网络服务器的 编程框架中,常规的 网络服务器编程都是 从 bind()、listen()、accept()、read()等接口开始的,标准的 socket 编程套路,不管Windows还是linux都是一样的,这些标准的接口,可以方便的构建 服务器/ 客户机的模型的。假设我们希望建立一个简单的服务器程序,实现向单个客户端提供 “一问一答”的内容服务。 单线程、阻塞型网络编程 图 1. 简单的一问一答的服...
阅读全文
libev 是 一种 “事件驱动”的编程框架,所谓“事件驱动”,简单地说就是就是 有什么动作(点按钮、中断),程序就执行什么操作(中断服务函数、回调函数),当然事件不仅限于用于的操作,只要是定义好的,各种突发、预设的各种将要发生的事情,都是事件。这里,我对CPU相对熟悉一些,可以把“事件驱动”理解为 自定义软件中断。这里我们举几个案例来分析: 案例1: 状态机FSM     状态机是一种常用的编程框架,本质上...
阅读全文
一、宏定义中 “#”知识点   #的作用是将“#”后面的宏参数进行字符串转换操作,也就是将#后面的参数 两边加上一对双引号,使其成为字符串。 这里面有几个知识点: 1、直接转换字符串,不展开。 这句话的意思是,带参数宏定义也是宏,而不是普通函数,所以要保留宏的基本特性,也就是全部替换,而不展开。示例代码: #include <stdio.h> #include <stdlib.h> #define CONVERT(a) #a int main(int argc, char *argv...
阅读全文
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,而读到结尾...
阅读全文
2019-01-03 21:15 工业·编程 ⁄ 共 551字 暂无评论
关于函数fcntl的参数讲解的比较多,但是这个函数功能只有简单的一句话“fcntl函数可以改变已经打开文件的属性”。 我们知道,在Unix/linux环境下,不管是设备、I/O、socket等等,几乎一切都是文件,所以fcntl的功能就是对于这些设备、文件、I/O的属性进行设定,比如常用的功能: 1、复制一个已有的描述符,类似于dup函数功能。 2、获取/设置文件描述符标志。 3、获取/设置文件状态标志。 4、获取/设置一步I/O所有权。 5、获取/设...
阅读全文
1、静态库和动态库的区别 (1)所谓静态库(*.a),就是程序link的时候就把静态库中的东西取出来,放到生成的可执行文件中,当这个可执行文件执行时,就不需要再次调用这个静态库了。 (2)所谓动态库(*.so),就是程序link的时候,只是将库中的 符号包含,并没有包含静态库里的内容,等到可执行程序在执行 时,需要依赖动态库中的内容,也就是“随用随取”。 (3)在linux编程中,对于静态库和动态库,在makefile中引用方式一模...
阅读全文
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...
阅读全文