- 博客(66)
- 收藏
- 关注
原创 do{...}while(0)
linux内核和其他一些开源的代码中,经常会遇到这样的代码:do{ ... }while(0)这样的代码一看就不是一个循环,do…while表面上在这里一点意义都没有,那么为什么要这么用呢?实际上,do{…}while(0)的作用远大于美化你的代码。查了些资料,总结起来这样写主要有以下几点好处:1、辅助定义复杂的宏,避免引用的时候出错:2、避免使用goto对程序流进行统一的控制:3、避免空宏引起的warning4、定义一个单独的函数块来实现复杂的操作:[参考资料][1]《do{…}
2022-02-13 19:48:43
198
1
原创 学习记录一个通过压力感应电阻做按键驱动
参考的按键驱动(https://github.com/MGDG/MyKeyDrive)。按键驱动主要做的事情是,定义按键行为和该按键事件,都放到链表中;外部需要做的是按键按下抬起的检测和判定(可以参考github项目:https://github.com/YangBingxi/Pressure-transducer-Based-on-STM32-HX711,“先根据标定重量和AD采样值先进行线性回归获得回归函数后,对AD采样值进行调整”);还要检测按键状态的时机,用定时器中断或者周期性任务。主要的学
2022-02-13 19:44:55
292
原创 宏 UNUSED_PARAM 的作用UNUSED_PARAM(v)
该宏的定义如下:#ifndef UNUSED_PARAM #define UNUSED_PARAM(v) (void)(v) #endif假如一个有返回值的函数如调用时是没有使用它的返回值,编译器会给出一个警告如果用void强制转换一下,则明确告诉编译器不使用返回值也就是为了消除警告也即是防止未使用的变量在编译时产生warning知乎上有个比较深入的解释,记录如下:摘抄C 语言语法分析时的执行性语句大致分为两类:求值 (evaluation)控制流 (control flow)
2022-02-13 18:48:43
1236
原创 C语言格式化输入输出的不同数据类型的%的定义
当和指针在一起时,就要考虑考虑,打印出来的是这个地址的地址值,还是这个地址所指向的那块内存区域的值,还是个字符串,或者说是是函数指针的指针???%d整型输出,%ld长整型输出,%o以八进制数形式输出整数,%x以十六进制数形式输出整数,%u以十进制数输出unsigned型数据(无符号数)。%c用来输出一个字符,%s用来输出一个字符串,%f用来输出实数,以小数形式输出,(备注:浮点数是不能定义如的精度的,所以“%6.2f”这种写法是“错误的”!!!)%e以指数形式输出实数,%g根据大小自动选f
2022-02-13 18:40:45
1804
原创 GNU C 的一大特色就是__attribute__ 机制
转载文章《C语言__attribute__的使用》(https://blog.youkuaiyun.com/qlexcel/article/details/92656797)遇到过的__attribute__类型:1,《gcc attribute weak & alias应用》(https://blog.youkuaiyun.com/hengshan/article/details/38725971)2,《C 编译器相关 attribute((packed))详解》(https://blog.youkuaiyun.com/sk
2022-02-13 18:06:27
473
原创 ARM中的字、半字、字节是多少位
总结:字节永远都是8bit,字的大小依赖于平台(可以通过sizeof()函数进行查看),但是可以确定的是,字是多少位,半字永远是字的一半,双字永远是字的2倍大小一、对于嵌入式底层开发人员字(Word):在ARM体系结构中,字的长度为32位,而在8位/16位处理器体系结构中,字的长度一般为16位。半字(Half-Word):在ARM体系结构中,半字的长度为16位,与8位/16位处理器体系结构中字的长度一致。字节(Byte):在ARM体系结构和8位/16位处理器体系结构中,字节的长度均为8位。ARM
2022-02-10 20:16:16
2756
原创 C语言 内联函数 关键字inline
内联函数: 在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗。为了解决这个问题,特别的引入了inline修饰符,表示为内联函数。
2022-02-08 21:01:50
734
原创 Linux命令
查找结果去重目标项替换文本分析参见《linux ps grep查找去重,运维linux命令》(https://blog.youkuaiyun.com/weixin_42356292/article/details/116991390)有之前没有接触过的(1)sort 对标准内容排序(2)uniq 相邻且相同的内容去重(3)parallel美: [ˈperəˌlel]英: [ˈpærəlel]adj. 平行(的);极相似的;同时发生的;相应的v. 与…相似;与…同时发生;与…媲美;比得上n
2022-01-19 13:57:36
609
原创 【Windows批处理】bat脚本
《Windows 批处理(bat)语法大全》(https://blog.youkuaiyun.com/qq_36838191/article/details/83046599)
2022-01-19 11:12:02
248
原创 实时操作系统 rhino
摘要: rhino posix项目在aos上实现,稍微了解下即可。最初在看的时候,比较疑惑rhino和POSIX都是啥,经过查找,最方便的还是先去看Alios的官方项目wiki,有如下信息,Kernel: 包括Rhino RTOS 内核,VFS,KV Storage,CLI,C++ 等Alios是一个实时 操作系统,而rhino是其内核代码,了解rhino内核可以看这篇进程管理相关的文章《alios-things 任务管理一》(https://blog.youkuaiyun.com/weixin_401
2022-01-19 11:01:22
869
原创 keil系列 魔法棒(目标选项)配置、编译工具ARMCC
1,keil 对话框的配置《KEIL工程目标选项配置》(https://blog.youkuaiyun.com/jdsnpgxj/article/details/78792989)2,ARMCC的编译稍深入2.1,《keil编译链接过程以及ARMCC、ARMASM、FROMELF、ARMLINK、ARMAR的使用》(https://www.cnblogs.com/zhangsx/p/zhangsx_keil_tools_usage.html)2.2 编译参数《基于makefile的STM32编译方法探索
2022-01-17 10:02:47
1530
原创 记录一次编译的过程
在Windows上实现通过armcc来编译arm m4代码生成特定C语言源文件的lib库参考资料的地址:对git库的文件进行的操作指定类型文件的删除和恢复,需要用到find指令和git命令$ find -name "*.c" | xargs rmfind,grep,args,sed正则 配合使用find ./ -type f -name "*.log" | xargs grep "test-test-test"find . -type f -exec grep -l "303i" {} \^
2022-01-15 21:32:12
324
原创 总线 AHPB
知乎上的一篇关于AHPB的文章《AHB与APB总线你需要知道的事儿》(https://zhuanlan.zhihu.com/p/157808097)
2022-01-12 20:57:50
353
原创 C 编译器相关 __attribute__((packed))详解
attribute((packed))详解参考链接:(http://blog.chinaunix.net/uid-25768133-id-3485479.html)1, attribute ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关,gcc编译器不是紧凑模式的,我在windows下,用vc的编译器也不是紧凑的,用tc的编译器就是紧凑的。例如:在TC下:struct my{ char
2022-01-12 20:47:05
1388
原创 C printf格式化输入输出 %lu
printf格式化输入输出参考链接:《C学习笔记(四)格式化输入输出》(https://www.cnblogs.com/hahazexia/archive/2013/04/10/3011592.html)使用 printf() 与 %c 格式化输出单个字符,#include <stdio.h> int main() { char c; // 声明 char 变量 c = 'A'; // 定义 char 变量 printf("c
2022-01-08 20:45:50
4572
原创 C 循环体
while(condition){ statement(s);}do{ statement(s);}while( condition );for ( init; condition; increment ){ statement(s);}
2022-01-08 20:45:24
345
原创 ASCII码
ASCII码一览表(http://c.biancheng.net/c/ascii/)ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是一套基于拉丁字母的字符编码,共收录了 128 个字符,用一个字节就可以存储,它等同于国际标准 ISO/IEC 646。ASCII 规范于 1967 年第一次发布,最后一次更新是在 1986 年,它包含了 33 个控制字符(具有某些特殊功能但是无法显示的字符)和 95 个可显示字符。
2022-01-08 19:07:50
147
原创 C 指针 数组 字符(串)
首先看下C中的字符串是怎么定义的在 C 语言中,字符串实际上是使用 null 字符 \0 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。下面的声明和初始化创建了一个 RUNOOB 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 RUNOOB 的字符数多一个。char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};依据数组初始化规则,您可以把上面的语句写成以下语句:char site[] = "
2022-01-08 17:39:34
1966
原创 嵌入式C语言开发
这是我的第一篇对ARM有有疑问并展开调查的文档总结,以备之后查阅。首先的疑惑是发现之前的源码中都是在对寄存器做操作,所以对寄存器的地址是怎么被确定的就很疑惑。搜索引擎关键词:嵌入式 寄存器 基地址 使用参考《嵌入式15——HAL 库中寄存器地址名称映射分析》(https://zhuanlan.zhihu.com/p/91331682),可以看到这个地址是跟字长、总线相关的。然后参考《嵌入式C语言开发—存储器与寄存器》(https://blog.youkuaiyun.com/weixin_30439067/ar
2022-01-06 10:50:13
2034
原创 嵌入式的寄存器操作
文章参考《嵌入式寄存器操作-----C语言位操作的学习》(https://blog.youkuaiyun.com/zeroubuntu/article/details/19617871)。通过一个按键的实例来看嵌入式中的位操作。转载如下:a |= 1<<x //第x位写1a &=~(1<<x) //第x位写0(a &(1<<x)) == (1<<x) //判断1,等号左边括号不能省略(a& (1
2022-01-05 15:34:19
1514
原创 EMMC介绍
《eMMC(一)——基本架构》https://blog.youkuaiyun.com/wangguchao/article/details/102859553
2022-01-05 14:48:56
374
原创 在线数值计算 wolframalpha
网址https://www.wolframalpha.com/有关这个Alpha的介绍可参考少数派网站上的一篇文章(https://sspai.com/post/26663#!)这里的关键词是“wolfram”,它和数学计算软件(Matlab、Mathematica)等的区别可以参考这篇优快云文章:《数学计算软件(Matlab、Mathematica)网页版》(https://blog.youkuaiyun.com/dreamer2020/article/details/25168807)还是发现了几个
2022-01-05 14:42:24
1665
原创 关键字C/C++中extern关键字详解
https://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html
2021-12-13 13:55:01
526
原创 C语言-取地址符 引用 解引用 数组 指针 牵扯到的运算 左移 右移 二级制域算法
C++ 中的&:“&引用” 和“&取地址符”的区别和作用参考[https://blog.youkuaiyun.com/qq_33266987/article/details/52047473]计算机基础 - 左移、右移和计算逻辑[https://blog.youkuaiyun.com/u012627861/article/details/89378580]从BCH code[https://zhuanlan.zhihu.com/p/95909150]看到了二进制域的运算参考[https://www
2021-12-11 16:12:48
303
原创 嵌入式中的 *(volatile unsigned int *)理解
volatile 无定型的理解参考[https://blog.youkuaiyun.com/czg13548930186/article/details/52454032]以及关键字 const static
2021-12-11 16:06:54
471
原创 C 库函数 - snprintf()
C 标准库 - <stdio.h>声明下面是 snprintf() 函数的声明。int snprintf ( char * str, size_t size, const char * format, … );参数str – 目标字符串。size – 拷贝字节数(Bytes)。format – 格式化成字符串。… – 可变参数。返回值(1) 如果格式化后的字符串长度小于等于 size,则会把字符串全部复制到 str 中,并给其后添加一个字符串结束符 \0;(2) 如果格式化
2021-12-11 16:02:03
647
原创 Keil L6220E:execution region shram00_exec size exceeds limit
该错误是超过设置好的存储大小了,导致编译完后放进去存储设备中。有几种调整方法使得代码编译通过,如下,使用keil魔法棒直接改默认的存储值,参考链接[https://blog.youkuaiyun.com/qq_22146161/article/details/106715433],属于脚痛医脚的做法,还有一种修改内存配置文件(.sct),看起来更靠谱些,参考链接[奉加微PHY6212内存不足的决绝办法(http://www.zyiz.net/tech/detail-256759.html)],先看芯片的内存分布,
2021-12-11 15:24:01
729
原创 memset函数
http://c.biancheng.net/view/231.html#:~:text=memset%20%28%29,%E7%9A%84%E4%BD%9C%E7%94%A8%E6%98%AF%E5%9C%A8%E4%B8%80%E6%AE%B5%E5%86%85%E5%AD%98%E5%9D%97%E4%B8%AD%E5%A1%AB%E5%85%85%E6%9F%90%E4%B8%AA%E7%BB%99%E5%AE%9A%E7%9A%84%E5%80%BC%E3%80%82%20%E5%9B%A0%E4
2021-12-11 15:05:51
12795
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人