Git基础篇(二十五)——rebase指令
Git基础篇(二十五)——rebase指令前言: rebase指令是git中功能较为复杂的一个指令,用好了可以简化提交记录。 1 rebase rebase 可对一段连续的提交记录进行修改、删除、复制粘贴、合并操作,规范的使用该指令能使得提交记录更加干净整洁。 1.1 指定格式 指令格式如下。 1git rebase -i [StartPoint] [EndPoint] -i : 是指令 --interactive 的缩写,即弹出交互式界面让用户选择具体的执行动作; [StartPoint] : 指定一段提交记录的起点,但不包含该提交记录; [EndPoint] : 指定一段提交记录的终点,包含该提交记录。提交时间上不能比StartPoint指定的提交记录早; 1.2 选择提交记录 假设有以下提交记录,提交记录的选择有多种方式,可以通过git提交时为每个提交记录生成的唯一 commit id 指定,或者用 HEAD 的形式等。在git中区间的指定都是左开右闭,...
第一章——计算机系统基础
第一章——计算机系统基础前言: 计算机第一章节主要知识点。 1 知识点介绍 数值转换; 数的表示; 计算机的组成; 流水线; 多级存储结构; I/O控制方式; 可靠性、校验码; 2 数值转换 进位计数制系统基本概念:数制、基数、数码、数位、位权。 特点/数制 十进制 二进制 八进制 十六进制 基本数码 0-9 0, 1 0-7 0-9, A-F 基数 10 2 8 16 位权 $10^n$ $2^n$ $8^n$ $16^n$ 2.1 BCD码 是一种二进制的数字编码形式,用4位二进制数来表示1位十进制数。 2.2 8421码 8421码是BCD码的一种,它表达的意思是每一个二进制位上的数据对应一个固定的值,只需要把对应的1位置的数据值相加,即可得到该二进制对应的十进制值。 $$0b1010100 = 64 + 16 + 4 = 84$$ $$100 = 0b1100100$$ 2.3...
c进阶篇(十二)——深入理解宏定义
c进阶篇(十二)——深入理解宏定义前言: c的语法中,最灵活的是宏使用,本篇文章将详细探讨宏的几种用法。 1 概念 在c/c++中,宏定义将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来替代。因此理解宏定义用法的核心是“替换”。宏定义是在预处理阶段处理的,也即在编译前就完成了宏的替换。宏的使用可以使得编程者编辑的代码得到简化,也可提高代码的运行效率。 2 规则 宏定义的语法规则如下。 1#define <宏名><(参数列表)> <宏体> 宏可以带参数列表也可以不带,参数列表同样也是进行替换。处理定义处在代码中所有宏名字符串都会替换为宏体。 3 不带参宏定义 此种宏用法发简单,但却大有用处。不带参宏是没有参数列表的宏定义。 3.1 空宏用作条件编译 条件编译离不开宏,而空宏更是常用于条件编译的条件。空宏指的是没有宏体的宏定义。空宏结合带 #...
Git基础篇(二十四)——clean指令
Git基础篇(二十四)——clean指令前言: 要对git仓库进行清理,需要使用clean指令,本篇文章详细介绍其用法。 1 简介 对Git仓库进行清洁管理,其指令形式如下。 1git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path> 谨慎使用 git clean 指令清理,因为删除后很可能是不能回复的。 2 常用指令介绍 -f 或 --force : 删除未track未被.gitignore记录的文件; -n : 删除演示,会将要删除的内容列出来,但不会真的删除; -d : 删除未track未被.gitignore记录的文件夹,需要和 -f 搭配使用; -x : 删除未track的文件,也包括被.gitignore记录的文件和文件夹,需要和 -f 搭配使用; 以下是用法示例。 2.1 删除未track未被.gitignore记录的文件1git clean...
TortoiseGit使用教程
TortoiseGit使用教程前言: TortoiseGit工具可以帮助我们可视化的操作Git,不必记忆繁琐的指令。 1 TortoiseGit简介 TortoiseGit(中文发音:涛特斯),中文名为海龟Git,它是免费的Git版本控制系统的客户端,将Git的操作从纯指令简化为UI的鼠标操作。 2 下载安装 在 TortoiseGit官网 下载最新版本并安装。登录官网界面,点击 Download 可看到如下界面。 安装TortoiseGit和中文语言包非常简单,全部按照默认设置点击下一步即可,安装完成后TortoiseGit即可开始使用,但语言包需要重启电脑后才会生效。TortoiseGit安装完成后对于Git管理的文件或目录会修改图标并提示,如果没有图标提示可参考我的另外一篇文章 《解决TortoiseSVN和TortoiseGit图标不显示问题》 解决。 以下教程我用英文版演示。 3...
HHKB键盘使用
HHKB键盘使用前言: HHKB键盘使用快三年了,一把放公司一把放家里,并且我可以是说是重度使用者,几乎每天都会较长时间的使用,以至于除了HHKB以外的键盘使用不利索了 1 什么是HHKB键盘 百度百科上有专门的解释。HHKB(Happy Hacking...
Git基础篇(二十三)——amend指令
Git基础篇(二十三)——amend指令前言: amend指令是常用指令,用于对最近一次提交记录进行修改,但指令的使用应该小心,本篇文章详细介绍amend的用法。 1 amend指令介绍 该指令用于对最近一次 commit 记录进行再次修改提交,不会生成新的提交记录,但会更新git的Commit ID。原提交记录可通过 git reflog 查看。 什么情况下应该应该对最近一次提交记录进行修改?比如忘记添加或多添加了一些文件,对文件内容需要重新修改,或者是对提交的log进行修改,此时应该重新提交。 2 amend修改分支最新提交2.1 修改文件、目录或log 若需要重新修改文件,则先在本地工作区直接修改,然后执行 git add --all 将修改添加到暂存区,若不需要修改文件则无需执行此步骤。 执行指令 git commit --amend 进行重新提交,输入指令后会跳转到log输入界面并显示最新log描述,若需修改log描述则直接进行修改,最后输入 :wq...
c进阶篇(十一)——变量初始化详解
c进阶篇(十一)——变量初始化详解前言: 定义变量时对数据类型进行初始化是十分有必要的,但变量的初始化也许还有你不知道的细节,本篇文章带你深入探讨。 1 静态、局部和全局变量初始化 我们把变量按照作用域和生存期进行分类,可以分为静态变量、局部变量、全局变量三类。定义变量时从语法上将可以对变量初始值进行初始化,也可以选择不初始化,以下进行未初始化时初值探究。 1.1 未初始化时的初值 未初始化时,由于全局变量和静态变量由编译器自动初始化为0(仍然建议代码上写明初始值赋值0),而局部变量存储在栈空间里,未初始化时初值是不确定的。这里以byte类型(uint8_t)举例,其他数据类型也一样(指整形、浮点型、字符型、指针型、数组、结构体、联合体、枚举)。 12345678910111213141516byte g_byTmp; //全局变量。byte Fun(void){ static byte s_byTmp; //静态变量。 byte byTmp; //局部变量。 ...
c进阶篇(十)——weak用法详解
c进阶篇(十)——weak用法详解前言: weak用于修饰弱函数或变量,以实现类似c++语言中函数重载的功能,本篇文章详细探讨weak的运用。 1 什么是weak函数 weak 不是c语言的关键字,而是一些编译器的扩展属性,MDK-ARM中在函数定义和声明前加 __attribute__((weak)) 表示将该函数定义为弱函数,而在变量定义或声明前加 __attribute__((weak))...
c进阶篇(九)——inline函数用法详解
c进阶篇(九)——inline函数用法详解前言: 内敛函数可有效降低调用函数的资源开销,堆栈开销和时间开销都能得到降低,但会增加Flash的消耗。本篇文章详细讲解内敛函数在c语言中的运用。 1 什么是内敛函数 在c/c++中,为了消除一些小函数(处理任务少,运算时间较短的函数),特别是一些调用频次很高的函数调用时带来的大量堆栈空间和进退栈时间的消耗,特别的引入 inline 修饰符在函数定义时放置在返回值关键字之前,请求编译器将其作为内敛函数处理,它对编译器只是提出一种建议,编译器将最终决定是否将其作为内敛函数或普通函数。被作为内敛的函数,编译器在调用处直接将其展开,嵌入到调用处,这样就省去了参数传递、对栈的操作和释放,从而节省了栈和时间开销。由于在每个调用处都会展开和嵌入内敛函数的代码,因此掉调用的地方越多Flash开销越大,对于多处调用的函数作为内敛将会快速消耗Flash空间,这一点与宏函数有些类似。 inline 是c99标准时加入的关键字。 2 内敛函数和宏函数的区别2.1...











