自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 再谈C语言位域

五月 21, 2013 5 条评论我在日常工作中使用C语言中的位域(bit field)的场景甚少,原因大致有二:* 一直从事于服务器后端应用的开发,现在的服务器的内存容量已经达到了数十G的水平,我们一般不需要为节省几个字节而使用内存布局更加紧凑的位域。* 结构体中位域的实现是平台相关或Compiler相关的,移植性较差,我们不会贸然地给自己造“坑”的。不过近期Linux技术内核社区(www.linux-kernel.cn) mail list中的一个问题让我觉得自己对bit field..

2021-08-13 15:14:33 313

转载 ARM非对齐访问和Alignment Fault

转载自ARM非对齐访问和Alignment Fault - 者旨於陽 - 博客园 (cnblogs.com)1、指令对齐A64指令必须word对齐。尝试在非对齐地址取值会触发PC alignment fault。1.1、PC alignment checkingPC(Program Counter)寄存器用来存放下一条执行指令地址,对于AArch64架构,如果PC寄存器低2位不为0,则触发PC alignment fault。类似于Instruction Aborts异常,将非对齐地址加

2021-08-11 20:52:25 3067

转载 ARM64位CPU下linux crash手动恢复函数调用栈

注:本文转载自知乎:https://zhuanlan.zhihu.com/p/50768351

2021-05-28 10:10:19 1377

转载 谈谈arm下的函数栈

转载自https://www.cnblogs.com/tolimit/p/4226839.html引言  这篇文章简要说说函数是怎么传入参数的,我们都知道,当一个函数调用使用少量参数(ARM上是少于等于4个)时,参数是通过寄存器进行传值(ARM上是通过r0,r1,r2,r3),而当参数多于4个时,会将多出的参数压入栈中进行传递(其实在函数调用过程中也会把r0,r1,r2,r3传递的参数压入栈),具体是什么实现的呢,我们看看。函数栈  首先我们需要了解一下linux下一个进程的内存地址..

2021-01-16 14:24:13 516 1

转载 Linux Capabilities 简介

作者:sparkdev出处:http://www.cnblogs.com/sparkdev/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。为了执行权限检查,Linux 区分两类进程:特权进程(其有效用户标识为 0,也就是超级用户 root)和非特权进程(其有效用户标识为非零)。 特权进程绕过所有内核权限检查,而非特权进程则根据进程凭证(通常为有效 UID,有效 GID 和补充组列表)进行完全权限检查。以常用

2020-11-20 16:40:14 2185 1

转载 转:DDR原理详解

首先,我们先了解一下内存的大体结构工作流程,这样会比较容量理解这些参数在其中所起到的作用。这部分的讲述运用DDR3的简化时序图。DDR3的内部是一个存储阵列,将数据“填”进去,你可以它想象成一张表格。和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理。对于内存,这个单元格可称为存储单元,那么这个表格...

2019-03-30 11:22:45 1203

转载 [转载]深入分析:我们为何需要DDR2内存技术(多图)

文章来自: https://www.cnblogs.com/thx-bj/archive/2008/04/02/1134040.html【IT168评测室】最近,假如你仔细的观察PC领域发生的变化,你就会注意的一个新鲜的术语“DDR2”频频出现。顾名思义,DDR2就是第二代双倍速率同步动态随机存储器,这个名字听上去很拗口,实际上我们只要知道它的缩写是DDR SDRAM就行了。就目前的发展看来,...

2019-03-29 20:26:30 482

转载 NANDflash详解

本文转载自:https://www.linuxidc.com/Linux/2012-10/73065.htmNand Flash详细分析NAND技术在设计之初是为了数据存储应用,nand的写回速度比较快,芯片面积小,特别容量大有很大的优势NAND的地址分为三部分:块号,块内页号,页内字节号;正因为如此,NAND的一次数据访问,要经过3次寻址,先后确定块号,块内页号,页内字节号,至少占用了三个时间周...

2018-03-19 10:31:22 5140

转载 Nor——Flash擦写和原理分析

本文转载自https://www.cnblogs.com/jason-lu/archive/2013/03/13/2957399.html1. NOR FLASH 的简单介绍NOR FLASH 是很常见的一种存储芯片,数据掉电不会丢失.NOR FLASH支持Execute On Chip,即程序可以直接在FLASH片内执行(这意味着存储在NOR FLASH上的程序不需要复制到RAM就可以直接运行)...

2018-03-14 18:44:27 1854

转载 最大子序列乘积

