自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

明明德

应无所住,而得其心!

  • 博客(106)
  • 资源 (10)
  • 论坛 (1)
  • 收藏
  • 关注

原创 28. 多级指针

指针:存放地址的盒子,只是这个盒子里面存放的是指向其它地址内容的指针。argc 表示参数的数量。argv是二级指针,第一级指向盒子,如下图第一列的盒子,第二级指针指向需要指向的具体内容。因为具体内容的存放地址不一定连续,通过二级指针,实现第一级指针是连续的状态,通过一级指针的连续性,实现对不连续地址的连续访问。上面的代码也可以不用for循环,利用argc。如果没有argc,只有argv,则可以用while循环,当指针不为空NULL则一直循环通过连续访问ar...

2020-12-31 14:09:57 22

原创 2. ARM 架构

https://cs140e.sergio.bz/docs/ARMv8-A-Programmer-Guide.pdfhttps://www.macs.hw.ac.uk/~hwloidl/Courses/F28HS/Docu/DEN0013D_cortex_a_series_PG.pdfR0 - R12为通用寄存器,放通用数据,32bit,9种不同的模式可以共享(除了FIQ模式,有自己专用的R8-R12,R15与CSPR也是共享)USR模式没有SPSR(Saved Progr.

2020-12-31 13:55:41 43

原创 1. ARM综述

1. 嵌入式Linux学习路线图SOC/ARM ---》 Bootloader ----》Kernel/Driver ----》File System/BusyBox ----》ROM/FrameWork

2020-12-30 22:45:30 42

原创 27. 指针的逻辑操作

2020-12-30 21:43:13 39

原创 26. 指针运算符加减

通过如下方式,访问指针定义范围以外的内容,指针越界root@wesley-VirtualBox:/home/wesley/C_coding/20201130# cat pointer.c#include <stdio.h>int main(){ const int a = 0x12345678; int b = 0x11223344; int *p = &b; *(p+1...

2020-12-30 14:24:10 31

转载 MiniTools 工具介绍

arm9home.net/read.php?tid-24600.html

2020-12-30 07:56:27 117

原创 51. start.S-->board.c/board_init_f函数分析-2

board.c文件路径头文件s5p_goni.h路径此处调用memset必然导致程序全部跑飞。

2020-12-30 06:56:21 33

原创 50. start.S-->board.c/board_init_f函数分析

lowlevel_init就是从363行跳出去的。此处是b,不是bl,因此此处不会保存连接寄存器的指针,但代码是如何返回到这里的呢?lowlevel_init.S 的mov pc, lr 按照惯例应该跳回到start.S中跳出的的地方(363行),这里实际上返回到更上层,第356行,去调用cpu_init_crit。start.s 155行即从lowlevel_init.S返回的时候,返回到了155行。下面就是调用call_board_init_f这里的board_i...

2020-12-30 06:35:23 39

原创 25- C语言 指针修饰符 volatile/typedef

2020-12-29 20:57:01 34

原创 24- C语言 指针修饰符 const

对于printf,其第一个参数是const char类型的字符指针,指向字符串,值不能改变

2020-12-29 20:41:19 27

原创 uboot 2017-07 good Makefile

## SPDX-License-Identifier: GPL-2.0+#VERSION = 2017PATCHLEVEL = 07SUBLEVEL =EXTRAVERSION =NAME =# *DOCUMENTATION*# To see a list of typical targets execute "make help"# More info can be located in ./README# Comments in this file are targeted .

2020-12-29 10:54:15 30

原创 23- C语言 指针概念

C语言操作的是内存类型的资源:不仅包括内存,还包括显卡,I2C等。内容是什么,怎么找到它,怎么用这些内容?内容存在地址里面,地址的概念:指针指向。指针:地址的代名词/门牌号。指针变量:存放指针这个概念的盒子。int a 圈了4Byte的地址。1.分配的这个盒子有多大? 在32位系统中,指针就要4字节,来表示32bit的地址空间。2. 盒子的内容是地址,指向内存的读取方法是什么?*p 32位系统为了表示整个存储空间,占用4B每次读多少字节?取决于*p前面的修饰符。int *..

2020-12-29 07:44:29 39

原创 49. DDR2内存初始化代码分析-12

