自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (2)
  • 收藏
  • 关注

原创 FreeRTOS

FreeRTOS学习笔记

2023-08-12 17:29:14 583

原创 Motion Matching

新一代的动画技术Motion Matching针对状态机及动作融合的缺陷,拥有使用简单、灵活的特点,并且能实现丰富的动作效果。同时也存在响应、耗时等其他方面的缺陷。更多的游戏从业者也在这个方向上去探索,未来会有更多的游戏应用此技术。

2022-05-26 11:15:08 1582 1

原创 Learned Motion Matching

运动匹配是一种简单而强大的游戏角色动画制作方式。与其他方法相比,一旦你有了基本的设置,它就不需要太多的手动工作:不需要在图形中构建剪辑,仔细剪切或同步它们,或者明确地在状态之间创建新的转换。但是,运动匹配在与大量动作捕捉数据结合使用时效果最佳,所有这些数据都是有代价的:大内存使用量,系统增长越多,应用的情况就越多,这种情况只会变得更糟。在这里,我们提出了一个名为Learned Motion Match的问题的解决方案,它利用机器学习来大幅减少基于运动匹配的动画系统的内存使用量。

2022-05-16 11:10:02 2014 1

原创 K210(1)解决一些新上手出现的问题

K210 MAIX问题1:AttributeError: 'image' object has no attribute 'xxxx'问题2:ERR. NO_ MEM: memory not enough

2022-05-10 15:30:36 8691

原创 简说extern关键字

关键字extern的作用是在一个文件中引用一个变量或者一个函数引用同一个文件中的变量在编写代码的时候会出现一个变量在使用的时候,发现这个变量声明的位置在使用位置的后边,但是这个时候不想把声明位置给提前,导致程序出现变量未定义的错误,这个时候可以通过extern在使用之前对其进行声明,既可以使用该变量。例子:#include<stdio.h>void func();int main() { func(); //此时调用func函数在num声明之后 extern int num;

2020-09-03 11:33:47 135

原创 简说static关键字

今天在面试的时候面试官问到了static把我给问懵了,发现自己的知识储备真的不够。变量1、局部变量普通的局部变量储存在进程的栈空间,使用完之后会立即被释放,即在函数运行完毕之后其值变回消失。但是static变量在初始化的时候便会存入静态存储区中,就算没有赋初值也会默认设置为0,即使函数返回其值不会发生改变。在下一次进入到该函数的时候,定义static局变量的语句就等同于失效了,比如说static变量a = 1进入到函数中,执行语句static a = 0; 这样a的值还是保持为1,并不会初始化为0。

2020-09-03 10:46:12 239

原创 刷题长路(3):位运算