转载自http://www.cnblogs.com/grandyang/p/4028713.htmlFind the contiguous subarray within an array (containing at least one number) which has the largest product.For example, given the array [2,3,

2017-09-21 13:49:09 697

原创 Unix C杂谈(笔记)

内存中地址从小到大各存储域的划分: 代码区,只读常量区,全局区,BSS段,堆,栈。 其中,堆区和栈区没有明显的界限,可以适当调整。 使用malloc申请动态内存的注意事项 1.使用malloc申请动态内存时,可能还需要额外的12字节来存储一些用于管理 动态内存的信息,比如内存的大小等。 2.malloc函数底层采用链表形式去处理多个内存块,也就是需要保存有关下一个内存块/上一个内存块的信息

2017-08-26 14:23:51 224

转载 二叉树中找出和为某一值的所有路径

转载自http://www.jb51.net/article/79200.html这篇文章主要介绍了C++实现查找二叉树中和为某一值的所有路径的示例,文中的方法是根据数组生成二叉排序树并进行遍历,需要的朋友可以参考下从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如 输入整数22和如下二元树

2017-08-22 01:25:44 554

转载 排序:桶排序

转载自:http://blog.csdn.net/hitwhylz/article/details/9970451排序算法系列学习,主要描述冒泡排序,选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等排序进行分析。文章规划:一。通过自己对排序算法本身的理解,对每个方法写个小测试程序。 具体思路分析不展开描述。二。通过《大话数据结构》一书的截图,详细分析该

2017-08-22 00:48:56 381

转载 稳定排序和不稳定排序

转载自:http://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html      这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松

2017-08-21 10:39:23 208

转载 两个栈实现队列,两个队列实现栈

文章转载自http://www.cnblogs.com/kaituorensheng/archive/2013/03/02/2939690.html为说明思想,假设队列、栈都很大,不会出现满的情况。1. 两个栈实现队列//前提已知:struct Stack{ int top;   //栈顶指针 int stacksize;//栈的大小 int

2017-08-21 10:05:48 202

转载 两个栈实现队列一些思路总结

本文转载自http://www.cnblogs.com/wanghui9072229/archive/2011/11/22/2259391.html两年前从网上看到一道面试题:用两个栈(Stack)实现一个队列(Queue)。觉得不错,就经常拿来面试,几年下来,做此题的应该有几十人了。通过对面试者的表现和反应,有一些统计和感受,在此做个小结。 用C++描述,题目大致是这样的: 

2017-08-21 01:37:26 260

转载 带环链表找入口

文章转载自http://blog.sina.com.cn/s/blog_4705a6e10100tkmq.html单链表的问题在面试考试等等等等中频频上镜,大有赶上凤姐超越芙蓉之势。假若有一个蛋疼的程序猿把单链表的末尾结点的next指针指向了单链表中一个随机的结点上,那么我们经常写的一个循环while(p)或者while(p->next)就可以父传子子传孙子子孙孙无穷尽了。 话说怎么判断单

2017-08-18 15:21:45 224

转载 ARM下的位置无关和相关码

本文转载自http://www.cnblogs.com/mylinux/p/5577472.html为什么需要位置无关码?  见 :  U-BOOT详解(什么是《编译地址》?什么是《运行地址》?)  http://bbs.21ic.com/forum.php?mod=viewthread&tid=857037&typeid=114      ARM位置无关代码设计规范 

2017-08-12 13:12:20 350

转载 linux下lds链接脚本详解

转载自:http://linux.chinaunix.net/techdoc/beginner/2009/08/12/1129972.shtml一、 概论每一个链接过程都由链接脚本(linker script, 一般以lds作为文件的后缀名)控制. 链接脚本主要用于规定如何把输入文件内的section放入输出文件内, 并控制输出文件内各部分在程序地址空间内的布局. 但你也可以用连接

2017-08-10 23:08:05 515

转载 多线程之原子锁

本文转载自http://www.cnblogs.com/kuliuheng/p/4064505.html,多谢奉献!在《多线程编程之数据访问互斥》一文中简单介绍了原子锁,这里再详细说一下原子锁的概念和用途。(1)简单数据操作  如果在一个多线程环境下对某个变量进行简单数学运算或者逻辑运算,那么就应该使用原子锁操作。因为,使用临界区、互斥量等线程互斥方式将涉及到很多操作系统调用和函数

2017-08-10 22:44:52 436

转载 自旋锁

转载自http://www.cnblogs.com/kuliuheng/p/4064680.html谢谢奉献!一、什么是自旋锁  一直以为自旋锁也是用于多线程互斥的一种锁,原来不是!  自旋锁是专为防止多处理器并发(实现保护共享资源)而引入的一种锁机制。自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,

