自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (4)
  • 收藏
  • 关注

原创 文章总目录

目录学习笔记Linux基础(一)Linux基础(二)Linux基础(三)Linux基础(四)Linux基础(五)Linux基础(六)

2021-05-26 19:34:53 70

原创 25_#和##操作符使用分析

25_#和##操作符使用分析1、#运算符用法示例:#include <stdio.h>#define STRING(x) #xint main(){ printf("%s\n", STRING(Hello world!)); printf("%s\n", STRING(100)); printf("%s\n", STRING(while)); printf("%s\n", STRING(return)); return 0;

2021-06-03 22:55:39 124

原创 24_#pragma的使用

24_#pragma的使用1、#pragma简介2、#pragma message用于自定义编译消息示例分析:#include <stdio.h>#if defined(ANDROID20) #pragma message("Compile Android SDK 2.0...") #define VERSION "Android 2.0"#elif defined(ANDROID23) #pragma message("Compile Android S

2021-06-03 22:51:03 135

原创 22_条件编译使用分析 & 23_#error、#warning以及#line的使用分析

22_条件编译使用分析1、条件编译的本质条件编译类似于if…else…,但是其发生在预处理阶段宏定义可以通过命令行进行:####2、条件编译的使用举例示例1:防止头文件重复包含#ifndef _HEADER_FILE_H_#define _HEADER_FILE_H_//source code#endif// test.h#ifndef _TEST_H_#define _TEST_H_#include "global.h" const char* NAME = "tes

2021-06-03 22:47:05 293 2

原创 21_宏定义与使用分析

21_宏定义与使用分析1、C语言中的宏定义与易错点宏定义易错点:#define _SUM_(a, b) (a) + (b)#define _MIN_(a, b) ((a) < (b) ? (a) : (b))#define _DIM_(a) sizeof(a)/sizeof(*a) //计算数组大小int main(){ int a = 1; int b = 2; int c[4] = {0}; int s1 = _SUM_(a, b);

2021-06-03 22:36:16 389 2

原创 19_20_ 编译、链接过程

19_20_ 编译、链接过程1、编译器2、编译链接过程3、预编译4、编译5、汇编6、链接静态链接:由链接器在链接时将库的内容直接加入到可执行程序中Linux下静态库的创建和使用:20-1.c#include <stdio.h>extern char* name();extern int add(int a, int b);int main(){ printf("Name: %s\n", name()); printf("Res

2021-06-02 23:08:56 93

原创 17_++和--操作符分析 & 18_三目运算符和逗号表达式

17_++和–操作符分析1、++和–分析++和–操作符分别对应着两条汇编指令;前置:变量自增(减)1,取变量值;后置:取变量值,变量自增(减)1;程序示例:#include <stdio.h> int main(){ int i = 0; int r = 0; r = (i++) + (i++) + (i++); printf("i = %d\n", i); printf("r = %d\n", r); r = (+

2021-06-02 22:55:50 173 4

原创 15_逻辑运算符分析 && 16_位运算符分析

15_逻辑运算符分析1、逻辑与与逻辑或(1)||运算符是从左向右开始计算当遇到为真的条件时停止计算,整个表达式为真;所有条件为假时表达式才为假;(2)&&运算符是从左向右计算当遇到为假的条件停止计算,整个表达式为假;所有条件为真时表达式为真;2、举例说明程序1:#include <stdio.h>int main(){ int i = 0; int j = 0; int k = 0; ++i || ++j &am

2021-05-26 21:59:05 296

原创 14_单引号和双引号

14_单引号和双引号1、单引号与双引号的区别C语言中单引号用来表示字符字面量;而双引号用来表示字符串字面量;比如:‘a’表示字符字面量,在内存中占1个字节,‘a+1’表示’a’的ASCII码加1,结果为’b’"a"表示字符串字面量,在内存中占2个字节,"a+1"表示指针运算,结果指向"a"结束符’\0’举例说明:#include <stdio.h>int main(){ char* p1 = 1 ; char* p2 = '1'; char* p3

2021-05-26 21:53:45 13514 1

原创 12_注释符号 && 13_接续符和转义符

12_注释符号1、下面的注释哪一个是错误的?#include <stdio.h>int main(){ int/*...*/i; char* s = "abcdefgh //hijklmn"; //Is it a \ valid comment? in/*...*/t i; return 0;}输出结果为:由结果可知:第四个注释是错误的2、注释规则(1)编译器在编译过程中使用空格替换整个注释

