自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(147)
  • 收藏
  • 关注

原创 linux 系统基础

linux 基础使用

2022-10-05 11:17:01 294 1

原创 gd32_flash

1:gd32f305_flash:code_area:CPU操作零等待。(取值和读数据)data_area:这部分区域操作时间较长。据说:内部flash使用的是串行flash,gd就是做flash出身的, gd32单片机内部的flash就是gd自己的flash,使用sip封装,集成到单片机内部的,所以很慢。为了解决慢的问题,code_area就是上电时搬运到ram里面运行。...

2022-10-04 21:55:59 964

原创 linux开发 环境搭建

WSL linux环境搭建

2022-10-04 15:24:07 180

原创 大疆校招和社招 各岗位内推码--更新20220717

内推码定期更新, 内推码通用于各个岗位,通用于校招和社招。薪资待遇还可以,双休,10105的工作节奏。内推码一码一人, 如果发现用过了,换一个即可。

2022-07-17 22:04:49 1151

原创 PLC电力载波通讯

PLC电力载波通讯

2022-07-17 15:31:06 764

原创 cortex M3/4 内部总线

1:AHB总线的特点cortex M3/4内部总线特点:1: 具有三条独立的AHB总线,ICODE_BUS、DCODE_BUS、system_BUS。ICODE_BUS:DCODE_BUS:system_BUS:引申问题:1: DMA 搬运数据时,是否会阻塞CPU取值或取数据?正常情况下,CPU取从flash指令,使用的ICODE总线,而DMA是system_bus的一个master设备。所以DMA工作是不会阻塞CPU取值指令;DMA搬运数据时,如果CPU需要操作(W/R opera

2022-04-23 20:51:48 1557

原创 计算机基本概念--超标量,多发射

多发射:概念:是指存在多条流水线进行指令的译码, 取指令后,可以同时发射多条指令到不同的流水线进行译码。(和执行?)超标量:超标量是一条流水线中,存在多个执行部件,可以在上一条指令没有执行完成时,执行下一条指令。 即乱序执行。可以针对没有前后顺序关系的指令进行并行执行;超标量是对程序员透明的,是指令级别的并行;超标量是否意味着需要多条流水线?(好像不需要,如果有,好像最好?)超线程:概念:处理器可以同时执行多个指令,来自不同的线程;超线程是线程级别的并行,需要程序员显示的编写超.

2022-01-16 19:10:14 3056 1

原创 MMU 内存管理单元

MMU 内存管理单元作用:讲CPU发出的访存地址(虚拟地址)转换为总线上的物理地址。基本构成:页表TBL的作用:缓存最近访问的页表项;cache:linux相关基本知识Linux的虚拟地址划分:1G用于内核,3G用于用户;Linux进程的页表:页表的前面1G内容相同,即所有进程的1G内存都映射到相同的物理地址上。驱动如果需要访问一个外设的绝对物理地址:需要使用ioremap函数进行映射,该函数会修改页表,将该物理地址映射到对应的虚拟地址上面。...

2022-01-08 17:34:28 567

原创 文章格式模板

前言 :本人主张用通俗、简短的语言来描述一个知识点。将知识用自己的话表达出来,知识才真正的被自己吸收理解。0:xxx是什么1:xxx有什么特点List item2:xxx怎么使用3:xxx常见的错误理解或bug4:xxx底层原理...

2021-10-17 16:15:47 91

原创 freertos 关中断和临界区的关系

freertos 临界区基础概念:临界区:保证一段代码操作的原子性。原子性:即一段代码不能被打断运行,直到退出改代码段。用于保证资源变量被多个线程或代码段访问时产生的冲突。**实现:**在单核系统中,可以使用关中断来实现原子操作。freertos中的实现:进入临界区#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI()#define portENABLE_INTERRUPTS() vPortSetBASEPRI( 0 )voi

2021-07-04 16:07:15 788

原创 freertos源码解析-5调度器控制

第四章讲了调度器和任务切换调度器和任务切换为了保证操作系统和任务安全运行,有时候需要void vTaskSuspendAll( void ){ /* A critical section is not required as the variable is of type BaseType_t. Please read Richard Barry's reply in the following link to a post in the FreeRTOS support forum bef

2020-05-20 14:55:20 232

原创 freertos源码解析-4调度器和任务切换

调度器调度器就是使用相关的调度算法来选择相关任务运行的代码。基本功能:(1)调度器可以区分就绪态任务和挂起任务;(2)调度器可以选择就绪态中的一个任务,然后激活它;(3)不同调度器之间最大的区别就是如何分配就绪态任务间的完成时间。抢占式调度器:(1)每个任务都有不同的优先级;(2)任务一直运行到被更高优先级任务抢占或者遇到阻塞式API函数。【单纯的抢占式调度没有时间片的概念,最高优先级的任务就绪,立马抢占,不用等到下一个滴答时间中断来临】时间片调度:(1)每个任务的优先级都相同,任务会运行固定的时间

2020-05-19 19:43:53 400

原创 freertos源码解析-3任务和任务创建

任务void vATaskFunction( void *pvParameters ){ for( ;; ) { /*-- 应用程序代码放在这里. --*/ }/*正常情况下任务函数是一个死循环,不会退出*/ vTaskDelete( NULL );/*如果任务完成,需要退出,需要删除该任务,vATaskFunction没有返回值*/}任务状态运行:任务占用CPU,单核处理器任意时刻只有一个任务在运行。就绪:任务处于准备随时可以运行的状态,等待