接着前面的代码,加入验证部分。初始化完成后,就显示DDR-OK!lowlevel_init.S/* * Memory Setup stuff - taken from blob memsetup.S * * Copyright (C) 2009 Samsung Electronics * Kyungmin Park <kyungmin.park@samsung.com> * * See file CREDITS for list of people who contribu

2020-12-28 22:37:27 32

原创 48. DDR2内存初始化代码分析-11

12

2020-12-28 20:29:13 34

原创 22- C语言 赋值运算/内存访问符号

"."我直接读做"的”。->我读作"指向的结构体的"。

2020-12-27 16:46:34 50

原创 21- C语言 位运算- ^ ~|

异或运算很少用于逻辑运算,而是用于算法设计,如加密解密a 00 b 11a = a ^ b = 00 ^ 11 = 11b = a ^ b = 11 ^ 11 = 00a = a ^ b = 11 ^ 00 = 11取反:~a = 0x0f~a = 0xf0? 取决于编译器的位数 baseon 8位系统的结果~a = 0xffff fff0 based on 32位系统...

2020-12-27 16:29:43 56

原创 20- C语言 位运算- & |

2020-12-27 16:17:20 41 1

原创 19- C语言 位运算-移位运算符

位运算:最接近底层操作的运算。左移:在右边补0移位的时候,符号位不变,占据最高位,不参与移动。右移:对于正数,可以把里面的1全部移掉,直至全0.对于有符号的负数,右移,永远也不会变成全0,因为最高位符号位永远为1.正数的左移与右移,负数的无符号右移,就是相应的补码移位所得,在高位补0即可。逻辑右移:针对无符号数,左边补0算数右移:针对有符号数,左边补1...

2020-12-27 15:48:28 36 1

原创 47. DDR2内存初始化代码分析-10

//step 20:DirectCmd chip0 MRS (MEM DLL reset) CL=4, BL=4 ldr r1, =0x00000542 str r1, [r0, #DMC_DIRECTCMD] str r1, [r0, #DMC_DIRECTCMD] //DirectCmd chip0 PALL ldr r1, =0x01000000 str r1, [r0, #DMC_DIRECTCMD] 21. 发PALL指令22...

2020-12-27 11:23:42 38

原创 46. DDR2内存初始化代码分析-9

Demo程序里面没有配第13步.14步及以后,都是配置Device14.发出NOP是为了使CKE保持高电平 // 4. 初始化DDR2 DRAM //DirectCmd chip0 Deselect ldr r1, =0x07000000 str r1, [r0, #DMC_DIRECTCMD]14执行完,15也没有配置. 15是为了让device保持稳定,进入工作状态. 由于刚开始CKE一...

2020-12-27 10:21:18 44

原创 45. DDR2内存初始化代码分析-8

//TimingRow for //200MHz ldr r1, =DMC0_TIMING_ROW // #define DMC0_TIMING_ROW 0x2B34438A,也是配置在200MHz下的参数。 // Demo程序在t_rfc的值设置为2B,因为2B大于11,可以用。建议针对自己的代码用0x11 // Demo程序t_Rrd配置为3,比1大,可以使用,建议针对自己的代码用1 ...

2020-12-27 09:06:54 33 1

原创 44. DDR2内存初始化代码分析-7

//step 8:PrechConfig ldr r1, =0xFF000000 str r1, [r0, #DMC_PRECHCONFIG]如果是read,read完成以后,经过tp_cnt时间之后,如果还没有数据读写,控制器会自动发起一个precharge命令把这一行关掉。如果是write指令,等write写完以后,在等tp_cnt时间之后,控制器会自动发起一个precharge命令把这一行关掉。//step 9:TimingAref 7.8us//133MHz=..

2020-12-27 07:46:13 84

原创 18- C语言 常用逻辑运算符

硬件处理的最小单位,bit软件处理的最小单位,byte要用软件实现对硬件的处理,需要用到位运算。A II B 与 B II A 实现的效果不同,对于A II B,如果A为真,则后面的B不会被执行。同理,对于 A && B,如果A为假,则后面的B不会被执行。由于a == 10 这句为真,后面的printf语句没有被执行。由于a != 10为假,后面的printf语句才被执行a = 0x0, !a的值是1, 逻辑上取反。而位运算的~

2020-12-26 22:20:03 70

原创 17- C语言 常用算术运算符

加减运算,只要是相同类型就好。乘除运算:CPU可能会不支持,需要利用软件模拟的方法去实现,需要调用特别的第三方库,尤其是针对嵌入式逻辑编程,没有操作系统,OS级别的软件运算不支持,只能依靠软件模拟/第三方库...

2020-12-26 21:56:25 81

原创 16- C语言 类型修饰符 volatile

对于上面假设场景,比如100来自外部键盘输入,输入后存入变量a。while循环,默认一直循环。当外界有新的输入,不为100,则跳出死循环,执行mylcd()编译器编译后的汇编:f1:从内存取数据存入寄存器R0f2:比较R0与立即数100f3:如果相等,则调到f1f4:如果不等,执行mylcd()如果没有volatile 去修饰变量a,则编译器可能会做出如下优化:每次取都是从同一个内存地址去取,默认会以为来自同一个地址的值不会改变,于是优化为只取一次,对于频繁访问的变量默认..

2020-12-26 21:42:36 45

原创 15- C语言 类型修饰符 static/const

上面,对函数名取值,编译时只是warning,但还是可以取到值,只是我们目前看不懂而已。const的地位,有点类似于register,不纯粹。有定义,但CPU/编译器并不一定完全按照其定义去执行。register是否真的把一个变量按照寄存器类型处理,取决于CPU是否有足够的资源。const也不完全是常量,还是可以通过特殊方法给const变量取赋值...

2020-12-26 21:27:45 37

原创 14- C语言 类型修饰符 auto/register

数据类型:限制内存大小的基本数据类型与自定义数据类型,用于限制内存空间的大小。类型的属性:类型修饰符,用来定义内存分配的具体位置。比如:char a;,就等同于auto char类型,属于普通的可读可写内存区。如果是如下方式定义,则认为a存在于栈空间。{auto char a;}auto这个关键字,如果被包含在大括号内,则默认分配的是栈空间。auto一般不写,默认就是,因此代码中很少会看到它。CPU直接从寄存器中取数据,会比直接从内存中取数据快很多,快一两

2020-12-26 21:11:39 51

原创 43. DDR2内存初始化代码分析-6

接下来就是进入手册的第6步,设置Memory Control //step 6: MemControl BL=4, 1 chip, DDR2 type, dynamic self refresh, force precharge, dynamic power down off ldr r1, =DMC0_MEMCONTROL //#define DMC0_MEMCONTROL 0x00202400 str r1, [r0, #DMC_MEMCONTROL] //将r1这个宏

2020-12-26 17:40:44 37

原创 42. DDR2内存初始化代码分析-5

前面的Physical/DLL部分已经初始化完毕。接下来接着进行原来的第5步,初始化DMC0的其它部分,包括时序等。 // 3. 初始化DMC0 //step 5: ConControl auto refresh off ldr r1, =0x0FFF2010 str r1, [r0, #DMC_CONCONTROL] //step 6: MemControl BL=4, 1 chip, DDR2 type, dynamic self refresh, force precharge

2020-12-26 11:28:26 33

原创 41. DDR2内存初始化代码分析-4

//step 2: PhyControl0 DLL on //打开PhyControl0的总开关 ldr r1, =0x00101002 str r1, [r0, #DMC_PHYCONTROL0]打开待机开关 //step 4: PhyControl0 DLL start //代开待机开关 ldr r1, =0x00101003 str r1, [r0, #DMC_PHYCONTROL0]DLL此时开始启动/全部打开.真正可用,要等到DL...

2020-12-26 10:09:03 49 1

原创 13- C语言 逻辑结构

2020-12-25 21:36:51 53

原创 12- C语言自定义数据类型 Typedef

Typedef:是原有内存空间的一个别名,并不是新的类型。typedef:取个别名,方便阅读

2020-12-25 17:05:00 43

原创 11- C语言自定义数据类型 Enum

枚举类型:与宏定义的作用相同,只是方便程序员更清楚的理解各种取值的含义。默认第一个元素(宏)定义为0,第2个元素(宏)定义为1,...第一个元素(宏名)可以定义为100,后续元素的取值将会递增。枚举类型,默认大小为4字节枚举类型对元素的取值并没有强约束力,可以重新定义,上例输出为:”the a1 is 4:800输出为800,即可以复制abc枚举类型大括号包括的三个宏取值以外的取值。如上例,某芯片支持不同的功能,这些不同的功能就可以用枚举类型列..

2020-12-25 16:56:20 86

原创 10- C语言自定义数据类型 结构体/共用体

数据类型:内存分配空间的方式。比如,要表示看门狗电路的寄存器组,则用常规的int类型就不行,因为有四个寄存器。此时就用到结构体共用体:共用内存的起始地址。更多是一种技巧型代码。...

2020-12-25 15:48:24 31

原创 9- C语言基本数据类型

有符号数:内存空间最高字节是符号位。无符号数:内存空间最高字节是数据。int 默认是有符号的. 一般,有符号数用于计算,无符号数表示数据. 对于右移运算,有符号数无法进行运算,因为最高位永远是符号位无符号数,更多的同于数据的采集/存取有符号数代表数字浮点型与整型在内存中的存储结构不同浮点型常量:默认占用8字节,如1.1如果要限制占用空间为4字节,则写成1.1f同理,整型/char类型为了解决溢出问题,可以在数字后面加l,如2l表示长整型,占8字节void更多的..

2020-12-25 15:36:27 55

原创 8- C语言常用关键字及运算符操作

什么时候用,怎么用,为什么?关键字,编译器也是一个展开的过程,一个解释语句以分号结尾。一个整型,不一定是4个字节,与计算器编译器可接受的最佳字长有关,32位系统,int是4字节。16位系统,int是2字节。即int类型的字节长度与处理器的字长有关,与编译器有关。bit:操作硬件的最小单位byte:软件操作的最小单位。char: 1个Byte键盘:所有按键要表达的含义,可以用8位ASIC码完全表示完。8bit的最大表示范围是256,上面char a=30..

2020-12-24 21:44:13 46

原创 40. DDR2内存初始化代码分析-3

rd_fetch计算公式。 假设delay=0,则rd_fetch=0.75取整数=1在write的情况下,假设device无delay。write命令发出后,经过WL=(RL-1),DQ总线上开始输出数据,device端收入数据时,也应该对DQS相移90度,刚好在dataeye的中心位置收入数据。在device端的DLL只是做时钟同步,而不是做相移,因此相移90°的功能就交给controller端去完成。具体做法:DMC端发出DQ后,延迟90°才发DQS,device端看到DMC端发过来的..

2020-12-24 20:46:08 31 1

原创 DRAM Organization

Channel:connected to memory controller2x ranks, 1 rank 1 sideA chip 4 banks.B:bitline4

2020-12-24 19:11:13 38 2

转载 Ubuntu 20.04换阿里源

Ubuntu 20.04换阿里源1 备份原来的源cp -ra /etc/apt/sources.list /etc/apt/sources.list.bak2 搞清楚ubuntu的代号,比如:4.10 Warty Warthog(长疣的疣猪)5.04 Hoary Hedgehog(灰白的刺猬)5.10 Breezy Badger(活泼的獾)6.06(LTS) Dapper Drake(整洁的公鸭)6.10 Edgy Eft(急躁的水蜥)7.04 Feisty Fawn(坏脾气的小鹿)7

2020-12-24 10:07:16 67

原创 39. DDR2内存初始化代码分析-2

上面为memory controller的框图,最左边接CPU,通过64bit的高速总想AXI Channel连接CPU由于CPU速率非常高,所以这些数据/命令会被缓存起来,write/read buffer,control queue。可以不断的往buffer里面写命令。命令通过中间的调度器queue arbitrator,一般情况下都是顺序执行的,有点时候可能会有一些优化策略,内部做一些reorder。AREF:所有的bank refresh 命令。每隔64毫秒,插入一个刷新命令,所有的..

2020-12-24 07:50:03 56

项目01商铺数据加载及存储.ipynb

项目01商铺数据加载及存储,项目01商铺数据加载及存储.ipynb.ipynb

2019-09-02

1.Python基础_1.6_模块与包.ipynb

1.Python基础_1.6_模块与包.ipynb,1.Python基础_1.6_模块与包.ipynb

2019-09-02

1.Python基础_1.7_数据读写.ipynb

1.Python基础_1.7_数据读写.ipynb,1.Python基础_1.7_数据读写.ipynb

2019-09-02

项目02基于Python的算法函数创建.ipynb

项目02基于Python的算法函数创建.ipynb

2019-09-05

1.Python基础_1.4_条件判断及循环语句.ipynb

1.Python基础_1.4_条件判断及循环语句.ipynb,1.Python基础_1.4_条件判断及循环语句.ipynb

2019-09-02

1.Python基础_1.5_函数.ipynb

1.Python基础_1.5_函数.ipynb,1.Python基础_1.5_函数.ipynb

2019-09-02

1-Python基础_1.3_字典映射.ipynb

1-Python基础_1.3_字典映射.ipynb,1-Python基础_1.3_字典映射.ipynb

2019-09-02

变量与数据类型.ipynb

1.1 Python 数据类型笔记,ipynb文档 个人学习练习笔记

2019-08-17

云计算与分布式系统

云计算与分布式系统__________从并行处理到物联网

2014-08-04

1.Python基础_1.2_序列及通用操作.ipynb

1.Python基础_1.2_序列及通用操作,完整学习笔记,完美收藏

2019-08-20

VDSL2技术标准

发表于 2019-07-26 最后回复 2019-07-26

空空如也

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

TA关注的人 TA的粉丝

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