2017-08-10 22:09:07 575

原创 UBOOT主makefile流程分析

自己整理的,适用于九鼎创展的x210开发板,九鼎自己移植的UBOOT。

2017-08-05 13:49:56 291

转载 C语言中可变参数函数实现原理

作者:cpoint出处:http://www.cnblogs.com/cpoint/作者原文博客地址:http://www.cnblogs.com/cpoint/p/3368993.html非常感谢作者的无私奉献!C函数调用的栈结构 可变参数函数的实现与函数调用的栈结构密切相关,正常情况下C的函数参数入栈规则为__stdcall, 它是从右到左的,即函数中的最右

2017-08-03 15:00:00 266

转载 数据结构杂谈

常用的时间复杂度所耗费的时间从小到大依次是:推导大O阶的步骤:1.用常数1取代运行时间中的所有加法常数; 2.在修改后的运行次数函数中,只保留最高阶项; 3.如果最高阶项存在且不是1,则去除与这个项相乘的常数。线性表顺序存储结构#define MAXSIZE 20 //存储空间初始分配量typedef int ElemType; typ

2017-07-23 21:54:49 198

转载 s5pv210从存储设备加载代码到DDR

建议先看《[project X] tiny210(s5pv210)上电启动流程(BL0-BL2)》,根据例子了解一下上电之后的BL0\BL1\BL2阶段,以及各个阶段的运行位置、功能。一、说明1、疑问前面文章中《[uboot] (第三章)uboot流程——uboot-spl代码流程》中,最后uboot-spl的操作是调用board_init_f了,在board_init_f

2017-07-08 21:05:59 746

转载 FP寄存器

理论上来说,ARM的15个通用寄存器是通用的,但实际上并非如此,特别是在过程调用的过程中。PCS(Procedure Call Standard for Arm architecture)就定义了过程调用中,寄存器的特殊用途。Role in the procedure call standardr15 PC The Program Counter.r14 L

2017-07-08 20:05:27 2239

转载 emwin移植

emwin是续开源uc/GUI 3.98之后的不开源版本,所以它们的API函数几乎相同,只是emwin作了很多改进,增加了很多新功能,并且已经有很多免费的版本支持于ST、NXP等大公司的芯片上,它的移植接口也作了很大的改进,如果有了以前开源版本的移植,移植emwin不在话下,本文主要讲述移植到NXP的LPC1788上。1、不开源的emwin其实很简单,我们可以从NXP的官方得到,加载到MD

2017-07-04 21:41:59 1959

转载 线程通信

线程间通信机制:线程是一种轻量级的进程。进程的通信机制主要包括无名管道、有名管道、消息队列、信号量、共享内存以及信号等。这些机制都是由linux内核来维护的,实现起来都比较复杂,而且占用大量的系统资源。线程间的通信机制实现起来则相对简单,主要包括互斥锁、条件变量、读写锁和线程信号等。本文会对以上所涉及的线程间的通信机制一一展开。互斥锁通信机制:

2017-06-27 00:01:56 270

转载 LRC纵向冗余校验

1、LRC校验 LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。 LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容。 它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可。下面是它对应的代码: BYTE

2017-06-17 21:35:06 3632

转载 CRC循环冗余校验

CRC校验原理 CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实很简单的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一

2017-06-17 20:02:43 338

转载 ARM三级流水线

从上图中我们看到CPU内部有3个主要组成部分:指令寄存器,指令译码器,指令执行单元(包括ALU和通用寄存器组)。 CPU在执行1条指令的时候,主要有3个步骤:取指(将指令从内存或指令cache中取入指令寄存器);译码(指令译码器对指令寄存器中的指令进行译码操作,从而辨识出该指令是要执行add,或是sub,或是其它操作,从而产生各种时序控制信号);执行(指令执行单元根据译码的结果进行运算并保存结果)

2017-05-28 11:00:51 11311 4

转载 ARM-MMU详解

一、MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多称

2017-05-23 01:15:02 1689 1

转载 $(origin variable)详解