2020-05-19 16:40:33 349

原创 freertos源码解析-2内存管理

内存管理freertos支持动态分配内存和静态分配内存Freertos的内存分配是在portable层中实现,与内核实现分开。目录:Source/Portable/MemMang静态内存管理特点对象可以分配在特定的内存地址处;最大内存占用可以在链接时确定,而不是运行时;用户不需要关心内存分配失败的处理方式;允许在不使用动态内存分配的地方使用RTOS。定义宏 configSUPPORT_STATIC_ALLOCATION = 1 使用静态内存分配。既可以使用以下函数,里面使用的内存

2020-05-19 15:02:47 258

原创 freertos源码解析-0准备工作和疑问

freertos 准备工作和思考freertos操作系统freertos操作系统:可以理解为一个大程序,这个大程序里面有很多任务(函数),这个大程序会按照优先级或事件发生的先后来控制各个任务有条不紊的运行。类似于一个大循环,里面有很多子函数,但是子函数的运行不是按照编程的先后顺序运行,而是由调度器控制,来决定哪个任务运行,哪个任务阻塞(休息)。源码分析建议首先对操作系统有个基本认识,知道堆、栈、任务、调度、内存管理等基本概念。建议看操作系统相关书籍。如果是有学习过其他操作系统经验的,可以直接上手fr

2020-05-19 09:23:38 341

原创 freertos源码解析-1启动过程分析

freertos启动过程分析启动过程流程图启动过程完成的事情1.创建必要的任务:空闲任务和软件定时器任务(后者可选)2.初始化系统的全局变量3.初始化systick中断 PendSV中断 SVC中断4.启动调度器5.触发SVC中断, 启动第一个任务代码分析...

2020-05-19 08:42:01 1548 1

原创 20190820 大疆嵌入式 一面 面试经验

一面自我介绍内核移植的具体细节【非常有深度】DDR3的频率,带宽,通道,容量等等nor flash和nand flash的对比虚拟地址和物理地址的转换过程,几级页表,页表基地址,等等ARM处理器的核心数,工作频率,位数等等mmap()函数的参数ioremap()函数具体干了什么事运行地址、加载地址、链接地址等等i2c驱动,非常细,怎么开始、怎么结束、有哪些数......

2020-01-01 09:34:10 2833 1

原创 金融类知识

1、穷爸爸富爸爸2、聪明的投资者3、怎样选找成长股4、

2019-09-23 08:40:01 176

原创 Linux操作系统--进程调度

1、Linux的CFS调度器并没有直接分配时间片到进程,而是将处理器的使用比例划分给进程。在大多数操作系统中,是否将一个进程立刻投入运行完全取决于:进程优先级和是否有时间片。CFS调度器抢占时机取决于:可运行程序消耗了多少处理器使用比。2、调度器类:每个调度器都有一个优先级,都有0个或若干个可执行进程。基础调度器会按照优先级遍历调度器类,选择一个有可执行进程的最高优先级的类,再从此类中选择可执........................

2019-08-15 20:45:57 355

转载 Linux read系统调用的处理过程

转载:https://www.cnblogs.com/tcicy/p/8454740.htmlRead 系统调用在用户空间中的处理过程当调用发生时,库函数在保存 read 系统调用号以及参数后,陷入 0x80 中断。这时库函数工作结束。Read 系统调用在用户空间中的处理也就完成了。Read 系统调用在核心空间中的处理过程0x80 中断处理程序接管执行后,先检察其系统调用号,然后根...

2019-08-12 15:45:56 912

原创 BootLoader基本作用的功能

