C语言复合文字的使用
前言在一些高级语言中,有一种定义函数的方法,如Python中,可以定义def func(arg1, arg2=2),这样可以定义函数形参的默认值,对于一些参数多,但是大多数参数基本不会变动的函数来说极其有用,那么,C语言是否也可以实现这样的功能呢
在C99的标准中,增加了一个新的特性,复合文字(composite literal),很奇怪,这个特性是如此的好用,可是在我的身边几乎没有人知道这个东西
复合文字应用数组操作假设一个场景,有一个函数void func(char *p, short size),你希望传递一个有数据的数组进去,那么可以这样
12char array[4] = {1, 2, 3, 4};func(array, 4);
你需要先创建数据,然后给数组里面的数据复制,最后将数据传递给函数,但是在应用了复合文字之后,你可以这样做
1func((char []){1, 2, 3, 4}, 4);
如何,数组像是一个基本数据类型的常量一样,被直接传递给了函数,当然,你也可以用这个机制,直接将一个数组作为函数的返回值返回
结构体操 ...
使用VS Code打造完美的嵌入式IDE
前言在我刚开始接触STM32的时候,使用的keil作为IDE,由于在这之前,我使用过VS, 使用过eclipse, 因而在我使用keil之后,实在难以忍受keil编辑器简陋的功能,可以说是极其糟糕的写代码体验
之后,我尝试过各种IDE,使用eclipse + keil,结果发现eclipse对C语言的支持也是鸡肋,使用emBits + gcc,需要和其他人协同的话就比较麻烦,之后发现了platformIO,也是使用gcc作为编译器,不过只支持HAL库
最后,通过使用VS Code + keil的方式,完美解决了写代码的体验问题,以及工程协作问题
其实网上使用VS Code作为编辑器,keil作为编译器的教程很多,不过基本都是需要在VS Code中编辑,然后在keil中编译,下载,调试,本文就要实现编辑,编译,下载,调试,全部使用VS Code
环境
VS Code
keil
python
C/C++(VS Code 插件)
Cortex-Debug(VS Code 插件)
其他VS Code插件(提升体验)
前提正式写代码之前,首先需要建立好一个工程,这个需要使用kei ...
在嵌入式系统中实现简单的shell
对于嵌入式系统而言,特别对于没有使用操作系统,裸机运行程序的嵌入式系统,如何高效便捷的进行系统调试往往是一个比较令人头疼的问题。不久前,我接触到一个国产嵌入式操作系统,Thread RTOS,其中,该系统集成的finsh shell工具让我有种眼前一亮的感觉,它将shell工具引入到嵌入式系统中,极大的方便了系统的调试。
然而,finsh shell运行在操作系统之上,体积也比较大,对于某些小型嵌入式设备,基本是与其无缘了,既然如此,我们为何不自己编写一个shell呢。
我们首先对shell的运行原理进行分析,通过在命令行输入命令,shell对命令进行解析,然后执行相应的操作,更通俗的,就是使用输入的字符串,匹配到对应的函数,然后执行。那么,我们需要建立一个命令-函数的一一对应的关系,定义结构体。
123456typedef struct{ uint8_t *name; //shell命令名称 shellFunction function; ...
一种不依赖计时器的键盘长按,双击实现
前面一段时间在考虑矩阵键盘的驱动方式,其中,在按键长按这个点上,网上的好多思路都是建立在计时器计时和中断的基础上的,那么,能不能再不用中断和计时器的情况下,实现按键的长按和双击的判断呢。
在判断按键被按下之后,如果我们对按键释放的时间进行计时,就可以实现按键长按的判断了。建立在这个基础上,如果我们在按键释放之后,延时一段时间再一次判断同一个按键是不是被释放,是不是就可以实现双击的判断了。
有了思路之后,代码实现就比较容易了。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103uint8_t KEY_Scan(void){ static uint8_t lastKeyValue; ...
解决Visio“操作系统当前的配置无法运行此程序”问题
由于要写论文的原因,需要用到流程图,于是想装一个Visio用用。从下载Visio镜像到安装完成,一切都很顺利,但是安装完成之后打开,竟然提示“操作系统的当前配置无法运行此程序”,表示一脸懵逼…
在网上搜索找到很多说法,包括改注册表什么的,都没有成功。后面发现,office2016和Visio的镜像其实是一样的,只不过里面的setup.exe不同,于是替换Visio镜像的setup到解压后的office镜像中,在这里安装,然后就安装成功了。
个人猜测应该是两个镜像之间的微小差别导致的不兼容,有同样问题的可以试试这个方案。