C语言
文章平均质量分 79
wenzi嵌入式软件
这个作者很懒,什么都没留下…
展开
-
C 语言编程习惯总结
笔者能力有限,如果文中出现错误的地方,还请各位朋友能够给我指出来,我将不胜感激,谢谢~引言编程习惯的培养需要的是一个长期的过程,需要不断地总结,积累,并且我们需要从意识上认识其重要性,一个良好的编程习惯对于我们能力的提高也是由巨大的帮助的。下面是笔者在阅读《专业嵌入式软件开发》这本书时所看到的一些关于编程好习惯的总结,特此记录和分享一下、判断失败而非成功下面是一段简化过后的代码片段:if (physap_alarm_init() == RV_SUCC){ if (trx_alarm_.原创 2020-10-29 20:05:35 · 312 阅读 · 0 评论 -
裸机内存管理解析
概述在计算机系统中,变量、中间数据一般存放在系统存储空间中,只有实际使用的时候才将他们从存储空间调入到中央处理器内部进行计算。通常存储空间分为两类:内部存储空间和外部存储空间。对于电脑来讲,内部存储空间就是电脑的内存,外部存储空间就是电脑的硬盘。而对于单片机来讲,内部存储就是 RAM ,随机存储器。外部存储可以理解为 flash ,掉电不丢失。该篇文章的主题,内存管理,主要讨论的是关于 RAM 的管理。堆、栈和静态区针对于 Cortex M3 内核的单片机的详细内存分配可以参照笔者的这篇文章 STM3原创 2020-07-12 17:29:47 · 1076 阅读 · 1 评论 -
为什么要使用二级指针?
概念提到指针,我们都知道指针是用来存储一个变量的地址。所以,当我们定义了一个指向指针的指针的时候(pointer to pointer),我们也称之为二级指针,那针对于这个二级指针来说,第一级指针存放的是指向的变量的地址,第二级指针存放的是第一级指针的地址。可以用下面这张图表示他们之间的关系。上图所表达的意思也就是,一级指针变量 ptr1 存放的是 var 变量的地址,二级指针变量 ptr2 存放的是一级指针变量的地址。这也就是关于二级指针的相关概念。一级指针与二级指针关系示例#include &原创 2020-06-15 16:05:06 · 7817 阅读 · 13 评论 -
如何以面向对象的思想设计有限状态机
状态机的概念有限状态机又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型,用英文缩写也被简称为 FSM。FSM 会响应“事件”而改变状态,当事件发生时,就会调用一个函数,而且 FSM 会执行动作产生输出,所执行的动作会因为当前系统的状态和输入的事件不同而不同。问题背景为了更好地描述状态机的应用,这里用一个地铁站的闸机为背景,简单叙述一下闸机的...原创 2020-05-03 00:21:41 · 454 阅读 · 0 评论 -
C语言指定初始化器解析及其应用
指定初始化器的概念C90 标准要求初始化程序中的元素以固定的顺序出现,与要初始化的数组或程序中的元素顺序相同。但是在新标准 C99 中,增加了一个新的特性:指定初始化器。利用该特性可以初始化指定的数组或者结构体元素。数组的初始化器一维数组的初始化器利用指定初始化器的特性,我们可以这样定义并初始化一个数组:int a[6] = {[4] = 10,[2] = 25};上述的初始化就等同...原创 2020-04-27 21:19:19 · 355 阅读 · 0 评论 -
C语言回调函数的概念及其应用
概念引用维基百科上的关于回调函数的概念:在计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。打一个简单的例子就是说,如果我们在一个 RTOS 的基础上去编写应用程序,编写应用程序的这一层就是应用层,也可以说是高层...原创 2020-04-23 23:15:03 · 581 阅读 · 0 评论 -
C语言位域解析及在嵌入式编程中的应用
位域的概念位域(或者也能称之为位段,英文表达是 Bit field)是一种数据结构,可以把数据以位元的形式紧凑的存储,并允许程序员对此结构的位元进行操作。这种数据结构的好处是:可以使数据单元节省存储空间,当程序需要成千上万个数据单元时,这种数据结构的优点也就很明显地突出出来了。位段可以很方便地访问一个整数值的部分内容从而简化程序源代码。位域的定义总体来说位域的定义可以分为两大类,一个...原创 2020-04-21 21:48:51 · 852 阅读 · 0 评论 -
结构体内存对齐解析
为什么要内存对齐虽然所有的变量最后都会保存到特定的地址内存中去,但是相应的内存空间必须满足内存对齐的要求,主要基于存在以下两个原因:硬件平台原因:并不是所有的平台都能够访问任意地址上的任意数据,某些硬件平台只能够访问对齐的地址,否则就会出现硬件异常错误。性能原因:如果数据存放在未对齐的内存空间中,则处理器在访问变量时要做两次次内存访问,而对齐的内存访问只需要一次。上述两个原因,第一个原...原创 2020-04-18 14:08:53 · 695 阅读 · 0 评论 -
union 的概念及在嵌入式编程中的应用
union 概念union 在中文的叫法中又被称为共用体,联合或者联合体,它定义的方式与 struct 是相同的,但是意义却与 struct 完全不同,下面是 union 的定义格式:union 共用体名{ 成员列表}共用体变量名;那么它与结构体的定义方式相同,那么区别是什么呢,下面通过一个 struct 与 union 的嵌套来说明两者的区别所在。struct my_struct...原创 2020-04-15 23:21:49 · 848 阅读 · 1 评论 -
static const volatile __weak关键字解析
static对于 static 关键字来讲,它既可以用来修饰变量同时也可以用来修饰函数,而变量从大的方向上来讲又分为局部变量和全局变量,static 对于这两种变量的修饰也具有不同的意义。修饰变量静态全局变量:使用 static 修饰全局变量之后,其作用域仅仅限于被定义的文件中,其他文件即使使用 extern 声明也没有办法使用它。更加准确地说法应该是作用域从定义之处开始,到文件结尾处结束,...原创 2020-04-06 20:47:38 · 434 阅读 · 0 评论 -
C 语言跳转表的实现及在嵌入式设备中的应用
跳转表的概念沿用笔者在 Wikipedia 上看到的关于跳转表的概念,In computer programming, a branch table or jump table is a method of transferring program control (branching) to another part of a program (or a different program...原创 2020-04-02 21:17:14 · 641 阅读 · 5 评论 -
C语言如何实现继承及容器
继承的概念继承是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义,追加属性和方法。面向对象中的重要概念就是类,在我们熟知的编程语言 C++ 、Python 中都存在类的概念,通过现有的类从而继承得到新的类。但是对于 C 语言来讲,其中并不存在类的概念,那又如何实现继承呢 ?C 语言继承的实现笔者了解到 C 语言实现继承...原创 2020-03-31 21:49:16 · 1477 阅读 · 1 评论 -
泛型指针 void * 的妙用
指针的概念在理解泛型指针(也称之为万能指针)之前,我们需要了解指针的概念,最常见的说法就是指针就是地址。下面有这样一个定义:int *p;上面的定义我们可以知道, p 称之为指针变量,而并不是指针,而 *p 我们才称之为指针。所以也就有了如下的操作:int *p;int a = 10;p = &a;printf("The value of p is:%p\n",p);p...原创 2020-03-30 18:58:14 · 422 阅读 · 0 评论 -
关于extern你容易忽视的用法
extern 的含义首先看到 extern 的出现,我们应该明白其含义是全局的意思。其次当看到 extern 修饰一个变量时,我们应该能够区分这是对于一个变量的声明,相应的,有了对于变量的声明,那么就应该具备变量的定义。关于变量的声明和变量的定义的区别,笔者曾经看到一句话是这样进行描述的,变量的存在需要一个存储空间,那这个存储空间就好比是房子,那变量的声明就好比是你拿到了对于房子的房产证,但是还...原创 2020-03-29 16:48:21 · 500 阅读 · 0 评论 -
关于头文件中的 static inline函数
头文件中常见static inline函数,于是思考有可能遇到的问题,如头文件经常会被包含会不会产生很多副本?网上说法不一。于是自己验证。经过arm-none-eabi-gcc下测试后得出结论。 inline 关键字实际上仅是建议内联并不强制内联,gcc中O0优化时是不内联的,即使是O2以上,如果该函数被作为函数指针赋值,那么他也不会内联,也必须产生函数实体,以获得该...转载 2020-03-19 10:39:07 · 690 阅读 · 0 评论 -
C语言关键字
我在网上看见一个帖子说回答不出这个问题的人是不会被雇佣的。这是区分C程序员和嵌入式系统程序员的最基本的问题。搞嵌入式的家伙们经常同硬件、中断、RTOS等打交道,所有这些都要求用到volatile变量。...转载 2019-12-27 16:46:37 · 254 阅读 · 0 评论