- 博客(63)
- 资源 (12)
- 收藏
- 关注
原创 从pfn_to_page/page_to_pfn看linux SPARSEMEM内存模型(转载)
从pfn_to_page/page_to_pfn看linux SPARSEMEM内存模型。
2023-03-26 22:23:13
120
原创 sg3_utils arm64 静态编译
在进行ufs等scsi device测试时,需要进行power mode切换等测试,因此需要有一个简单地工具集来向scsi device(ufs接口)发送scsi命令,比如 scsi reset命令等。在网上调研后发现sg3_utils是一个比较全面的工具。 但是sg3_utils需要在android上运行还要依赖很多动态库。因此本文介绍一种方法,将sg3_utils编译为静态可执行程序,然后adb push到arm64设备端,无需依赖任何so即可执行。
2023-02-12 21:08:32
926
转载 linux device irq wakeup机制
本文介绍了linux 休眠和唤醒时,对device irq的设置和处理。1.set_irq_wake函数不会导致执行interrupt handler,而是只能把系统唤醒;2.IRQ_NO_SUSPEND可以在任何时候唤醒系统,并执行interrupt handler3.对于不是唤醒源的设备,在suspend_noirq阶段中,会将device irq disable掉。
2022-09-13 11:00:45
798
原创 STM32L051 低功耗特性分析
STM32L051 低功耗特性分析32MHz 2.7mW功耗low power sleep mode大概只有4.5uAstop mode大概 0.4uAstop mode能比low power sleep mode功耗低一个数量级。这个时候是把core还有大部分clk都关闭了stop mode with rtc 可以定时通过lptimer定时唤醒,执行中断or reumse程序执行。可以满足电池业务需求,同时把功耗降低一个等级低功耗进入退出流程,通过查看stm32...
2022-01-16 21:30:27
2357
转载 自旋锁使用场景和实现分析(转载)
自旋锁最近看到的一篇文章,觉得写的很清晰,通过场景应用解答了我对自旋锁使用的一些疑问,推荐给大家。引入问题:(1)如果cpu0持有锁,cpu1一直不释放锁怎么办?(2)什么场景下必须要用自旋锁,而不能用互斥量?(3)互斥量或者自旋锁,他们会被多个进程使用,那么它属于进程的一部分?内核当发生访问资源冲突的时候,可以有两种锁的解决方案选择:一个是原地等待 一个是挂起当前进程,调度其他进程执行(睡眠)Spinlock 是内核中提供的一种比较常见的锁机制,自旋锁是“原地等待”的方
2021-07-05 20:28:14
3421
原创 Linux 进程用户态,内核态的区别,可抢占内核
关键问题:1.进程的状态,内核态和用户态的区别2.可抢占内核和飞可抢占内核的区别3.spinlock在单核 多核,可抢占/非可抢占内核中的区别;疑问:linux用户程序本身不久支持调度的吗,既然支持调度,不就是支持抢占吗?疑问:spinlock和mutex都可以用于多核系统,那为什么必须要spinlock呢?如果使用spinlock的线程都被锁定到某个core,那不就会导致死锁?linux系统在完成中断/异常事件的处理之后,决定是否应该执行schedule函数。
2021-07-05 16:14:31
289
原创 arm trustzone 学习记录
关键问题如何构建一个可信任环境(trust execution environemnt) 安全环境和非安全环境对资源访问的区别(secure timer interrupt memory etc.) 如何保证安全启动(secure boot, root of trust) 如何设计一套安全+非安全共存的软件框架和机制we...
2020-06-21 19:46:33
556
原创 ARM C程序 数据对齐访问问题
C或者C++等语言中会涉及到内存操作,嵌入式处理器中对数据的访问,需要遵循对齐原则,要求对齐的目的是为了提高数据的获取效率,举个例子,如果也给32位数字是4字节对的,cpu一条指令即可完成数据复制,如果一个32位数字是非4字节对齐的,那么cpu需要至少3条指令完成一个4字节数据的复制,如此一来降低了内存数据访问的效率。以实际遇到的问题为例char a[10] = {0};定义一个int...
2019-09-22 23:19:54
445
原创 micrium ucprobe使用指南
1、关于ucprobeUcprobe是micrium公司推出的嵌入式系统调试工具,利用ucprobe,l 可以实现对程序运行状态的实时监控,用户可以利用ucprobe构建可视化的系统监控平台l 具有示波器,文本框,按钮,滑动条等常见控件l 支持jlink,tcp/ip,rs232,usb等调试接口,使用jlink时,无需对原有代码做任何改动,使用其他通信方式时,需要在embe
2016-07-30 20:01:35
10979
原创 fork函数详解
fork函数是Unix like系统都提供的有关操作系统进程处理的一个api。fork函数可以获得一个与父进程一模一样的子进程,子进程获得父进程的数据空间和堆栈的一个副本。换句话说,二者并不共享内存,而是独立执行。fork函数的最大特点是父进程的一次调用,可以有两个返回,一个是父进程中返回子进程的id,一个是在子进程中返回0,还有一种情况是fork错误:原因一是进程超过最大值,原因二是内存
2015-01-19 23:01:29
1483
原创 java客户端服务器编程示例
初次接触C/S模型编程,编写了一个简单的客户端/服务器 Socket编程来实现一些基本效果。1、服务器端代码:import java.io.DataInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.
2015-01-17 14:30:50
657
原创 stm32+mpu6050+四元数解算
程序执行过程(1)读取数据,得到ax,ay,az,gx,gy,gz(2)四元数解算,得到q1,q2,q3,q4(3)计算欧拉角,得到pitch roll yaw(4)串口输出(5)误差处理:陀螺仪零值误差,上电后静止采样多次取平均值。
2014-12-27 23:19:41
11105
2
原创 Android蓝牙串口程序开发
本文主要介绍了针对android的蓝牙串口上位机开发。一、帧定义android客户端按照一定的数据帧格式通过蓝牙串口发送数据到连接到MCU的蓝牙从机,MCU接收到数据后,按照帧格式的定义,接收数据帧,并解析数据帧,得到需要的数据。android客户端按照以下帧格式来发送和接收数据。1.1客户端发送的数据帧内容帧校验的和是从帧长开始到帧
2014-12-21 13:20:35
3486
1
转载 Android子线程更新UI主线程方法之Handler
Android子线程更新UI主线程方法之Handler背景:我们开发应用程序的时候,处于线程安全的原因子线程通常是不能直接更新主线程(UI线程)中的UI元素的,那么在Android开发中有几种方法解决这个问题,其中方法之一就是利用Handler处理的。 下面说下有关Handler相关的知识。多线程一些基础知识回顾:在介绍Handler类相关知识之前,我们
2014-12-01 23:15:48
757
转载 Android之Handler用法总结
Android之Handler用法总结方法一:(java习惯,在android平台开发时这样是不行的,因为它违背了单线程模型)刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread( new Runnable() { public void run() { myView.i
2014-12-01 22:47:58
464
转载 Thread中的join方法
一、使用方式。join是Thread类的一个方法,启动线程后直接调用,例如:?1Thread t = newAThread(); t.start(); t.join();二、为什么要用join()方法在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,
2014-11-21 14:29:57
640
转载 Git 常用命令
Git 常用命令 Git 是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势。 本来想着只把最有用、最常用的 Git 命令记下来,但是总觉得这个也挺有用、那个也用得着,结果越记越多。这个是使用MindPaper、xMindd绘制的。
2014-11-19 11:03:45
403
转载 android中那些不得不重写的函数
1. onCreate, onStart, onResume, onPause, onStop, onRestart, onDestroy如果连这7个方法都不清楚的话,那么就该从头开始看Android了。下图是Activity的生命周期,加深记忆用:2. onNewIntent在AndroidManifest.xml将某activity的android:
2014-11-18 10:00:12
783
转载 Android Intent使用
在Android应用中实现activity之间的跳转使用intent机制。 本例子简单地简绍如何利用intent使程序由MainActivity跳转到另一个OtherActivity实现单一参数值,在返回MainActivity时利用Bundle进行批量回传。一、设计界面 1、MainActivity布局文件 打开res/layout/activity_mai
2014-11-07 15:17:38
448
转载 Django入门:第一个Django应用
对Django这个 框架 感 兴趣 好久了,却一直懒于 研究 学习 ,现在跟随官网的 教程 跑一遍,学学Django同时也 继续 学学 Python 。 在开始之前, 我们 先把Python和Django这个框架安装好。 官网: https://www.djangoproject.com/ 下载 :http://www.djangoproject. com /downloa
2014-11-03 09:59:46
576
转载 嵌入式经典面试题
C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答
2014-11-01 21:37:42
444
转载 gdb十分钟教程
本文写给主要工作在Windows操作系统下而又需要开发一些跨平台软件的程序员朋友,以及程序爱好者。GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。 命令 解释 示例file 加载被调试的
2014-10-25 10:05:25
376
转载 常用Linux程序总结
Shell: bash。它结合了 csh 和 ksh 的优点,并且有 readline 功能,你可以随意绑定自己的键盘。 编辑器: VIM, Emacs。 程序开发: GCC, make, ld, Scheme48, j2sdk, Perl, Python, Tcl/Tk ... 论文,幻灯工具:LaTeX, ConTeXt 绘图工具:MetaPost。这个语言太强了,以至于我只用
2014-10-24 16:05:09
407
转载 可重入和不可重入
重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等的中断的时候会发生重入的现象。一般浮点运算都是由专门的硬件来完成,举个例子假设有个硬件寄存器名字叫做FLOAT,用来计算和存放浮点数的中间运算结果假设有这么个函数void fun(){//...这个函数对FLOAT寄存器进行操作}假如第一次执行,有个对浮点数操作运算的结果临时存在FLOAT寄存
2014-10-24 11:31:19
412
转载 从一个笔试题看C语言中float向double的提升问题
从一个笔试题看C语言中float向double的提升问题——lvyilong316首先看一段来自一个笔试题的程序段:float f=1.1; double d=1.1; cout这段代码输出0,那么为什么同为1.1的doble和float不相等呢?我们知道float和double比较的时候后发生类型提升,也就是float会提升为double。我们
2014-10-23 23:34:59
622
转载 轻松搞定二叉树
版权所有,转载请注明出处,谢谢!http://blog.csdn.net/walkinginthewind/article/details/7518888树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树
2014-10-21 16:29:38
408
转载 内存到底分几个区(转)
下面有几种网上的理解,我整理一下:一: 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由os回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储
2014-10-21 09:40:41
849
转载 [转载]VC++四种启动其它程序的方法
四种启动其它程序的方法有时我们的程序需要启动其它程序,可能是为了利用它已有的功能,也可能是为了达到某种需要。那么怎样来启动我们需要的程序呢?我暂时知道有4种方法:1、调用API: int system( const char *command ); 你可以传入一命令,启动某个程序。如"ping www.vczx.com", "YourExe"等等 不过这里有几点要值得注
2014-10-18 20:37:36
1357
原创 stm32 IAP程序烧写方案
最近做了一个飞行器,感觉使用jlink仿真器下载更新程序好复杂,每次都需要把一个大块头(Jlink)挂到飞行器上,操作极为不便,网上查了一下,stm32的程序烧写方式一共有三种(1)使用Jlink,JTAG等仿真器;这种方式简单快捷(2)使用系统自带bootloader,ISP,这种方式需要更改stm32boot0 boot1引脚,以更改启动方式。(3)使用ISP,即 in appli
2014-10-16 21:42:32
5457
3
原创 STM32 CLK configuration
AHB CLK = SYSCLK;APB1 CLK = SYSCLK/2;APB2 CLK = SYSCLK;PLL
2014-09-10 20:45:11
997
转载 堆、栈增长方向和大端、小端问题
栈增长方向与大端/小端问题栈增长和大端/小端问题是和CPU相关的两个问题。在内存管理中,与栈对应是堆。对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方式是向下的,是向着内存地址减小的方向增长。在内存中,“堆”和“栈”共用全部的自由空间,只不过各自的起始地址和增长方向不同,它们之间并没有一个固定的界限,如果在运行时,“堆”和 “栈”增长到发生了相互覆
2014-07-14 14:47:06
831
转载 C++:STL标准入门汇总
第一部分:(参考百度百科) 一、STL简介STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。 STL的代码从广义
2014-06-18 22:24:49
494
sg3-utils 静态编译包
2023-02-12
arm平台根据栈进行backtrace的方法.docx
2020-10-27
android 蓝牙串口客户端
2014-12-22
银行排号系统设计 C语言实现
2014-06-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人