位运算1、数字范围按位与1、数字范围按位与题目描述给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。示例1输入: [5,7]输出: 4示例2输入: [0,1]输出: 0分析最简单的就是按照顺序从n到m进行叠加与运算如下代码所示。class Solution {public: int rangeBitwiseAnd(int m, int n) { int answer

2020-08-23 12:27:12 137 1

原创 算法(2):动态规划 【持续更新】

动态规划(英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。动态规划往往用于优化递归问题,例如斐波那契数列,如果运用递归的方式来求解会重复计算很多相同的子

2020-07-25 12:18:41 337

原创 刷题长路(2):简单错误记录

题目链接:https://www.nowcoder.com/questionTerminal/67df1d7889cf4c529576383c2e647c48开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。处理:1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要

2020-07-17 11:43:08 153

原创 刷题长路(1):查找最大数

刷题记录(1):查找最大数之前的刷题记录,之后也会陆陆续续进行分析(之前没做笔记,保存工程文件占位得很)输入输入包括多组测试数据。每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。学生ID编号从1编到N。第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为'Q'的时候, 表示这是一条询问

2020-07-17 01:26:26 606

原创 算法(1):比较类排序C语言实现

这里写目录标题冒泡排序归并排序原理部分:十大经典排序算法(动图演示)冒泡排序归并排序1、递归方法

2020-07-13 14:41:08 539

原创 嵌入式操作系统(4):内存管理

操作系统内存管理一、连续式内存分配1. 地址空间2. 动态匹配策略3. 内存碎片4. 内存碎片处理二、非连续式内存分配1. 分段2. 分页3. 页表4. TLB5. 多级页表6. 反向页表三、虚拟内存四、页面置换一、连续式内存分配计算机体系结构: CPU、内存、外设。1. 地址空间物理地址空间:硬件支持的地址空间逻辑地址空间:一个运行的程序所拥有的内存范围应用程序的逻辑地址映射到物理地址的方式:CPU方面运算器ALU需要在逻辑地址的内存内容(CPU要逻辑地址)内存管理单元MMU寻

2020-07-11 20:24:30 1471

转载 简说volatile关键字

volatilevolatile的本意是“易变的” 因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据。当要求使用volatile声明变量值的时候,编译器对访问该变量的代码就不再进行优化,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。由上分析,volatile总是与优化有关,编译器有一种技术叫做数据流分析,分析程序中的变量在哪里赋值、在哪里使用、在哪里失效,分析结果可以用于常量合并,常量传播等优化,进一步可以消除一些代码。但有时这

2020-07-09 10:59:19 125

原创 S3C2440 开发板实战(11):同步互斥

同步互斥原子操作实现定义原子变量获得锁释放锁总驱动函数实验信号量实现定义信号量获得锁释放锁总驱动函数实验本文没有讲同步互斥的基础知识,基础知识可以移步至:嵌入式操作系统(3):同步和互斥原子操作实现目的:防止两个进程同时打开同一个文件。在后一个进程打开文件时自行退出。定义原子变量定义原子变量v并且初始化为1atomic_t canopen = ATOMIC_INIT(1);获得锁对原子变量进行自减操作来判断是否有进程正在打开目标文件,若有恢复原子变量并返回-1(-EBUSY)。if(!at

2020-07-08 19:02:46 197

原创 S3C2440 开发板实战(10):signal & async 异步通信

通信进程之间发送信号asyn由上两篇博客中可以看到按键输入的信号可以通过查询、中断、poll方式进行。本篇学习的是通过异步通信对进程之间发送信号这里我们使用 kill 命令,在进程与进程之间进行传输信号。比如杀死一个进程也是通过进程之间发送信号:#kill -9 pid相对应的如果要发送信号,则要注册信号处理函数(和注册中断服务函数类似),并且编写一个信号服务函数,然后写一个一直休眠的函数就ok了。应用程序 signal.c 代码如下:#include<stdio.h>#incl

2020-07-08 09:14:19 235

原创 C / C++系列 (5):指针 vs. 引用

这篇博文主要讲讲指针与引用之间的相同点和不同点。对于使用不做介绍(太熟了)相同点都是地址概念指针为指向一块内存,它的内容是所指内存的地址。引用是某块内存的别名,使用相同的地址,相当于一个变量有两个名字。指针引用之间的转换:指针转引用:把指针用*就可以转换成对象,可以用在引用参数当中。引用转指针:把引用类型的对象用&取地址就获得指针了。int a = 0; int *pA = &a; void fun(int &va){} // 定义fun(*pA

2020-07-07 12:12:57 115

原创 C / C++系列 (4):malloc内存分配 & linux虚拟地址空间布局

变量内存分配的方式内存分配有三种方式:从静态存储区域 分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量 ,static变量 。在栈 上创建。在执行函数时,函数内局部变量 的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。从堆 上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内

2020-07-07 11:12:32 907

原创 C / C++系列 (3):heap vs. stack & new vs. malloc

文章参考:细说new和malloc区别Linux虚拟地址空间布局以及进程栈和线程栈总结在内存分配中会涉及到栈和堆(和数据结构中的堆栈不同),所以先将以下在内存中栈和堆的区别heap vs. stackkey points:堆(heap):持久化、顺序随意、全局栈(stack):临时、 后进先出、局部1、申请方式堆:由程序员自己申请并指明大小的,当进程调用malloc / new等函数分配内存时,新分配的内存动态添加到堆上(扩张);当调用free / delete等函数释放内存时

2020-07-06 20:50:50 431

原创 S3C2440 开发板实战(9):poll机制

poll内核执行poll过程总代码内核:linux -2.6.22.6内核执行poll过程从代码的角度来看,poll机制是通过应用程序调用**poll()函数,配合驱动函数中相对应的drv_poll()函数配套使用的。函数执行的入口当然是应用程序中的poll()函数,接着进入内核中的sys_poll()**函数,poll机制的函数在路经:linux/fs/select.c下,原代码如下:739 asmlinkage long sys_poll(struct pollfd __user *ufds,

2020-07-06 20:25:54 753

原创 C / C++系列 (2):枚举enum

enum定义枚举定义枚举变量定义枚举由于在实际的编程中使用宏定义会使代码的阅读性变高,所以应该多采用宏定义进行赋。但是在实际的应用中 有着这样的问题:如果对于周一到周日需要定义1-7,一共7个define语句:#define MON 1#define TUE 2#define WED 3#define THU 4#define FRI 5#define SAT 6#define SUN 7一看就不太美观,所以枚举就出来了枚举的定义如下:enum enum_name {e

2020-06-30 11:17:58 535

原创 C / C++系列 (1):共用体union

union一级目录二级目录三级目录一级目录二级目录三级目录

2020-06-29 15:29:46 400 1

原创 S3C2440 开发板实战(8):中断驱动

中断驱动按键按键驱动按键在之前LED驱动基础上进行修改,通过裸机的学习可以知道只是将IO口属性修改为输入。则以文件类的read()函数对输入的按键值进行读取。进入文件类的定义源代码可以查找到以下关于read()的原函数定义代码:ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);所以根据要求将read()函数编写为以下形式#include <linux/module.h>#include <linux

2020-06-26 14:35:52 213

原创 嵌入式操作系统(3):同步和互斥

在这一节中线程和进程的调度其实本质是一样的,所以我们以线程来代替所有情况。一、互斥原子操作所谓原子操作(Atomic Operation)是指不会被调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 Context switch。PS:有时候甚至连条单条机器指令都不是原子的1.1. 需要互斥的原因由于在线程调度过程中,由于进行了上下文切换,所以程序中如果需要调用全局变量,则在对全局变量的操作的语句,在进行编译之后会拆分成数条机器代码(原子操作),在调度过程中会出现

2020-06-24 15:36:10 1478

原创 嵌入式操作系统(2):调度

一、调度原则何时调度:进程状态变化的时候目标:减少响应时间(及时处理用户的输出并且尽快将输出提供给用户 减少平均响应时间的波动(在交互系统中,可虞可预测性比高差异低平均更重要 增加吞吐量–两个方面(1、减少开销(操作系统开销,上下文切换)2、系统资源的高效利用(CPU,I/O设备) 减少等待时间评价调度算法指标:CPU利用率:CPU处于忙碌状态所占时间的百分比 吞吐量:在单位时间内完成的进程数量(相当于操作系统的带宽) 周转时间:一个进程从初始化到结束,包括所有等待时间所花费的时

2020-06-22 19:40:57 2922 1

原创 嵌入式操作系统(1):进程和线程

一、进程1.1. 进程概念在某种程度上, 可以将应用程序看成是一个进程(Process),其将会消耗耕种各样的计算机资源。进程定义&特点一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。动态性:可动态创建,结束进程。 并发性:进程可以被独立调度并占用处理机运行。并发并行 独立性:不同的进程的工作不互相影响。 制约性:因访问共享的数据&资源或者进程同步而产生制约。调度程序的组成程序 = 算法 + 数据结构进程的组成进程=程序+数据+进程控制.

2020-06-22 09:17:39 2707

原创 S3C2440 开发板实战(7):字符设备驱动框架+LED驱动

在学习驱动的时候我遇到了很多问题,所以我的学习路线是这样的:编写驱动发现.ko文件需要放入开发板的目录中,然后就学习通过nfs创建共享文件,在配置nfs时发现网络没有连接上,所以就学习怎样配置IP地址,在传输完.ko文件后,发现自动生成不了dev nod,在经过一番寻找问题后发现是文件系统没配置好,所以我又配置了一遍mdev。最终成功!(耗时2天呀。)目录一、“简化版”驱动文件框架1.1. 编写驱动文件1.2. 测试二、“改进版”驱动文件框架2.1. 改进驱动文件2.2.配.

2020-06-17 16:09:44 492

原创 S3C2440 开发板实战(6):网络配置 + 设置NFS

这篇的主要目的是将PC端(server)和开发板端(client)之间共享文件。事先声明:本人的PC端是直接安装Ubuntu系统的,所以在操作的时候没有虚拟机这个概念。本文所操作的系统,均基于上一篇所讲的最小根文件系统开发。一、硬件连接唯一要求:client的网线应该连接上server或者是给server提供服务的router。比如说我的硬件配置:开发板连接网线至PC端,PC端连接无线网络。(建议配置)二、IP地址设置唯一要求:client的网段应该和server的网络号一样.

2020-06-15 20:21:36 333

原创 S3C2440 开发板实战(5):定时器中断

查看手册定时器中断也是在外部中断模式 (irq)下的异常,所以在上一篇外部中断的现有程序上进行修改,重复部分不再赘述。目录一、定时器大体结构二、定时器中断程序设计I.初始化定时器中断II. 中断入口函数III. 设置定时器中断函数正文:一、定时器大体结构查看芯片手册,可以找到以下定时器结构框图从做到右看,对该图进行分析:(不考虑)Prescaler:定时器0和1共享一个8位分频器,而定时器2、3、4共享另一个8位分频器。分频器将输入的PCLK分频为:PCLK/

2020-06-09 01:34:44 892

原创 S3C2440 开发板实战(4):外部中断

目录1. ARM 工作模式2. ARM处理器的寄存器组织3. ARM处理器的异常及其相应过程I. 初始化异常II. 进入异常的操作(硬件自动操作)III. 进入中断IV. 跳出异常的操作4. ARM外部中断程序编写过程最近学了一系列的中断程序,就复习下顺便撸一篇文来分享下学习。以外部中断为例(之前单片机用的最多的)1. ARM 工作模式ARM体系结构(除了Cortex之外支持7种工作模式),取决于程序状态寄存器中低5位的值(在第二部分会详细讲到)• Us.

2020-06-08 16:52:03 788

原创 S3C2440 开发板实战(2):start.S初认识 + SDRAM配置 + 重定位

2440执行程序的第一件事请就是执行start.S文件,所以这里来学习下最基本的启动文件。顺便说下,在U-boot里有专门对应各种芯片的start.S文件,在开发手册中的ARM章节可以看到S3X2440的ARM型号为ARM920,所以本文章讲解部分比较重要的启动程序(能够保证能够正常启动),在以后的博客中我会详细对他进行分析。一个最简单的start.S文件因该包括看门狗部分、时钟初始化部分以及程序代码定位部分。1、看门狗部分废话不多说,直接开始配置,首先就是要关闭暂时不使用的看门狗,找到看门

2020-05-30 11:10:54 920 2

原创 S3C2440 开发板实战(3):编译概念 + LED点亮闪烁

基于我原先有STM32等单片机的基础,内容是结合我所新学习到的知识进行书写,所以基础知识可能不会涉及到请见谅。一、LED点亮 我们直接通过C程序对寄存器进行操作(汇编语言使用尽量少),通过原理图可看出开发板上的LED对应的GPIO口为GPF4、5、6,所以这里首先以GPF4对应的LED进行点亮,从芯片手册寻找GPF4对应的寄存器(I/O port 章节),就可以看到SOC2440芯片控制IO口对应的寄存器为下图所示:GPIO寄存器 然后就是和单片机操...

2020-05-29 21:09:59 909

原创 S3C2440 开发板实战(1): 烧录程序篇(纯Ubuntu环境)

我一个大三将要毕业的自动化学生,因为疫情在家接触了很多本专业求职的相关内容,最终基于自己的经历以及项目,选择了嵌入式这以行业,打算往linux嵌入式工程师方向走。所以之后会出一系列的学习相关的见解把。 为了学习方便就买了韦老师的JZ2440开发板,因为有做过关于STM32以及51单片机的项目,并且参加过三次电子设计大赛。但是感觉自己都是只学了个皮毛(学习嵌入式之后感觉自己真的只学了个皮毛),这里建议如果要往这个方向发展的大学生在校期间应该把微机学好(真的很有用),废话不多说,直...

2020-05-27 20:55:26 988 2

一些手写的神经网络分享 ANN.zip

在暑假学习人工智能的时候,花了一个月时间自己编写的一些简单的神经网络的程序(纯手写没调用工具箱),建议刚上手的本科生或者研究生大佬们可以参考下 目录: 1. BP 2. RBF 3. SOM 4. HOPFIELD 5. ELMAN 6. DBSCAN 7. K_MEAN 8. PERCEPTRON

2020-06-09

GVF-snake.zip

这是以类似模板的GVF-snake程序吧。我自己做项目中,参考了一部分GVF代码,在修改之后我的项目也成功做完。其中可以学习到很多东西。在项目中需要用到GVF模型或者GVF-snake模型都可以进行下载(程序可运行)

2020-06-09

空空如也

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

TA关注的人

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