C
詆調
故不积蹞步,无以至千里不积小流,无以成江海。
展开
-
[STM32笔记]STM32移植FreeModbus
参考如下几个文章:STM32 移植FreeModbus 详细过程手把手教你移植FreeModbus到STM32STM32 HAL库移植freemodbus-v1.6详细步骤STM32 移植FreeModbus详细过程原创 2020-09-22 09:53:25 · 458 阅读 · 0 评论 -
Linux 非阻塞connect
套接字执行I/O操作有阻塞和非阻塞两种模式。在阻塞模式下,在I/O操作完成前,执行操作的函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里。相反,在非阻塞模式下,套接字函数会立即返回-1,而不管I/O是否完成,该函数所在的线程会继续运行。客户端调用connect()发起对服务端的socket连接,如果客户端的socket描述符为阻塞模式,则connect()会阻塞到连接建立成功或连接建立超时(原创 2016-01-04 22:11:10 · 1031 阅读 · 0 评论 -
C语言调用C++静态库
生成C++静态库 hello.h文件#ifndef HELLO_H#define HELLO_H#ifdef __cplusplusextern "C"{#endifvoid hello(void);#ifdef __cplusplus};#endifhello.cpp文件#include #include "hello.h"void hello(){ printf("h原创 2016-05-10 13:10:39 · 5501 阅读 · 0 评论 -
Linux程序编译时自动添加git或SVN版本
1. 添加git版本在Makefile中添加-DVERSION命令宏,并放入编译命令行中-DVERSION=\"$(shell git describe --tags)\"在代码中可以输出VERSION宏....printf("%s (%s,%s)\n",VERSION,__DATE__,__TIME__);....2. 添加SVN版本在Makefile中定义一个变量REV=`svn info原创 2016-12-08 14:58:56 · 771 阅读 · 0 评论 -
Ti CC2530 i2c 驱动
CC2530没有I2C控制器,所以只能使用IO口模拟I2C控制时序。 下载地址:http://download.csdn.net/detail/oxp7085915/9895098使用方法: 1、将hal_i2c.h、hal_i2c.c文件加入到工程中 2、调整SDA/SCL IO口 在hal_i2c.c文件中找到如下宏定义,对IO口进行修改/*SCL 端口定义*/#ifndef OCM_原创 2017-07-11 13:42:01 · 3145 阅读 · 4 评论 -
IAR编译u8g2库文件
使用该库文件是为了移植到cc2530 z-stack中。使用IAR创建一个空白的工程,将u8g2下面的csrc目录下的c文件添加到工程中。选择工程名字,单击右键选择options.在General options中Output标签栏中Output file选择Library在C/C++ Compiler中Preprocessor标签栏,在Additional include directiori原创 2017-07-11 13:22:46 · 1726 阅读 · 0 评论 -
u8g2 SSD1306(I2C) for Z-Stack
手中有块SSD1306 128x64的OLED显示屏幕,使用的是I2C模式驱动。现在想让其的能够在Z-Stack CC2530 驱动OLED显示。要让CC2530驱动OLED显示,需要实现:实现CC2530 I2C驱动移植U8G2显示库。1. 实现CC2530 I2C驱动CC2530芯片上面并没有I2C控制器,所以只能使用IO口模拟的方式模拟I2C的控制时序。并且Ti提供RemoTI协议栈中已原创 2017-07-11 13:10:24 · 6871 阅读 · 3 评论 -
CH340G U-BOOT阶段乱码
问题描述硬件:MT7628 系统:OpenWrt 15.05 串口:CH340G 在硬件重启后进入到U-BOOT阶段串口输出的全部都是乱码,但是进入到内核后串口输出有全部正常了。解决方式在github上看见其他开发者也遇到同样的问题, https://github.com/pepe2k/u-boot_mod/issues/21 CH340这款芯片的波特率有一点点小小偏差,解决...原创 2018-05-29 18:29:33 · 2857 阅读 · 0 评论 -
Z-Stack 修改协议栈的堆栈大小
在协议栈编译过程中,由于设置的堆栈空间过大,而且协议栈设置的功能又多的情况下,导致程序无法编译通过,所以需要通过调节协议栈的中堆栈的大小,缩小RAM空间让其存放其他功能。 但是这样操作,会影响到网络的容量,比如一些路由表等等的数据是在内存中管理的。如果堆栈变小,可分配的空间就变小了,设备节点的容量也就变小了。 所以可以根据需求来进行设计,要么裁剪和精简功能,要么缩小协议栈堆栈,要么使用别的内存...原创 2018-06-23 12:09:42 · 1234 阅读 · 0 评论 -
signalfd API 使用总结
最近在做一个openwrt的项目,需要实现一个功能:当系统恢复出厂设置前发送一个信号给我设计的程序,当前程序接收到信号后,恢复出厂设置外围的MCU处理器。程序才有poll方式设计的,刚开始使用的signal函数注册了SIGUSR1信号,并设置相应的处理函数。测试时发现当发送给程序信号时会导致poll程序退出,而且signal信号是异步发生的,需要解决数据的并发访问,可重入问题。破坏了程序的整体设计架原创 2016-01-03 22:49:43 · 765 阅读 · 0 评论 -
timerfd API使用总结
timerfd 介绍timerfd 是在Linux内核2.6.25版本中添加的接口,其是Linux为用户提供的一个定时器接口。这个接口基于文件描述符,所以可以被用于select/poll/epoll的场景。当使用timerfd API创建多个定时器任务并置于poll中进行事件监听,当没有可响应的事件,则程序阻塞在poll中,当有事件发生,通过poll的这个事件入口,对产生的事件进行响应,从而构成了一原创 2016-01-01 20:15:23 · 4958 阅读 · 2 评论 -
新型的按键扫描程序
新型的按键扫描程序不过我在网上游逛了很久,也看过不少源程序了,没有发现这种按键处理办法的踪迹,所以,我将他共享出来,和广大同僚们共勉。我非常坚信这种按键处理办法的便捷和高效,你可以移植到任何一种嵌入式处理器上面,因为C语言强大的可移植性。同时,这里面用到了一些分层的思想,在单片机当中也是相当有用的,也是本文的另外一个重点。对于老鸟,我建议直接看那两个表达式,然后自己想想就会懂的了,也不转载 2015-01-29 09:47:43 · 768 阅读 · 0 评论 -
【学习笔记】zedboard上freertos 按键中断
代码工作流程:在freertos系统中创建一个二值信号量,并且创建两个任务,任务A:循环输出helloworld,任务B:获取二值信号量,当获取到后设置LED灯亮或灯灭,如果没有获取到则挂起,直到获取到二值信号量。设置按键中断,并在按键中断程序中释放二值信号量。实验现象:按键按下则LED灯实现亮或灭/* Kernel includes. */#include "FreeRTOS.h"#原创 2013-12-17 15:26:36 · 5279 阅读 · 1 评论 -
一个很好按键检测程序
//新型的按键扫描程序/*不过我在网上游逛了很久,也看过不少源程序了,没有发现这种按键处理办法的踪迹,所以,我将他共享出来,和广大同僚们共勉。我非常坚信这种按键处理办法的便捷和高效,你可以移植到任何一种嵌入式处理器上面,因为C语言强大的可移植性。同时,这里面用到了一些分层的思想,在单片机当中也是相当有用的,也是本文的另外一个重点。对于老鸟,我建议直接看那两个表达式,然后自己想想就会转载 2014-04-02 17:25:59 · 5444 阅读 · 7 评论 -
失落的C语言结构体封装艺术
目录1. 谁该阅读这篇文章2. 我为什么写这篇文章3.对齐要求4.填充5.结构体对齐及填充6.结构体重排序7.难以处理的标量的情况8.可读性和缓存局部性9.其他封装的技术10.工具11.证明及例外12.版本履历1. 谁该阅读这篇文章本文是关于削减C语言程序内存占用空间转载 2014-03-25 09:52:43 · 688 阅读 · 0 评论 -
嵌入式C编程32条准则
01、版权和版本02、缩进、空格、换行、空行、对齐03、程序注释04、函数的[in][out]参数05、对系统调用的返回进行判断06、if 语句对出错的处理07、头文件中的#ifndef08、在堆上分配内存09、变量的初始化10、h和c文件的使用11、出错信息的处理12、常用函数和循环语句中的被计算量1转载 2014-06-18 11:19:02 · 1525 阅读 · 2 评论 -
学习嵌入式C语言相关书籍
学习嵌入式C语言相关书籍1、C语言初级教材(1)《C程式设计语言》(The C Programming Language ) 作者:Brian W.Kernighan, Dennis M.Ritchie 简介:本书是由C语言的设计者Brian W. Kernighan和Dennis M. Ritchie编写的一部介绍标准C语言及其程式设计方法的权威性经典著作。一本必读的程式设计语言转载 2014-06-18 11:42:07 · 2789 阅读 · 0 评论 -
嵌入式C编程面试题
预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算转载 2014-06-18 15:15:10 · 1005 阅读 · 0 评论 -
什么是编程语言
学习编程语言之前,首先要搞清楚“编程语言”这个概念。编程语言的目的是使用人类语言去控制计算机,告诉计算机我们要做的事情。人类语言易于理解,容易学习,开发效率高。目前流行的编程语言有C语言、C++、Java、C#、PHP、JavaScript等,每种语言都有自己擅长的方面,例如:C语言是较早开发的一种高级语言,后来的很多语言都是以C语言为蓝本进行设计的;C语言和C++主要用来转载 2014-09-09 09:53:24 · 860 阅读 · 0 评论 -
Linux串口程序收发16进制数据错误
问题描述: 通过串口网原创 2014-09-26 21:52:34 · 6049 阅读 · 2 评论 -
sqlite3 表里插入系统时间(时间戳)
转载地址:http://www.360doc.com/content/13/0128/21/1538189_262933682.shtml就像在提交日志的时候系统会把提交的时间记录下来一样,如果想在sqlite3下创建的表里插入数据的时候也把插入数据的时间点存储在sqlite数据库里怎么处理呢?创建一个数据库,如foo.db在这个表里创建一个表:CREATE转载 2013-05-14 10:37:10 · 1089 阅读 · 0 评论