1、初始化arm的异常向量表,设置异常向量表的地址(一般是0x00000000)2、设置处理器模式,进入svc模式,关闭irq frq3、配置CP15协处理器,关闭icache 关掉mmu和TLB4、板子初始化:DDR初始化 时钟系统初始化 从启动设备把操作系统、设备树、虚拟文件系统加载到DDR中 初始化串口5、设置参数并跳转到操作系统...

2019-08-01 09:24:53 1071

原创 ARM体系结构--第九章--异常中断处理

注:本文资料全部来源于网络或书籍,同时加上个人理解。若有侵权,告知即删。若有错误,留言商讨。异常 模式 向量地址 优先级 含义 复位 SVC 0x00 1 复位引脚有效的时候,两种情况:系统加电复位、软复位 未定义指令 未定义指令 0x04 6 处理器认为当前指令未定义的时候,产生指令异常。 软中断(SWI)...

2019-07-28 16:36:01 550

原创 浙江大华--算法移植优化工程师

一面(电话面):自我介绍、项目介绍项目中遇到的困难,怎么解决的4412芯片内部架构驱动写了哪些,具体讲一下带宽等概念二面(视频面 改 电话面):树的基本知识,项目中哪里用到树,树有哪些特性堆排序算法Exynos4412芯片的硬件资源,内存,主频Linux操作系统移植主要工作,适配哪些硬件,系统移植后占用了多少内存Linux内核开发哪些调试手段QT...

2019-07-27 15:31:01 2110 2

原创 tty consloe pty pts

注:本文资料全部来源于网络或书籍,同时加上个人理解。若有侵权,告知即删。若有错误,留言商讨。/dev目录下面一大堆tty*的字符设备文件,今天来理一理。虚拟控制台or虚拟终端:【ctrl+atl+f1~f6切换】,tty1 tty2等串口终端(ttyS*):系统中的串口设备的设备文件。是/dev/tts/0(或/dev/ttyS0), /dev/tts/1(或/dev/ttyS1)等...

2019-07-25 10:57:24 338

原创 Linux时钟系统

注:本文资料全部来源于网络或书籍,同时加上个人理解。若有侵权,告知即删。若有错误,留言商讨。实时时钟(RTC):X86体系结构下,RTC实时时钟在系统断电的时候使用备用电池继续运行,RTC能在IRQ8上周期的发出中断,频率在2~8291HZ之间,linux只是用RTC在启动的时候来获取时间和日期。不过也可以使用/dev/rtc来对RTC设备编程修改其值。时间戳计数器(TSC):Pe...

2019-07-17 16:11:00 649

原创 秋招记录

第一志愿:大疆、OPPO、海康威视、华为第二志愿:字节跳动、深信服、腾讯、百度、阿里、华为、京东、网易,金山,360,拼多多、美团、科大讯、携程、去哪儿、搜狗、腾讯系、阿里系、迅雷、小米 中天微、大华、海康、华为、顺丰、大疆、新华三、OPPO、vivo 美的、格力、传统电器公司、吉利、华泰、比亚迪时间 公司 简历扔垃圾桶 止于一面 止于二面 止于终面 ...

2019-07-17 13:28:35 1187

原创 ARM内核架构和SOC架构

注:本文资料全部来源于网络或书籍,同时加上个人理解。若有侵权,告知即删。若有错误,留言商讨。0、ARM处理器功能扩展和架构演变1、cortex A9 (ARMv7指令集)-----传说中的CPU2、Exynos4412芯片框图-----传说中的SOC...

2019-07-17 13:13:22 7769

原创 proc文件系统

注:本文资料全部来源于网络或书籍,同时加上个人理解。若有侵权,告知即删。若有错误,留言商讨。 Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即:虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内...

2019-07-15 10:30:58 96

原创 Linux内核错误panic oops

注:本文资料全部来源于网络或书籍,同时加上个人理解。若有侵权,告知即删。若有错误,留言商讨。1、panic当内核遇到严重错误的时候,内核panic,立马崩溃。死机。2、oopsoops是内核遇到错误时发出的提示“声音”,oops有时候会触发panic,有时候不会,而是直接杀死当前进程,系统可以继续运行。比如说内核态下的段错误,当内核设置了panic_on_oops=1的时候,o...

2019-07-15 10:25:21 3635

原创 开发板使用--笔记--嵌入式Linux视频

实验6:设备注册注册在虚拟总线之上,平台设备中注册设备,然后编写驱动注册程序。注册方法:修改平台文件【/arch/arm/mach-exynos/mach-itop4412.c】,向平台文件中添加需要注册的设备结构体【platform_device】。系统启动时,平台设备自动注册该设备。实验7:驱动注册注册方法:编写platform_driver结构体,该结构体中的nam...