先说一下origin语法 origin函数不像其它函数。他并不直接操作变量的值,只是告诉你这个变量是从哪里来的(好好理解这句话)? 其语法是: (originvariable)注意这里是变量的名字,不是引用,所以不要使用“(origin variable) 注意这里是变量的名字,不是引用,所以不要使用“”字符。origin函数会以返回值告诉你这个变量的“出生情况”(这个变量从哪里来的?

2017-05-19 13:05:07 884

转载 揭秘 typedef四用途与两陷阱

typedef用来声明一个别名,typedef后面的语法,是一个声明。本来笔者以为这里不会产生什么误解的,但结果却出乎意料,产生误解的人不在少数。罪魁祸首又是那些害人的教材。在这些教材中介绍typedef的时候通常会写出如下形式: typedef int PARA; 这种形式跟#define int PARA几乎一样,如前面几章所述,这些教材的宗旨是由浅入深,但实际做出来的行为却是以偏盖全。的确,这

2017-05-07 17:02:44 205

原创 应用层协议

网页浏览 (HTTP,SSL)HTTP:超文本传输协议,80端口,如果是HTTPS则为443端口。文件传输 (FTP,TFTP)FTP:控制通道21端口,数据通道20端口。 TFTP常用于传输小文件,69端口(UDP协议)。E-Mail(SMTP,POP3)SMTP工作在服务器端,常用于邮件的发送部分,25端口。 POP3工作在服务器端,常用于邮件的接收部分,110端口。远程登录(Telnet,

2017-05-03 01:06:49 294

原创 传输层-UDP协议详解

无连接不可靠。 常用于用于报文短或者不关心可靠性的场景,视频领域常用。 长度指UDP数据报长度即UDP首部长度+数据部分。同时UDP长度还等于IP长度-IP首部长度。 校验和UDP不是必须存在的。UDP的责任创建进程间通信(由端口号完成)。有限的差错控制,出现差错悄悄丢弃报文分组。关于端口

2017-05-03 00:53:56 283

原创 传输层-TCP握手释放及确认机制

握手 第一行:客户机发送SYN同步信号及随机序号的数据报,SYN是确认信息,有SYN就必有回复。 第二行:服务器发送SYN+ACK表示收到了之前的信息,发SEQ=y也是一个随机序号的数据报,发ACK = x +1表示服务器想让客户机下一次发送的数据报序号为x+1。rwnd为窗口值,告诉客户机自己能接收多少字节。 第三行:ACK表示对服务器的确认。SEQ=x+1表示这次发送的数据报序号为x+1。

2017-05-03 00:42:09 305

原创 传输层-TCP详解

面向连接通讯双方交换数据之前必须建立连接(UDP不用)可靠的多种确保可靠性的机制(UDP不可靠)字节流服务8bit为最小单位构成的字节流(UDP发送的数据报都是独立的,因此不是面向流的协议)套接字地址TCP使用“连接”而不仅仅是端口作为最基本的抽象,同时将TCP连接的端点成为插口(socket),或套接字,套接口。 插口和端口、IP地址的关系是:插口 = IP地址 + 端口号 TCP逻辑通信图示

2017-05-02 23:53:43 961

原创 传输层

举例:写一封从北京到南京的信,要准确找到收信人除了写地址外还得写上门牌号,那么网络层对应地址(IP地址),传输层对应门牌号(端口号)。 应用程序产生应用进程,应用进程需要进程端口号,应用端口号提供相应服务。传输层作用分段及封装应用层送来的数据。分段是把应用层以字节为单位的数据几字节合成一个段,成为数据段或报文段,提高传输效率。 应用层传下的数据每一个字节都有一个随机的编号。 数据段也有序

2017-05-02 21:27:11 378

转载 页表 段表

页面与页表 与 段 此博文包含图片 (2013-03-08 16:06:26)转载▼ 分类: arm学习 一 页面与页表 1 页面 分页存储管理是将作业的逻辑地址划分为一系列同等大小的部分,称为页。并为各页加以编号,每个作业的页的编号都是从0开始的。与之类似,把可用的物理内存也划分为同样大小的连续的部分,称为块或页框。同样为块也进行标号,从0#开始。在为进程分配内存空间时,以页为

2017-05-02 12:44:50 6419

NB-IoT消息订阅处理(Java)

此部分代码实现了将IoT平台推送过来的数据接及处理,移动端呈现使用了微信消息推送,所以代码里将数据处理后推送到了微信服务器。代码实现使用了Jersey框架。

2018-06-22

NB-IoT设备端驱动代码

针对NB-IoT的BC-95系列芯片开发,主控制器为STM32F103RCT6。

2018-06-22

OceanConnect开发入门指南

华为NB-IOT物联网平台开发入门指南,对新手很有帮助。

2018-03-10

OceanConnect API

华为NB-IOT物联网平台北向开发API参考,对NB平台北向开发很关键

2018-03-10

空空如也

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

TA关注的人

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