自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 字符串,字符和字节

1.字符串基础 包含头文件可以更好地检查错误! 2.字符串长度:#include <stdio.h>size_t strlen(char const* string ){ int length; for(length = 0; *string++ != '\0';) { length += 1; } return length;}int

2016-05-15 22:04:47 375

原创 预处理器

进行C语言的开发,在进行调试之前有一个预处理过程, 预处理对代码进行一些文本性质的操作,如:删除注释,插入被#include的内容,定义和替换由#define的内容。1.预定义符号:FILE : 进行编译的原文件名 LINE : 文件当前的行号 DATE :文件被编译的日期 TIME :文件被编译的时间 STDC :如果编译器遵循ANSI C格式,则返回12.#define#define

2016-05-13 00:05:01 385

原创 动态内存分配

数组在编译时就被分配 动态内存分配在运行时被分配1.为什么要用动态内存分配数组有三个缺点: 1.长度有人为的限制 2.巨大数组,来减小长度的限制,浪费了内存 3.如果超出界限,没有正确的处理机制2.malloc和freemalloc从内存中提取合适的内存(这块内存并没有任何初始化calloc则进行了初始化),并返回指针,如果程序没有正确的分配内存,就会返回NULL来提示。malloc来分配一

2016-05-11 23:50:48 379

原创 结构与联合

1.结构基础知识:聚合数据结构:数组 结构体 结构体值的集合称为成员 数组通过下标,结构体通过名字访问–区别非常重要 结构体与数组不一样,并不能替换为指针。 结构体属于标量不能进行加减乘除,但可以赋值1.1结构声明:在C语言中,并没有规定结构体所分配的内存是连续的,但是有些编译器会分配连续的空间给结构体struct { int x;}z;struct

2016-05-10 21:21:09 815

原创 微分---跟踪器(TD)