2021-05-26 21:36:01 351 1

原创 11_enum、sizeof、typedef分析

enum、sizeof、typedef分析1、枚举类型的使用方法enum是C语言中的一种自定义类型enum值是可以根据需要自定义的整型值第一个定义的enum值默认为0默认情况下的enum值是在前一个定义值的基础上加1enum类型的变量只能取定义时的离散值代码实践:#include &lt;stdio.h&gt;enum Color{ RED, GREEN ...

2021-05-26 19:33:24 177 2

原创 10_struct和union分析

struct和union分析1、struct空结构体占多大内存?这个答案没有统一标准,与编译器有关,有的会报错,有的会显示为0。代码实践:#include &lt;stdio.h&gt;struct TS{};int main(){ struct TS t1; struct TS t2; printf("sizeof(struct TS) = ...

2021-05-25 22:03:16 64 2

原创 09_const和volatile分析

const和volatile分析1、const只读变量const修饰的变量是只读的,但本质上还是变量const只在编译期有用,在运行期无用代码实践:#include &lt;stdio.h&gt;int main(void){ int cc = 10; printf("cc == %d\n",cc); int *p = (int *)&amp;cc;...

2021-05-25 22:03:07 73 1

原创 08_goto和void分析

goto和void分析1、goto关键字副作用分析goto语句会破坏程序的结构程序示例:#include &lt;stdio.h&gt;#include &lt;malloc.h&gt;void func(int n){ int* p = NULL; if( n &lt; 0 ) { goto STATUS; } p =...

2021-05-25 22:02:55 66

原创 07_循环语句

循环语句1、三种循环语句do、while、for的区别do语句先执行后判断,循环体至少执行一次while语句先判断后执行,循环体可能不执行for语句先判断后执行,相比while更简洁2、图解三种循环方式(1)do…while…(2)while循环(3)for循环3、break和continue的区别代码实践:#include &lt;stdio.h&gt;void...

2021-05-25 22:02:50 84

原创 06_分支语句

分支语句1、if语句2、switch语句注:case语句中的值只能是整型或者字符型常量3、小结

2021-05-25 22:02:43 57

原创 05_变量属性

变量属性C语言定义变量属性的关键字主要有auto、register、static、extern1、auto关键字2、register关键字(1)register关键字指明将局部变量存储于寄存器中;(2)register只是请求寄存器变量,并不一定能成功;(3)register变量必须是CPU寄存器可以接受的值;(4)不能用&amp;运算符获取resister变量的地址;(5)re...

2021-05-25 22:02:35 111

原创 04_类型转换

类型转换C语言中类型转换一般有强制类型转换与隐式类型转换两种;1、强制类型转换强制类型转换语法:强制类型转换结果:编程练习:#include &lt;stdio.h&gt;struct TS{ int i; int j;};struct TS ts;int main(){ short s = 0x1122; char c = (c...

2021-05-25 22:02:19 75

原创 03_浮点数的秘密

浮点数的密码1、内存中的浮点数表示方法浮点数在内存中的存储方式为:符号位、指数、尾数(小数)2、浮点数存储示例举例:实数8.25在内存中的表示3、编程验证#include &amp;lt;stdio.h&amp;gt;int main(){ float f = 8.25; unsigned int* p = (unsigned int*)&amp;amp;f; prin...

2021-05-25 22:02:01 95

原创 02_有符号数与无符号数

有符号数与无符号数1、计算机中的符号位编程实验:#include &lt;stdio.h&gt;int main(){ char c = -5; short s = 6; int i = -7; printf("%d\n", ( (c &amp; 0x80) != 0 )); printf("%d\n", ( (s &amp; 0x8000)...

2021-05-25 22:01:41 140

原创 01_基本数据类型

基本数据类型1、什么是数据类型数据类型可以理解为固定内存大小的别名数据类型是创建变量的模子2、什么是变量变量是一段(具体)连续存储空间的别名程序通过变量申请并命名存储空间通过变量名可以使用存储空间3、代码练习(1)类型与变量的关系#include &lt;stdio.h&gt;int main(){ char c = 0; short s = 0; ...

2021-05-25 21:37:37 94

原创 笔试题之字符串循环右移

题目:字符串循环右移要求:void right_shift_r(const char* src, char* dest, unsigned int n);将字符串src右移n位,dest为输出结果;程序:#include <stdio.h>#include <string.h>/* 循环右移 */void right_shift_r(const char...

2019-08-04 17:23:39 138

