- 博客(12)
- 收藏
- 关注
原创 AT 组件构造-RT thread源码解析
AT 组件构造client,server-RT thread源码解析AT命令的框架如下图,在官方手册中有详细介绍:https://www.rt-thread.org/document/site/programming-manual/at/at/AT 命令框架分析源码的时候,可能一团乱麻,无从着手.首先整理下心情,从调用关系着手.rt-thread是类linux风格,所以里面驱动的普遍在初始化...
2019-09-05 23:32:04
2144
原创 平衡树AVL的插入
思路:分析总结插入后引起不平衡状况的几个例子1: 插入到树的外围, 左子点的左子点, 右子点的右子点, 使用单旋转;2: 插入到树的内围, 左子点的右子点, 右子点的左子点, 使用双旋转;3: 使用递归调用,更新沿路的height(用于平衡,左右子树不超过2);具体情况见 <数据结构与算法分析>P82#include "string.h"#include "stdlib....
2019-09-05 23:31:03
189
原创 后缀表达式转表达式树
思路:遇到普通字符,创建叶节点, 压栈;遇到运算符, 创建运算符节点, 弹出栈顶两个节点作为,运算符节点的左右子节点, 压栈;后缀表达式完整的话, 最后栈中留一元素,指向的表达式树的根节点.#include "stdlib.h"#include "stdio.h"#include "string.h"typedef char bool;#ifndef true#defin...
2019-09-05 23:30:31
969
原创 二叉树的增加,删除
二叉树的增加:插入数据x,从根节点开始,不断比较节点与x的大小;若x小于节点,下一次比较x与节点的左子树,反之,比较x与节点的右子树;直到遇到一个空的节点,插入数据.二叉树的删除分三种情况:删除的节点为叶子节点: 直接删除;删除节点为单子节点: 则子节点继承(替代)位置;删除节点为双子节点:找左右节点树中最接近节点值的节点(删除节点的左子树找最右值 or 右子树找最左值);清...
2019-09-05 23:29:58
852
原创 二叉树的遍历打印
二叉树的遍历打印, 前序, 中序, 后序, 层级. (图形化打印见<二叉树的增加,删除>)#include "stdlib.h"#include "stdio.h"#include "string.h"typedef char element_type;typedef struct tree_node { element_type element; str...
2019-09-05 23:29:29
776
原创 中缀表达式转化后缀表达式
数据结构与算法分析-C语言描述 -p54 页,讲述了中缀表达式使用堆栈方式转化成后缀表达式.后缀表达式用来实现计算四则运算.具体思路是:1.遇到运算符,2.跟栈顶元素比较,3.优先级比栈顶的高 转5.4.小于或者相等则栈顶弹出,转2.5.当前运算符进栈.对’(’ ')'这里的处理取巧使用了递归方式,不用考虑跟上一级的复杂的关系下面是源码: (方式有点蠢,谁叫我着急呢,后面再改进...
2019-09-05 23:28:32
148
原创 词法分析练习一:简单提取token
语法分析练习一:简单提取token思路:第一次碰到字母,下划线: 开启新token, 设置type=identify; 直到遇见非(字母,数字,下划线 截止), 则以上为一个标识符第一次碰到数字: 开启新token, 设置type=number; 直到遇见非(数字,字母U,L,u,l)截止, 则以上为一个数字typedef char bool;#define true 1#defi...
2019-09-05 23:02:52
1856
1
原创 图解c语言程序函数调用过程中栈的变化
演示程序代码:int m = 8;int fun(int a,int b){ int c = 0; c = a + b; return c;}int main(){ int i = 4; int j = 5; m = fun(i, j); return 0;}1.程序在内存分布区域2.全局变量m赋值3.保存进入mai...
2019-09-04 22:42:28
1353
1
原创 SPI NAND FLASH坏块管理
这个比较少见,因为有些spi nand flash是提供了一个坏块表管理的.恰好我使用的这款是没有的.第一步首先抽象出nand 驱动typedef struct{ unsigned char (*readID)(unsigned char *rxID); unsigned char (*init)(void); unsigned char (*readPage)(unsigned long ...
2018-06-24 23:17:04
7907
4
原创 STM32 FreeRTOS高级应用,动态创建通道/流
今天介绍个有意思的点子,在FreeRtos中实现通道/流概念。什么意思呢?比如一个系统有3个数据I/O口,运行时可能每个口都有数据流入,每个口可能需要其它口的数据(比如转发)。那这个时候内,定死的队列传输不是那么合适,需要动态的创建任务。所以今天借鉴通道/流的方式,进行本次实践。指导思想:一个任务模板,需要传递任务参数。模板实现了从队列1获取成员加入队列2中。成员中有一项属性指示该任务...
2018-06-11 23:27:37
822
原创 stm32 嵌入式系统之 LED状态灯服务
自从接受linux的熏陶来,编程思想已经发生极大转变(提高)。下面是由request gpio,及注册式驱动启发,在freertos上实现led灯服务。该服务可提供:led控制常关方式,常开方式,闪烁方式。每个控制任务都可单独设定时间,周期频率,还有各自优先级。 指导思想:开一个周期性任务,该任务周期是20ms计(鉴于人的视觉残留是20ms)。该任务中统计led控制请求中...
2018-06-10 23:06:08
2119
原创 基于flash的快速缓存(ringbuffer)设计,掉电恢复,擦除平衡。
先讲讲本次主题的项目需求:1、透传数据,若无连接则必须缓存数据(数据上传的环境很不理想,很可能1周后才有人处理)。2、最差情况:缓存百兆字节数据;2、缓存的数据按先进先出顺序;3、缓存数据接收每次100~4K字节,每段数据总长度10K~1M不等。4、stm32平台64K内存,64KROM;(由于USB Host驱动,再加上系统及任务本身耗费,内存裕量约40k);设计方案:首先,开发版采用的是NOR...
2018-04-20 15:33:18
1172
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人