- 博客(17)
- 资源 (1)
- 收藏
- 关注
原创 整数开方算法
1 目的 本文阐述了常用的开方算法的原理,重点描述了整数开方算法的实现并给出实例源码,旨在提高不带FPU的处理器处理开发的效率。2 常用的开方算法2.1 逼近法 2.1.1 二分法逼近 选取一个平方值大于目标值a的值b,和一个小于目标值的值c,取中间值d=(b+c)/2的平方e与a比较,若偏大,设置b的新值为d,否则设置c的新值为d...
2019-03-27 16:18:17
6697
1
原创 椭圆生成快速算法
一、目的 文本旨在提供一种画椭圆的快速算法,使之可在不带乘法器的cpu上快速生成椭圆的点。二、定义 1. 走向:当前点的下一个点的方向 2. 主坐标:在走向上,起点到终点,变化量较大的分量坐标 3. 从坐标:在走向上,起点到终点,变化量较小的分量坐标三、 原理 1. 已知椭圆上的一点,要推算出下一点的位置,该位置的主坐标一定是沿着走向递增1个...
2018-08-09 15:03:10
3028
原创 MDK链接器的符号的使用
一、符号名与C语言变量的关系 局部变量放在栈里面,不会被其他地方引用,无需链接,故符号表里不存储局部变量; 全局变量或静态变量的变量名与符号表里的名字是一一对应的,所不同的是,符号表里记录的是变量地址,而不是变量;C语言里操作变量是直接使用变量,而不是使用地址(虽然实际上是操作变量所在地址的内容); 例如,nRecv ...
2018-07-17 16:00:46
1166
原创 可重入中断
一、目的 对于ARM9来说,进入IRQ后,会禁用IRQ,这个时候,即使有更高优先级的中断触发,也是要等该中断退出后才能响应,是不可重入的。本文旨在介绍可以被高优先级中断打断的中断程序,亦即可重入中断。二、原理 要做到可重入,必须开启被禁用的中断。但开启后要面临一个问题,就是LR是会被中断自动设置的,LR会被破坏,CPSR也是会被自动备份到CPSR_irq里面去,CPSR_irq也会被破...
2018-03-08 18:27:35
1163
原创 UCOSII任务挂起点跟踪
一、目的 一般来说ARM的IDE/调试器不提供UCOSII多任务任务调用函数调用关系的查询,本文旨在提供一种查看UCOSII任务调用堆栈的方法。二、UCOSII任务切换简介 UCOSII任务切换方式有两种,一种是通过触发软中断来切换,另一种是直接跳转(分中断里跳转和任务执行中跳转)。无论怎样切换,都是把当前执行的任务内容压入当前任务的堆栈中去,然后设置任务SP的值为优先级最高的...
2018-03-01 16:40:06
387
原创 LDR和STR对C语言变量操作时注意事项
LDR和STR指令操作C语言变量时,首先要引入变量(符号)名,如:IMPORT C_VARIABLE然后,就可以使用如下方式获取变量地址: LDR R0, =C_VARIABLE 注意,此时编译的话,有2种情况:a. C_VARIABLE的地址刚好可以通过一个8位数移位获得,该指令会被翻译为:MOV R0, <变量的地址>b. 否则,将通过当前PC的值加上一个常数获得,...
2018-02-28 16:34:16
714
原创 CRC16校验码C语言实现
一、目的 阐述CRC16的原理,并以C语言代码实现。二、 校验码的作用 校验码用于校验数据的有效性/正确性。 校验码用原数据生成,并伴随原数据一起发送/保存,使用者拿到发送/保存的数据序列后,取出原数据部分,根据校验码生成规则生成校验码,与拿到的校验码进行比较即可判断数据是否有效/正确。三、 CRC校验码生成过程 任意一个数据序列都可以用二进制表示,如整数123可以用二进制表示为1111011B。...
2018-02-09 15:26:48
4269
原创 ARMCC汇编方式
一、目的本文分析ARMCC编译器编译出来的文件对应的汇编代码,旨在帮助C语言程序员写嵌入式代码时分析堆栈使用问题和优化C语言代码。二、材料1、工具编译器:Keil5 ARMCC反编译工具:fromelf.exe2、c语言源码struct LG_BaseLockFuncs_t;struct DynMem_Init_t{ void * pool; //point to start addre...
2018-01-09 17:59:17
4953
原创 ffmpeg模块以及播放视频调用关系
一、目的本文旨在阐述ffmpeg模块的作用以及播放视频调用的关系,方便查找使用ffmpeg播放视频时问题所在。二、模块作用以及主要数据结构module |-libavcodec: 音视频格式编解码器(audio/video encoder/decoder) | |-AVCodecContext: 编解码上下文,如比特率、编码ID、类型(音/视)、类型特定信息(视频:算法、宽高
2018-01-09 10:54:13
655
原创 CPoint和CSize的浮点数版本
一、目的MFC提供的CPoint和CSize很好用,实现了各种构造函数和运算符,但没提供浮点数版本,这对于一些不以像素为单元的图像处理带来了很大的不便,在此,提供这两个类的浮点数版本。二、代码实现1、 代码结构:基本与CPoint和CSize一致,成员名称也一样,重载运算符,提供加减乘除法操作;2、 源码#pragma once/***********************
2018-01-08 15:07:17
1180
原创 自动释放的GDI类
一、目的win32控制台或后台程序有时需要用到一些GDI对象,为避免手动释放的麻烦或的遗漏,封装一些类,在析构函数里面释放资源。二、源码#pragma once/************************************************* Copyright: mlizhi.com Author: Juncheng Lin Date:
2018-01-08 14:55:47
311
原创 c++ 字符串分割操作
一、 目的c++标准库里std::string或std::wstring不提供字符串分割操作,本文旨在提供源码实现该操作。二、 源码实现1. 源码结构:封装到一个类CStringHelper里,类包含要分离的字符串的常量引用,类的所有操作均不影响源母串;类CStringHelper是一个模板类,其模板参数是字符串的字符元素类型;所有分离出来的结果都按顺序放到std::vec
2018-01-08 10:36:11
415
原创 buddy内存分配算法
1 普通内存分配方式的缺点以及解决方法:1.1 普通的动态内存分配方式(如c语言运行库的内存分配malloc、free):分配时,是在堆的空闲链表上,查找到第一块空闲的并且足够大的内存,然后对这块内存进行分割,分割一块足够的内存给调用者,剩余部分作为一个新的节点链接到空闲链表里面去;释放时,查找与被释放内存区域连续的节点,如有找到,则合并,如无,则作为一个新的节点放回空闲链表里面去。1.2
2017-06-23 16:45:57
3863
1
原创 对称矩阵特征向量正交推导
对于对称方阵A,如有特征解λ1对应特征向量p1,特征解λ2对应特征向量p2,根据特征向量的定义,有:A * p1 = λ1 * p1 ①A * p2 = λ2 * p2 ②如p1和p2正交,则必有p1' * p2 = 0,欲证明此式,可构造非零表达式常数K,使得K * (p1' * p2) = 0,而因λ1和λ2是不同的特征解,即λ1 != λ2,故K式可为λ2 - λ1,下面
2017-02-25 12:15:12
12966
1
原创 泰勒展开的推导
1. 一元泰勒展开根据积分定义式,如F(x)= (亦即F‘(x)= f(x)),那么,F(x + a) = F(x) + ,也就是F(x + a) = F(x) + ;①然后,对F‘(t) (t >= x && t ,则F(x + a) = F(x) + = F(x + a) = F(x) + F‘(x) * a + ;然后,对F‘’(u)应用①式,对于最后一项,拆分出常数项F‘’
2017-02-19 17:26:16
7634
原创 c/c艹和汇编混合编程
在嵌入式开发里,有时候需要c、c艹和汇编混合起来编程来解决问题,本文主要介绍了混合编程的写法。首先介绍一下三种语言的优势与劣势。汇编:直接操作寄存器,可实现对芯片直接的控制,可用作优化算法、特权访问,缺点是与芯片指令相关,可移植性差。c艹,面向对象编程,比C更符合软件工程,优点是代码的高可重用性,便于实现各种设计模式,缺点是比c增加了好多内容,如果理解不透彻,很可能用错,另外,它的虚函数需要虚
2016-01-17 14:46:20
1256
ov2686芯片手册
2018-08-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人