原创 一行代码实现strlen

一行代码实现strlen函数#include <stdio.h>#include <assert.h>int strlen(const char* s){ return assert(s), (*s ? strlen(s + 1) + 1 : 0);}/*测试*/int main(){ printf("len = %d\n", st...

2019-05-04 22:40:38 86

原创 从软件角度看处理器

从软件角度看处理器1、微处理器与微控制器微控制器 = 微处理器 + 片内内存 + 片内外设如下图所示:2、寄存器寄存器分类(1)CPU寄存器专用指令执行、数据运算、变量处理、参数传递(2)外设寄存器用于控制外设的行为的工作方式寄存器值的配置需要根据芯片手册来完成处理器中的关键寄存器PC和SP的使用案例:函数调用当程序从b点执行函数a,程序会跳转到a点去执行函...

2018-11-08 13:46:35 171

原创 linux kernel 配置与编译

linux内核的配置与编译过程选择九鼎s5pv210开发板移植的Linux内核,下载地址为: 链接:http://pan.baidu.com/s/1sl15QMD 密码:by3o1.首先检查Makefile 查看Makefile主要看一下Makefile中的两个变量:ARCH与CROSS_COMPILE; (1)主要是检查交叉编译工具链有没有设置对。 CROSS_COMPILE ?=

2017-07-10 20:44:23 1194

原创 linux内核目录分析

kernel目录分析选择九鼎s5pv210开发板移植的linux内核,下载地址为: 链接:http://pan.baidu.com/s/1sl15QMD 密码:by3o一 分析源目录下文件夹: 1.arch arch是architecture的缩写,意思是架构。arch目录下是好多个不同架构的CPU的子目录,譬如arm这种cpu的所有文件都在arch/arm目录下,X86的CPU的所有文

2017-07-10 17:02:00 714

原创 ubuntu14.04上网问题

虚拟机上网有2种模式,NAT和桥接虚拟机上网配置要注意这几个地方:第一个要注意选择NAT还是桥接模式;第二个要注意ubuntu中网络配置文件/etc/network/interfaces,这个文件中是配置网卡信息的(譬如静态ip还是dhcp,静态ip地址是多少等);第三个如果是桥接模式要注意桥接到哪个网卡上(一般笔记本都有2个网卡,一个是有线网卡一个是无线网卡),如果是NAT模式没关系。1.NAT模

2017-07-06 22:18:07 399

原创 u-boot如何启动内核

内核启动的三个步骤注:本次分析的u-boot是九鼎官方的u-boot代码 下载地址:链接:http://pan.baidu.com/s/1gfpDZqj 密码:7cqe一 将内核搬移到DDR中 一个完整的软件+硬件的嵌入式系统,静止时(未上电时)bootloader、kernel、rootfs等必须的软件都以镜像的形式存储在启动介质中(X210中是iNand/SD卡);运行时都是在DDR内存中

2017-07-01 17:20:46 2260

原创 u-boot第二阶段分析(五)

start_armboot函数(五)注:本次分析的u-boot是九鼎官方的u-boot代码 下载地址:链接:http://pan.baidu.com/s/1gfpDZqj 密码:7cqe上一章结束,一些板级的初始化已经完成,下面从Board.c的489行继续开始;1.初始化Norflash并打印配置信息#ifndef CFG_NO_FLASH /* configure available

2017-06-28 15:41:35 438

原创 u-boot第二阶段分析(四)

start_armboot函数(四)注:本次分析的u-boot是九鼎官方的u-boot代码 下载地址:链接:http://pan.baidu.com/s/1gfpDZqj 密码:7cqe接着上一章的内容,继续分析init_sequence中的各个函数;1.checkboard 这个函数的作用就是检查当前开发板是哪个开发板并且打印出开发板的名字。代码如下:int checkboard(void)

2017-06-28 11:34:12 328

原创 u-boot第二阶段分析(三)

start_armboot函数(三)注:本次分析的u-boot是九鼎官方的u-boot代码 下载地址:链接:http://pan.baidu.com/s/1gfpDZqj 密码:7cqe接着上一章的内容;1.interrupt_init 这个函数看名字是中断初始化,其实是定时器的初始化,准确说是Timer4,代码如下:int interrupt_init(void){ S5PC11X_

2017-06-27 15:08:36 315

原创 u-boot第二阶段分析(二)

