- 博客(32)
- 资源 (24)
- 收藏
- 关注
原创 非标准C库怎么链接?
前言链接是代码生成可执行文件中一个非常重要的过程。我们在使用一些库函数时,有时候需要链接库,有时候又不需要,这是为什么呢?了解一些链接的基本过程,能够帮助我们在编译时解决一些疑难问题。比如,下面就有一种奇怪的现象。一个奇怪的链接问题程序功能很简单,计算e的n次方。程序清单如下(代码一):#include<stdio.h>#include<m...
2019-02-28 21:11:58 257
原创 GDB的断点调试
前言之前在GDB的极致运用一文中,我们讲到了GDB启动调试的多种方式,分别应用于多种场景。今天我们来介绍一下断点设置的多种方式。1.为何要设置断点在介绍之前,我们首先需要了解,为什么需要设置断点。我们在指定位置设置断点之后,程序运行到该位置将会“暂停”,这个时候我们就可以对程序进行更多的操作,比如查看变量内容,堆栈情况等等,以帮助我们调试程序。2.查看已设置的...
2019-02-28 20:34:37 2908
原创 Linux内核使用的GNUC扩展
投资自己,什么时候都不晚。 和Unix一样,Linux内核也是用C语言实现的。谈到C,几乎所有的人都会立即想到ANSIC标准。但是Linux内核的实现,其实并不完全符合ANSI C标准。实际上,内核开发者总会使用许多gcc提供的C语言的扩展部分。内核开发者使用的C语言涵盖了ISO C99标准和GNU C的扩展特性,我想,其中让人感兴趣的,应该...
2019-02-27 12:27:47 220
原创 linux常用命令--开发调试篇
前言Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题。本文将简单介绍一下这些命令。示例程序我们用一个小程序,来帮助后面我们对这些命令的描述,程序清单cmdTest.c如下:#include<stdio.h>int test(int a,int b){ r...
2019-02-27 11:04:44 168
原创 GDB的极致运用
0. 前言GDB(GNU Debugger)是UNIX及UNIX-like下的强大调试工具,可以调试ada, c, c++, asm, minimal, d, fortran, objective-c, go, java,pascal等语言。本文以C程序为例,介绍GDB启动调试的多种方式。1.哪类程序可被调试对于C程序来说,需要在编译时加上-g参数,保留调试信息...
2019-02-27 09:12:48 115
原创 GNU C语法扩展(10)
要研究LINUX内核,C语言是基础中的基础,但是LINUX并不是完全的标准C,而是对标准C做了很多扩展,这些扩展特性对于我们分析内核有着很重要的作用,下面做些总结性的工作。10、内建函数GNU C提供了大量的内建函数,其中很多是标准C库函数的内建版本,例如memcpy,它们与对应的C库函数功能相同,本文不讨论这类函数,其他内建函数的名字通常以__builtin...
2019-02-26 10:08:41 228
原创 懂了GNUC属性,C大牛非你莫属
图片发自简书App之前,小编黑鸟连续日更了十篇GNU C中特有的不同于ANSI C标准的语法扩展,这些扩展往往是普通教材中不会提及的。而恰恰是这些%1的语法影响着我们%99的人能否在众多C程序员中脱颖而出,成为同事眼中的大牛和boss眼中的红人。大家有没有这种经历,在自认为自己C语言水平已经达到某种境界的时候,兴致冲冲的拿起一本linux内核解析之类的书,准备...
2019-02-25 22:38:32 1250
原创 GNU C语法扩展(9)
要研究LINUX内核,C语言是基础中的基础,但是LINUX并不是完全的标准C,而是对标准C做了很多扩展,这些扩展特性对于我们分析内核有着很重要的作用,下面做些总结性的工作。9、特殊属性声明GNU C允许声明函数、变量和类型的特殊属性,以便进行手工的代码优化和定制代码检查的方法。no return属性用于函数,表示该函数从不返回。这可以让编译器生成稍微优化...
2019-02-25 20:32:48 174
原创 GNU C语法扩展(8)
要研究LINUX内核,C语言是基础中的基础,但是LINUX并不是完全的标准C,而是对标准C做了很多扩展,这些扩展特性对于我们分析内核有着很重要的作用,下面做些总结性的工作。8、当前函数名GNU C中预定义两个标志符保存当前函数的名字,__FUNCTION__保存函数在源码中的名字,__PRETTY__FUNCTION__保存带语言特色的名字。在C函数中这...
2019-02-25 16:06:14 117
原创 论架构在嵌软设计中的重要性
要做到嵌入式应用的代码逻辑清晰,且避免重复的造轮子,没有好的应用架构行吗?如果没有好的架构,移植将会是一件很痛苦的事情。如果没有好的架构,复用是最大的难题,没法更大限度的复用原有的代码。如果没有好的架构,一旦驱动改了,所有的地方都要改,费时费力且很容易出错。如果没有好的架构,应用层中穿插着硬件驱动层的代码,看着会是一片混乱,逻辑不清,代码维护起来会很困难。这里总结下我...
2019-02-24 19:01:51 239
原创 妙用typeof关键字
ANSI C定义了sizeof关键字,用来获取一个变量和数据类型在内存中所占的存储字节数。GNU 扩展了一个关键字,typeof用来获取一个变量或表达式的类型。int i;typeof(i) j = 20;typeof(int *) a;int f();typeof(f()) k;在上面的代码中,因为变量i的类型为int,所以typeof(i)就等于int,typeo...
2019-02-21 08:48:44 157
原创 说说动态内存分配
当编写程序时,偶尔会不确定数组的大小(包括存储字符串的数组)。较为方便的做法是等到程序运行时再来确定数组的实际大小。在标准C中,提供了3个库函数:malloc(),calloc()和realloc()。那么他们有什么区别,分别用在什么场合呢?malloc()函数函数原型:void * malloc(size_t num_byte)参数介绍:一般来说,如果申请成功会它返...
2019-02-20 17:35:23 124
原创 3个实用shell脚本,建议收藏!
0. 编写脚本的注意事项开头加解释器:#!/bin/bash2)语法缩进,使用四个空格;多加注释说明。3)命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。4)默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域。5)有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程。6)写脚本一定...
2019-02-20 17:09:48 678
原创 GNU C语法扩展(7)
要研究LINUX内核,C语言是基础中的基础,但是LINUX并不是完全的标准C,而是对标准C做了很多扩展,这些扩展特性对于我们分析内核有着很重要的作用,下面做些总结性的工作。七、指定初始化1、数组元素的指定初始化在标准C中,当我们定义并初始化一个数组时,教材上方法通常如下几种形式://方法1int a[10];for( i=0; i<10; i++...
2019-02-20 08:39:15 110
原创 GNU C语法扩展(6)
要研究LINUX内核,C语言是基础中的基础,但是LINUX并不是完全的标准C,而是对标准C做了很多扩展,这些扩展特性对于我们分析内核有着很重要的作用,下面做些总结性的工作。6. 柔性数组(flexiblearray)柔性数组也称为零长度数组,或者零长度数组。这种数组通常在结构体当中出现,它本身并不占用空间,但是有了柔性数组意味着结构体的尺寸充满了变数。例如以...
2019-02-19 09:49:22 144
原创 电脑端连接安卓手机用Termux编程
我的目标是mobile coding,需要在Termux上搭建一个dev环境,以Go环境为例。1 Termux上安装ssh服务在搭建和配置阶段,如果直接通过Android上的软键盘操作,即便屏再大,那个体验也是较差的。我们最好通过PC连到termux上去安装和配置,这就需要我们在Termux上搭建一个sshd server。下面是步骤:$apt install opens...
2019-02-18 21:56:20 946
原创 GNU C语法扩展(5)
要研究LINUX内核,C语言是基础中的基础,但是LINUX并不是完全的标准C,而是对标准C做了很多扩展,这些扩展特性对于我们分析内核有着很重要的作用,下面做些总结性的工作。5. 标号元素在标准C里,数组或者结构变量的初始化值必须以固定的顺序出现,而在GCC中,通过制定索引或者结构域名,则允许初始化值以任意顺序出现。指定数组索引的方法是在初始化值前面写[IN...
2019-02-18 14:44:15 161
原创 GNU C语法扩展(4)
要研究LINUX内核,C语言是基础中的基础,但是LINUX并不是完全的标准C,而是对标准C做了很多扩展,这些扩展特性对于我们分析内核有着很重要的作用,下面做些总结性的工作。4 case范围在GCC中,你可以在case标记后面指定一个连续值,例如:caselow…high:这种写法等价于把每个值独立成一个个case标记的情况:caselow:casel...
2019-02-18 08:51:54 129
原创 GNU C语法扩展(3)
要研究LINUX内核,C语言是基础中的基础,但是LINUX并不是完全的标准C,而是对标准C做了很多扩展,这些扩展特性对于我们分析内核有着很重要的作用,下面做些总结性的工作。3 变参宏标准C的变参宏在ISO C99里,一个宏可以被声明为带可变的参数个数,就像函数一样。语法如下:#define debug(format, …) fprintf(stde......
2019-02-17 19:57:04 237 2
原创 GNU C 语法扩展(2)
要研究LINUX内核,C语言是基础中的基础,但是LINUX并不是完全的标准C,而是对标准C做了很多扩展,这些扩展特性对于我们分析内核有着很重要的作用,下面做些总结性的工作。2 局部标签GCC允许你在任何内嵌代码块中声明局部标签,所谓的局部标签跟普通的标签用法一样(用在goto语句或者被获取地址),只不过你只能在声明它的代码块中使用。局部标签的声明如下:_...
2019-02-17 15:18:56 133
原创 GNU C的语法扩展(1)
要研究LINUX内核,C语言是基础中的基础,但是LINUX并不是完全的标准C,而是对标准C做了很多扩展,这些扩展特性对于我们分析内核有着很重要的作用,下面做些总结性的工作。1 语句表达式GNUC把包含在括号中的复合语句看做是一个表达式,称为语句表达式,它可以出现在任何允许表达式的地方,你可以在语句表达式中使用循环、局部变量等,原本只能在复合语句中使用。复合...
2019-02-17 13:39:38 209
原创 标准库
C语言的标准库总共分成十五个部分,每个部分用一个头描述。许多编译器都会使用扩展后的库,因此,包含的头通常会多于十五个。额外添加的头当然不属于标准库的范畴,所以,我们不能假设其他的编译器也可以支持这些头。而这些头通常提供一些针对特定机型或特定操作系统的函数,他们可能会提供对屏幕或键盘更多的操作函数,用于支持图形或窗口界面。标准头主要由函数原型、类型定义以及宏定义组成。如果我们的文...
2019-02-15 20:21:46 1691
原创 typeof关键字在内核中的运用
ANSI C定义了sizeof关键字,用来获取一个变量和数据类型在内存中所占的存储字节数。GNU 扩展了一个关键字,typeof用来获取一个变量或表达式的类型。int i;typeof(i) j = 20;typeof(int *) a;int f();typeof(f()) k;在上面的代码中,因为变量i的类型为int,所以typeof(i)就等于int,typeo...
2019-02-15 11:50:03 134
原创 让你的程序飞起来
本方法可以让C语言指令进一步接近汇编指令的执行效率,提高单片机、嵌入式系统的速度和稳定性,但编程时应采取函数化的编程法——例如使用swap()函数时,必要时加注释。0. 位运算心法&(与逻辑):有0出0,全1出1;|(或逻辑):有1出1,全0出0;~(非逻辑):空即是色,色即是空;^(异或):相异出1,相同出0;1. 如果乘上一个2的倍数数值,...
2019-02-14 11:57:08 300
原创 指定初始化的运用
我们在拜读Linux内核源代码时,是否会经常遇到一些既熟悉又陌生的C语言语法?熟悉是因为我们对Linux内核中使用的C语法绝大部分都能够看懂。陌生是指内核源代码当中的个别语法运用,我们在普通的C教材中并没有提及和说明。那么,从今天开始,小编将发表一系列文章具体阐述Linux内核中使用的那些我们那些看起来很陌生的语法。一、指定初始化1、数组元素的指定初始化在标准C中,当我们...
2019-02-14 08:43:07 181
原创 零长度数组在内核中的运用
什么叫0长度数组 零长度数组就是长度为零的数组,在内存空间中不占用存储位置。ANSI C 标准规定定义一个数组时数组的长度必须是一个常数及数组的长度在编译的时候是确定的;C99 新标准规定可以定义一个变长数组。也就是说数组的长度在编译时是未确定的在程序运行的时候才可确定甚至可以由用户指定大小。例如: int main...
2019-02-13 16:17:41 327
原创 嵌入式开发五大关注点
无论嵌入式系统多么简单或复杂,开发人员都应密切关注五个关键特性。一些是显而易见的,例如RAM和ROM使用。然而,还有其他人经常被开发人员看过,这很容易成为设计周期中的一个主要问题。系统时序询问任何开发人员系统中断或其他系统功能的最小,最大和平均执行时间,并且百分之九十的时间答案是空白的。在了解嵌入式系统的实时性能时,许多开发人员只是交叉指责并希望获得最佳效果。...
2019-02-13 16:14:42 173
原创 介绍一个有用的linux命令
你是否经常因为记不住众多的linux命令而头疼不已?你是否因为记不住众多的命令参数而头疼不已?或许有人说我可以用谷哥度娘啊?但是不是感觉他们的检索效率又非常低下呢?或许有人说我可以用man命令啊?但是不是通过man命令显示的结果又不易阅读呢?。今天我就是来解救你们的!!!tldr命令正是解决这一痛点。tldr是什么?它的中文名叫“GitHub页翻译”,是 “一个简洁...
2019-02-12 13:13:24 117
原创 C与C++的差异
c语言是结构化模块化的语言,是面向过程的程序设计。c++既可以面向过程,也可以面向对象的程序设计(增加了面向对象机制)。c语言的头文件都有.h后缀名,c++中用户自己编制的头文件带.h,系统提供的头文件无后缀名,c++兼容c的头文件。c语言的结构体struct只能包含数据成员,c++的类可以包含数据成员和成员函数。c++中使用usingnamespace作为命名空间,当含有系统头文...
2019-02-11 21:24:36 330
原创 动态分配那些事儿
当编写程序时,偶尔会不确定数组的大小(包括存储字符串的数组)。较为方便的做法是等到程序运行时再来确定数组的实际大小。在标准C中,提供了3个库函数:malloc(),calloc()和realloc()。那么他们有什么区别,分别用在什么场合呢?malloc()函数函数原型:void * malloc(size_t num_byte)参数介绍:一般来说,如果申请成功会它返...
2019-02-09 08:38:12 120
原创 快速上手Makefile
一、WhatMakefile是一个规定了怎么去编译和链接程序的脚本文件,在执行make命令时会执行该文件,window环境下的IDE,如visual studio已经集成了该功能,不需要关心程序的编译规则,在linux下做C/C++开发时经常用到,说到这里首先要知道一个工具make。make是一个解释Makefile中指令的命令工具,常见的IDE都集成了这个工具。目前cento...
2019-02-08 08:37:27 189 1
原创 2019备考[嵌入式系统设计师]之“电路基础”
一、引言在嵌入式系统的硬件设计中,嵌入式微处理器和外围设备接口技术是两个最为核心的部分,然而支撑这个两个部分的基础确实电子电路的基本技术。任何一个嵌入式系统的设计都离不开电子电路的设计。作为嵌入式系统设计师的考试,对这方面的考查或多或少有几题,但在整个考试题目中所占的比例不多,但这并不能说明以后的考试就不会考查这方面的知识,毕竟这个部分是一个不可缺少的基础。同时,在嵌入式的一些基...
2019-02-02 10:09:54 352
该程序能求解n皇后问题,即在n*n方格棋盘上放置n个皇后,要求每个皇后不同行、不同列、不同左右对角线
2023-02-09
信息系统项目管理师考试论文范文集
2022-03-04
软考高项考前必须要会做的百题精讲
2022-03-04
网络规划设计师历年真题09-19年.zip
2021-08-02
一百篇架构师论文范例(备考必备,备考必背!).rar
2021-08-02
2021年系统架构复习笔记(按章节).docx
2021-03-18
系统分析师核心考点归纳.pdf
2021-03-18
软考学习笔记(重要).docx
2021-03-18
自写嵌入式系统设计师考试笔记.doc
2020-07-28
历年真题12-18.zip
2020-07-28
RIO包-用于网络编程的健壮读写函数.md
2020-03-26
picgo_typora.zip
2020-03-25
一文教你如何构建静态链接库.md
2020-03-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人