方法参考自 ——微分跟踪器的研究与应用 张海丽 张宏丽 传统的PID 从含有噪音的信号提取具有降将噪音增大或超调量增大的特点。将微分跟踪器应用于PID,可以得到原始信号的最佳逼近。 优点:TD与PID有效地提取了原始信号,克服消极因素,有较强的抗噪声的能力,无超调的跟踪原始信号。TD的控制公式如下: float fst(float

2016-05-10 20:35:53 12554 1

原创 预备知识

主要是数据结构太难了,有很多地方根本看不懂!先用郝斌的数据结构视频来入个门: 废话不多说: 开始第一课:模块一:线性结构: 连续存储 离散存储 栈 队列 模块二:非线性结构: 树 图 模块三:查找和排序: 感觉入门是够了! 看完这些再看国嵌唐老师的数据结构视频··数据结构概述:定义: 我们用来描述客观事物的数据和关系以特定的方式来进行保存的操作,叫做数据结构。 在此基础上

2016-05-09 15:19:36 798

原创 线性表的顺序实现

SeqLsit.h#ifndef _SEQLIST_H_#define _SEQLIST_H_typedef void SeqList; //是用来封装,不被外界改变typedef void SeqListNode;SeqList* Creat_SeqList(int capacity);SeqList* Get_Node_SeqList(SeqList* list, int pos);S

2016-05-08 10:55:44 400

原创 数据结构与算法--初探门径

线性表的本质线性表:排队 线性表是0个或多个元素的集合 数据元素之间是有顺序的 数据元素是有限的 数据元素之间的类型是相同的线性表的相关操作线性表的顺寻存储结构线性表的链式存储结构

2016-05-04 16:08:12 452

原创 数据结构与算法-内行看门道

数据结构很重要!! 数据结构很重要!! 数据结构很重要!!数据结构训练我们编程的思想和用C语言实现 学习曲线陡峭!1.进阶高手的大门看懂程序不一定能写出好的程序程序的本质是什么? 程序是解决问题的步骤描述我们只是学习的C的语法,并没有遇到实际问题。例子:计算前N项的和#include <stdio.h>#include <malloc.h>long sum1(int n){ lo

2016-05-03 13:22:18 308

原创 K60学习笔记五:串行通信的时序分析

串行通信的特点:数据以字节为单位,按位的优先级来进行传送 通信涉及通信协议 通信协议按照时间来分:可分为同步通信和异步通信 按照发送数据的位宽来分可分为:串行通信和并行通信 串行通信又分为单工,半双工,全双工 同步通信是面向比特的传输 异步通信是面向字符的传输,需要事先约定波特率 异步通信的空闲格式为1,发送器通过0来表示传送

2016-03-31 21:17:04 3138

原创 K60学习笔记四:按键的多种操作

按键有好几种操作: ADC按键扫描–用的是电阻 GPIO按键扫描: 独立式 矩阵式 循环查询 定时查询 中断响应//初始化KEY对应的管脚PTXn_e KEY_PTxn[KEY_MAX] = {PTC7, PTC8, PTA4, PTC6, PTE26, PTC9, PTC16, PTC17}; //KEY初始化:void key_init(KEY_e

2016-03-31 19:34:00 4338 2

原创 K60学习笔记三:GPIO口的底层驱动操作带API接口

GPIO 用于普通I/O口的输入输出 C预备知识: const 修饰只读常量 volatile修饰易变量,表示编译器不能进行优化 GPIO模块的编程步骤: 1.设置PORT端口为GPIO复用 2.设置GPIO口的输入输出方向在进行库开发时要有软件分层的思想 。GPIO.cGPIO_MemMapPtr GPIOX[PTX_MAX] = {PTA_BASE_P

2016-03-30 20:52:22 4273

原创 K60学习笔记二:PORT中断

1.C预备知识 关于断言: 断言其实就是一个宏定义void assert_failed(char * ,int ); //断言失败执行的函数#if define(DEBUG) //在DEBUG模式下进行调用 #define ASSERT(expr) if(!(expr)) \ assert_failed(_FILE_,_LINE

2016-03-29 20:41:49 7350 1

原创 C语言的一些程序

Q1: 编写一个函数:squzze(s1,s2) 将字符串s1中任何与s2相匹配的字符都删掉。 分析: 用两个for循环,s1在外层,s2在内层 s1中的每个元素都在s2中遍历一遍 如果能够一直遍历到最后退出内层for循环。void squeeze (char s1[], char s2[]){ int i = 0, j = 0, k

2016-03-29 18:51:05 634

原创 K60学习笔记一:PORT端口

预备C语言知识: 一. 1.#ifndef //#idndef用来判断后面的标识符是否为未定义的。#elseif #endif在嵌入式的系统开发中,某个文件包含几个头文件,而且每个头文件都有可能都定义了同样的宏,使用#ifndef可以有效地防止对该宏的重复定义。此时第一个头文件中定义的宏变为有效定义,其他的头文件中的定义则被忽略。 2.#ifndef指令通常用于防止多次包含同意文件,也就是

2016-03-24 22:24:22 9728

原创 玩转K60---(一)基于K60 _PORT端口的

C语言知识储备: 1.头文件重复定义:#ifnder _STDIO_H_#define _STDIO_H_#endif说明:#ifnder 用于定义此前未定义的变量因为在一个.c文件中包含几个头文件,而且每个头文件可能都定义了相同的宏,使用#ifnedr可以实现防止对该宏重复定义,此时第一个头文件中的定义变为有效定义,其他头文件的定义则被忽略。

2016-03-23 08:17:39 1875

原创 第三章 -寄存器

3.6栈 栈是一种具有特殊的访问方式的存储空间,是一种LIFO 3.7CPU提供的栈机制 指令:PUSH ax–入栈 POP ax –出栈 以字为单位 段寄存器SS和寄存器SP 任意时刻SS:SP指向栈顶元素 8086CPU中,入栈时,栈顶从高地址向低地址方向增长。 如果是一个空栈,SS:SP将指向栈空间最高地址单元的下一个单元 注意:出栈后,SS:SP将指向

2016-03-22 18:39:37 373

原创 第二章--类型运算符表达式

2.1变量名: 数字字母下划线,不能以数字开头 对于内部来说,至少31个字符有效 选择变量名应该尽可能的在字面上表达变量的用涂2.2数据类型及长度 int 反应所用机器中整数的最自然的长度#include <stdio.h>#include <limits.h>int main(void){//第一种 printf("%d\n",SCHAR_MIN); printf

2016-03-22 12:07:22 337

原创 汇编语言——3寄存器

1.数据在21F60H内存单元中,可以说为: 数据存在内存2000:1F60单元中 数据存在内存中的2000段的1F60单元中。 2.9段寄存器: 8086COU有4个段寄存器:CS,DS,SS,ES.2.10 CS和IP CS为段寄存器,IP为指令寄存器 在8086机中任意时刻CPU将CS:IP指向的内容作为指令执行CPU实现过程: 1.初始状态:CS = 2000H,IP = 00

2016-03-18 14:01:06 388

原创 汇编语言-2寄存器

CPU由运算器,寄存器,控制器等组成··· 在CPU内部: 运算器进行数据处理 寄存器进行信息的存储 控制器控制各种器件工作 内部总线相连来控制各个器件工作而程序员是通过寄存器的内容来实现对CPU的控制 16位寄存器可分为两个独立的8位寄存器单独使用2.2字在寄存器中的存储 处于兼容性的考虑,8086CPU可以一次性处理以下两种数据: 字节byte 一个字节 字word 两个字

2016-03-17 13:36:55 375

原创 汇编语言-1-基础知识

1.什么是汇编: 汇编语言是各种CPU提供的机器指令的助记符的集合。人们可以直接用汇编语言控制硬件系统的执行 1.1机器语言 汇编语言是直接在硬件之上工作的语言。 机器语言是机器指令的集合,为二进制数 每一种微处理器都有自己的机器指令集合 1.2汇编语言的产生: 机器语言很麻烦,产生了汇编语言,汇编指令是机器语言的便于记忆的简便形式。 eg: 操作;寄存器bx的内容送到ax中 机

2016-03-16 13:26:55 927

原创 一点思考··

从早上6.30起床到中午不睡觉,一直到晚上11.30睡觉已经坚持了一个星期了,也学了点东西,很少的一点,到第二周感觉自己做的是无用功,东西一点没记住,只记住了一点英语,还有一点知识,不知道为什么,总感觉的要学的东西很多,却无从下手,细想来,从2015.10.01到2016.3.14,学到的东西并没有很多。总感觉觉时间都浪费了,什么都没留下。什么成绩都没有做出来。 总想着写学习计划,但是写了学习计划

2016-03-14 12:59:22 410 1

原创 串行通讯的时序分析

1.通信协议: 通信发送按照事先约定的规则来发送数据,接收方根据规则来接收数据并进行解码。规格包括传输速度,同步方式,数据格式,检错纠错方式。 通信协议按时间分为:同步通信 和异步通信,按发送数据的位宽可分为串行通信和并行通信,串行通信里按通信数据传输的方向机是否同时收发程序通信又分为:单工,半双工,全双工。 区别:同步和异步: 同步是面向比特的传输,通过特定的时钟来调整位时序。 异步传输

2016-03-13 09:59:39 7199

原创 一些简单问题的思考:

1.为什么不是每个模块的引脚都是32位? 因为正好够用才合适,这样才能减少体积和芯片价格 2.GPIO和PORT的区别: PORT 是将引脚复用到其他模块上。 二GPIO只能用于普通IO口的输入输出 3.const和volatile const修饰只读变量,限定了变量不能被改变 volatile:声明变量为易变的,它随时可能被修改 4.宏定义封装: 宏定义封装,会把代码直接展开,而

2016-03-11 22:20:24 399

原创 C Primer Plus(九) -3指针简介

关于指针: 1.地址运算符:& 用来读变量的地址scanf("%d",&a);这条语句说:函数在一开始定义了一个变量a,并在内存中赋了值。 当键盘输入了一个数,这条语句就会寻找这个变量在内存中的地址,并赋值。 2.简介: 一般来讲:指针是指一个其数值为地址的变量。char p;char * fp;fp = &p; //p在这里指的是一个变量,fp则是一个常量,这个常量的值为p的

2016-03-11 16:54:44 307

原创 KL26---GPIO 复用

先进行PORT端口的复用: 1.使能时钟 2.清中断 3.进行端口复用void PORT_init(PTXn_e ptxn, uint32 cfg ){ SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK << PTX(ptxn)); //开启PORTx端口 1.使能PORT时钟

2016-03-10 22:35:18 1069

原创 c Primer Plus(九) -2

尾递归: 把递归调用语句放在return之前叫做尾递归。此时递归相当于一条循环语句。 eg;#include <stdio.h>int fact(int);int rfact(int);int main(void){ int num = 0; while(scanf("%d",&num) == 1){ printf("%d的阶乘为%d\n",num,fact(num)

2016-03-10 17:19:27 260

原创 LabVIEW实用工具详解—1.2常用数列工具

已经学了一些LB的知识,要熟练,所以选了这本书。1.使用帮助找到我们需要的结构和函数。 2.ctrl + shift +space 打开查看的快速放置工具。 一.自然数平方和: 在这个程序中,用了for循环和数值面板的表达式节点。 两种方法用来相互验证值的正确性,用布尔控制面板的灯来实现验证的正确性。 在for循环中,i的位置可动,i是从0开始到n-1 结束。 对于for循环,自动索

2016-03-10 16:44:32 3699 2

原创 C Primer Plus外藩(一)---枚举

枚举类型: 1.1枚举类型声明int 类型的常量,使用关键字enum。 使用枚举类型的目的是提高程序的可读性#include <stdio.h>int main(void){ enum a {red,blue,green,populer,white,blach}; enum a c; c = blue; printf("%d\n",c);} 结果 = 1;#i

2016-03-09 20:53:23 315

原创 K60(一)端口复用问题

PORT端口初始化要点: 1.使能PORT端口时钟(系统时钟门控寄存器(SIM_SCGC5)的第9到13位)。 2.清空POTR端口的中断标志位(不然有可能误触发中断或者DMA请求) 3.配置PORT端口所需要的各种属性。 Think:只有短短的几个语句,便能实现144个管脚的复用,的确很NB. 但是底层库并不能看的很懂void PORT_init(PTXn_e ptxn, uint32

2016-03-09 20:02:49 2533

原创 轻松玩转K60--飞思卡尔

第二章:牛刀小试: RORT模块简介: K60的PORT模块是引脚控制和中断模块 具体的功能都是由PORT输出的,由32位寄存器配置。 port可以复用为GPIO,UART,ADC,SPI,SDHC,I^2C等这些功能 port还可以配置内部上拉下拉电阻(阻值一般在700欧姆,外部上拉和下拉电阻一般在10k和1M之间,上拉就是将不确定的信号通过一个电阻钳位在高电平!电阻同时起限流作用。下拉

2016-03-09 16:06:41 4537

原创 C Primer Plus(九) 函数

声明:这只是读书笔记和总结1.C的设计原则是把函数作为程序的构成模块。 9.1函数概述: 函数是用于完成特定任务的程序代码的自包含单元。 函数省去重复代码的编写 函数是的程序更加程序化 黑盒子观点。 9.1.1 函数原型,函数使用,函数定义 函数原型的声明只要在函数使用之前就可以9.1.2#include<stdio.h>//void imin(int ,int); //一般的形

2016-03-09 12:07:30 295

原创 LB宝典(二)

1.学习控件: 数值控件:使用旋转类数值控件要特别注意是否选择锁定在“最大最小值之间”。跟随鼠标会出现意想不到的效果。 对数据的输入要求很高。要适当的设置数据的输入范围。发现这本书写的太详细了,对于新手实在是没必要,还是回归自己学的那本书好。LabVIEW8.2程序设计教程

2016-03-07 12:55:13 477

原创 嵌入式硬件和软件的一些基础知识:

硬件: 封装:保护硬件电路的部分,分为贴片和通孔封装 印刷电路板(PCB) 动态可读写随机存储器:DRAM 静态可读写随机存储器:SRAM 只读存储器:ROM 闪速存储器:系统内编程。需要复杂的算法 模拟量: 开关量;与通信有关的术语: 1.并行通信:数据的各位在多跟并行线上进行传输的通信方式。 2.串行通信:数据在单线上进行传输,用电平信号高低和差分信号 3.串行外设接口(S

2016-03-06 10:37:36 1287

原创 第一章:概述

嵌入式系统的定义: 1.美国:一种计算机硬件和软件的集合,也许还有机械装置,用于实现一个特定的功能,在某些特定的情况下,嵌入式系统是一个大系统或产品的一部分。 2.CHINA:置于应用对象内部起控制作用的专用计算机网络。 3.要区分嵌入式系统和嵌入式系统产品的概念。 嵌入式的由来及其与微控制器(MCU)的关系: 1.MCU的基本含义:在一块芯片上集成了CPU

2016-03-06 10:04:54 389

原创 新型PID控制及其应用(三)

1.不完全微分: 微分环节的引入,改善了系统的动态特性,但对于干扰特别敏感,导致系统过程震荡。 特别是,对每个控制回路计算机的输出是快速的,而执行机构的动作需要一定的时间。如果输出值较大,在一个采样时间内执行机构不能到达应到的位置,会使输出失真。 为此,在标准PID控制算法中加入一个低通滤波器,加在整个PID控制器之后,形成不完全微分PID控制算法,改善系统的性能。 低通滤波器(Low-pas

2016-03-05 09:08:48 1904

原创 一阶滤波算法之深入研究

一阶滤波算法的原理: 一阶滤波,又叫一阶惯性滤波,或者一阶低通滤波,是使用软件编程实现硬件RC低通滤波的功能。 一阶低通滤波的算法为: Y(n) = aX(n)(1 - a)Y(n - 1); 式中:A = 滤波系数,X(n) = 本次采样值;Y(n-1) = 上次滤波值。 重心:加权得到有效滤波。核心算法:(100-a)*value + a*new

2016-03-05 08:26:09 7717

原创 新型PID控制及其应用(二)

数字PID控制算法的改进 1.积分分离PID控制算法: 引入积分项的目的:消除静态误差,提高精度,但在开机或者大幅度增减设定值时,系统会有很大的偏差,造成很大的超调量。积分分离作用就是减小 超调量。 程序: int index = 0; if(abs(pid.err)>= 200 ) index = 0;//设定一个阈值 else { index = 1

2016-03-04 18:30:47 1378

原创 第十一届飞思卡尔电磁组程序流程分析

今年大二了,打算参加一届飞思卡尔。一开始想选择信标组,但是由于我们学校是第二届参加,所以我选择了电磁组,用E车模。 我们团队从11月份开始做车,一直做到现在到3月初,寒假只过了2个星期。 现在电磁车智只能跑到2M/S。用的官方方案。 想写一下对电磁直立的理解: 1.直立环: 需要的传感器:陀螺仪+加速度计模块 应用的是PD调节。P减小静态误差,D用来调整系统的调节速度 2.速度环:

2016-03-04 17:16:47 10258 2

原创 新型PID控制及其应用

第一章:数字PID控制 1.PID控制原理: 图为PID控制原理的最简形式:e(t) = 设定值 - 实际值控制规律为: P:比例控制部分,当产生误差后,系统会产生控制作用,减小偏差。但是偏差始终减少不到。所以会与设定值有一个误差,叫做静态误差。对于参数P的控制作用,可以增加开环增益,但是P加大后会不稳定。 I:积分控制部分:积分部分的引入是为了消除静态误差,提高系统的无差度。I加大后会

2016-03-04 15:47:15 1501

空空如也

空空如也

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

TA关注的人

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