start_armboot函数(二)注:本次分析的u-boot是九鼎官方的u-boot代码 下载地址:链接:http://pan.baidu.com/s/1gfpDZqj 密码:7cqe接着上一章节的内容,继续往下分析start_armboot函数;1.for循环执行init_sequence 代码如下:for (init_fnc_ptr = init_sequence; *init_fnc_

2017-06-26 23:24:38 374

原创 u-boot第二阶段分析(一)

start_armboot函数的引入注:本次分析的u-boot是九鼎官方的u-boot代码 下载地址:链接:http://pan.baidu.com/s/1gfpDZqj 密码:7cqe一 start_armboot函数简介 start_armboot函数是一个长函数,在uboot/lib_arm/board.c的第444——908行,其中也调用了其他函数,共同构成了u-boot的第二阶段。1

2017-06-26 15:18:06 313

原创 u-boot第一阶段分析(五)

注:本次分析的u-boot是九鼎官方的u-boot代码 下载地址:链接:http://pan.baidu.com/s/1gfpDZqj 密码:7cqe接着上一章的重定位,重定位之后就跳转到after_copy,代码如下:bl movi_bl2_copyb after_copyafter_copy后的代码是和虚拟地址映射有关的内容。虚拟地址映射一 虚拟地址的有关概念 1.

2017-06-23 10:57:28 458

原创 u-boot第一阶段分析(四)

注:本次分析的u-boot是九鼎官方的u-boot代码 下载地址:链接:http://pan.baidu.com/s/1gfpDZqj 密码:7cqe上一章说了lowlevel_init.S,现在重新回到start.S中。1.再次设置栈ldr sp, _TEXT_PHY_BASE sub sp, sp, #12mov fp, #0(1)之前在调用lowlevel_init程序前设置过1次栈

2017-06-22 17:11:34 339

原创 u-boot第一阶段分析(三)

lowlevel_init.S的引入注:本次分析的u-boot是九鼎官方的u-boot代码 下载地址:链接:http://pan.baidu.com/s/1gfpDZqj 密码:7cqe继续上一章节的第四小节; 第一次设置完栈之后,跳转到lowlevel_init.S中去,代码如下:bl lowlevel_init通过Source Insight找到lowevel_init.S的实际位置在:

2017-06-22 13:29:16 644

原创 u-boot第一阶段分析(二)

start.S分析(二)注:本次分析的u-boot是九鼎官方的u-boot代码 下载地址:链接:http://pan.baidu.com/s/1gfpDZqj 密码:7cqe继续上一章节的内容 一 启动代码的16字节校验头#if defined(CONFIG_EVT1) && !defined(CONFIG_FUSED) .word 0x2000 .word 0x0 .

2017-06-21 14:50:12 481

原创 u-boot第一阶段分析(一)

Start.S的引入注:本次分析的u-boot是九鼎官方的u-boot代码 下载地址:链接:http://pan.baidu.com/s/1gfpDZqj 密码:7cqe一 从uboot中找到整个项目的入口 1.从u-boot.lds中找到程序的入口 整个程序的入口取决于链接脚本u-boot.lds中ENTRY声明的地方,为ENTRY(_start)。 所以_start 符号所在的文件就是整

2017-06-20 16:04:21 428

原创 uboot的基本概念

uboot的引入一 uboot是什么? uboot是bootloader的一种,是一个嵌入式引导程序。 对比pc机和嵌入式linux系统的启动过程: 1.PC机的启动过程 (1)典型的PC机的部署:BIOS程序部署在PC机主板上(随主板出厂时已经预制了),操作系统部署在硬盘上,内存在掉电时无作用,CPU在掉电时不工作。 (2)启动过程:PC上电后先执行BIOS程序(实际上PC的BIOS就是

2017-06-20 14:04:47 2539

原创 Linux基础(六)

Makefile的引入当我们要对多个文件进行编译成一个可执行文件时,需要使用Makefile。它就像一个批次处理的编译脚本,可实现自动化编译,一旦写好,只需要一个make命令,整个过程就会自动编译。1. Makefile的规则 Makefile是由规则来实现的,即Makefile文件内容的主体由很多规则构成,每一条规则都由三部分组成: (1)目标:目标定格写,后面是冒号(冒号后面是依赖) (

2017-06-19 23:11:40 244

cxuan-os-修改.zip

cxuan-os-修改.zip

2021-05-24

unix环境高级编程

unix环境高级编程 APUE

2017-06-13

C语言经典案例

c语言经典案例

2017-06-13

面试c语言深度解析

面试c语言深度解析

2017-06-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除