2019-07-12 17:23:02 557

原创 Linux i2c 驱动实例

主要的数据结构体:// include/linux/i2c.hstruct i2c_client { unsigned short flags; /* div., see below */ unsigned short addr; /* chip address - NOTE: 7bit */ /* addresses are stored in the */ ...

2019-07-12 08:22:35 600 1

原创 Linux设备驱动--platform虚拟总线

1、resource结构体:在内核中表示了一个设备使用的资源,描述一个具体的硬件。包括:在总线上的地址,资源名字等/* * Resources are tree-like, allowing * nesting etc.. */struct resource { resource_size_t start; /* 这段资源的起始 */ resource_size_t...

2019-07-12 08:22:14 157

原创 DMA(待续)

关于DMA:DMA获取总线控制权,可能修改内存。如果修改的内存在cache中映射了,那么存在cache数据和DRAM数据不一致。解决方法:最简单的:将DMA访问的内存禁止cache。 DMA本身不属于一种外设,只是外设和内存数据交互的一种方式。Linux下的DMA编程:对于ISA设备,使用DMA传输数据,必须使用内存的最低16MB的地址空间。【kmalloc 和 __get_fr...

2019-07-09 21:26:27 156

原创 Linux IO内存访问

注:本文资料全部来源于网络,同时加上个人理解。若有侵权,告知即删。若有错误,告知商讨。1、IO内存访问32位Linux系统,内核使用高端内存的vmalloc区来映射IO地址空间。具体地址可以自己定义。例如:三星4412提供的源码使用0xF6000000 至0xF6000000+96MB的内存空间映射IO端口的寄存器。2、内存和IO基础知识内核访问外设IO内存之前,先要将...

2019-07-09 21:13:50 305

原创 Linux i2c总线驱动框架

注:本文资料全部来源于网络,同时加上个人理解。若有侵权,告知即删。若有错误,告知商讨。1、Linux系统的IIC总线体系结构主要包括:IIC核心、IIC总线驱动、IIC设备驱动。IIC总线驱动:对应一个SOC的IIC控制器 IIC设备驱动:对应一个具体的IIC外设 IIC核心:具体的外设挂载在具体的IIC控制器上,因此IIC设备驱动需要和IIC总线驱动对应。因此需要IIC核心mat...

2019-07-09 15:10:23 278

原创 uboot简介

一般调试嵌入式开发板喜欢选择 利用 TFTP 传送 内核与 设备树, 利用 nfs 加载根文件系统。uboot 环境变量 设置如下:bootargs=root=/dev/nfs rw nfsroot=192.168.1.4:/exports/rfs ip=192.168.1.200 video=HDMI-A-2:1280x800Bootcmd tftp 0x4808000...

2019-07-08 19:00:18 702

原创 Linux内核启动--汇编部分

版本:Linux3.0

2019-07-08 18:38:28 576

原创 设备树--简介

引入设备树的原因:Linux3.1之前的版本,对于一般的ARM平台的设备,板级信息一般存放在/arch/arm/mach-**目录下。这些代码存在大量重复。避免各个厂商代码的重复,加速linux内核的bsp的开发。编译一个镜像可以支持多个不同设备,只需要编译对应的设备树并打包就可以。设备树:一种描述板子硬件信息的数据结构,设备树源文件存放在/arch/arm/boot/dts/***.dt...

2019-07-08 18:37:29 943

原创 Linux内核启动 --- __create_page_tables

ARM内核的做法首先建立开启MMU函数turn_mmu_on所在页的一个平映射,同时创建内核起始地址的线性映射,然后开启MMU,完成turn_mmu_on函数物理运行地址到虚拟运行地址的一个无缝衔接,之后在进行链接地址的跳转。【平映射的作用:在这一段代码,既可以用虚拟地址访问内存,也可以用实际的物理地址作为虚拟地址访问物理内存,应为这两段虚拟地址都映射到了内核代码】原文:https://...

2019-07-08 16:57:58 244

原创 Linux内核移植流程 应该怎么开始着手

1、首先要找到该处理器核的芯片手册,不像SOC芯片手册会介绍SOC的外设资源,处理器核芯片手册介绍的是处理器内部逻辑以及特性,手册需要重点关注的几点有:(1)地址空间管理,包括上电取指地址(一般存储在SOC的内部存储flash),MMU如何配置使用等(2)寄存器定义,包括通用寄存器,特殊功能寄存器(3)中断异常的定义,异常向量表如何定义和使用(4)cache管理(5)处理器核r...

2019-07-08 15:21:55 197

空空如也

空空如也

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

TA关注的人

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