单片机上实现基于RAM+FLASH的消息队列
背景简介:由于单片机上的RAM资源有限,而我们的物联终端时时刻刻都在采集数据,如果RAM中的数据未来得及发动到服务端(比如进入了信号盲区),我们就希望使用FLASH进行缓存,而FLASH缓存之后如何保证数据的有序性,以及不丢失,就需要在单片机中实现一个理论上无限长的消息队列
其中todo部[……]
背景简介:由于单片机上的RAM资源有限,而我们的物联终端时时刻刻都在采集数据,如果RAM中的数据未来得及发动到服务端(比如进入了信号盲区),我们就希望使用FLASH进行缓存,而FLASH缓存之后如何保证数据的有序性,以及不丢失,就需要在单片机中实现一个理论上无限长的消息队列
其中todo部[……]
背景介绍:在硬件产线检测中,需要自动化的读取硬件状态,并逐一判断硬件状态是否健康,如:
最近对于这个需求设计了一个DSL,如:
每次工厂产品下线检测只需要设置好对应的DSL脚本,便有产线上位机自动加载并解释执行,以及与硬件串口进行交互检测
[……]
A few weeks ago Linus Torvalds answered some questions on slashdot. All his responses[……]
double sqrt_x(double x) { double x0, xn, xn1, diff; double pricision = 1e-10; x0 = x; *((char *)&x0 + 7) &= 0x7f; // x0[......]
最近自己实现了math.h中的一些函数, 目的还是为了熟悉一些原理性的知识, 虽然很多函数都有直接对应的硬件指令了…
#define LLMAX 0x7FFFFFFFFFFFFFFFLL #define LLMIN 0X8000000000000000LL typedef union[......]
一. 轮询
试想这样一种情形, 一个主线程中创建两个(多个)工作线程, 主线程需要等待一个或者多个工作线程执行结束.
比较直接的做法就是主线程中用一个循环, 每次都锁住和工作线程相同的一个互斥锁并检查是否有工作线程已经结束.
#include <stdio.h> #inc[......]
前几天和一朋友聊到手机解锁, 朋友问我有没有想过手机pattern lock有多少种组合方式. 其实这个问题早就想过了, 以前感觉会有很多种特殊情况, 用程序解还不如用排列组合来得快
后来讨论了下, 就决定把问题简化: 只考虑4个点或4个点以上的情形, 并且包含下图这种路径的不算有效的组合方式
[……]
#include <stdlib.h> #include <string.h> #define between(x, min, max) ((x) >= (min) && (x) <= (max)) static inline unsigned[......]
#include <stdlib.h> #include <string.h> unsigned int base64_encode( unsigned char **dest, const unsigned char *src, unsigned int le[......]
转自http://just-study.blogbus.com/logs/37238127.html 代码有部分改动
本文档已经经过反复修改,最终包含大量的方法帮助优化c语言代码。编译器是很好的,但是它们并不能按照你的意愿做所有事情,因此,我希望帮助大家从自己的代码中获取最好的性能比。本教[……]
曾经一直好奇c编译器如何做的类型转换, 最近研究了几天, 有了个大概的了解, 这里做个总结:
整型间的转换比较简单, 如果字长变化, 只需进行扩展或者截断
这方面gcc和msvc编译器做法大同小异, 就不分开讨论了, 就以gcc为例
比如int8到int32的扩展,[……]
前段时间看了下glibc的一些string库函数实现
自己照猫画虎的写了几个函数测了测, 比起windows vc中自带的实现, 并没有更快, 反倒是慢了很多.
比如memset函数, 微软公开的vc crt中memset.c是以字节为单位循环的. 如果用glibc中操作块与循环展开[……]
近来打算阅读glibc源码, 便从最简单的string.h开始. 说道string库, 第一个想到的是什么函数? 当然是strlen
于是翻开strlen.c , 大牛写的代码就是不一样, 总像是故意把原本简单的东西写得复杂, 仔细阅读才发现简直是神作.
对任何c程序员来说以下代码可以说是信手拈[……]
这个问题一开始源于用vc编译一个utf8文件, 遇到了错误error C2001: 常量中有换行符
原本是个mingw下写的程序, gcc编译时没问题的, 后来网上搜了下, 说是因为vc对无bom的utf8文件支持不太好, 得加上bom才能正常编译
在vc上面测试以下代码
#include <[......]