2019-02-08 15:05:40 w12315q 阅读数 108
scanf("%d",&A);

此时输入“-”“+”可以填充栈但是不会破坏栈的内容。可以用来绕过canary

malloc(0)#时会glibc根据其规定,会分配 0x20 个字节,但是如果i时无符号整数可以无限进行输入

可以构成堆溢出。

最大的int64:0x8000000000000000,正负数相同可以造成溢出
int:0x80000000,可以造成栈溢出

有关堆

关于tache机制几点总结

一、首先堆块不能大于0x408

二、tcache最多含有7个chunk

三、检查极少,利用单链表结构类似fastbin(无检查版)

2016-09-20 20:16:01 wujiafei_njgcxy 阅读数 3061

  今天做小车学到的两个知识点,感觉蛮重要的,整理一下。


PWM就是脉冲宽度调制,也就是占空比可变的脉冲波形.
脉冲宽度调制是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。


电流跟踪型PWM变流电路就是对变流电路采用电流跟踪控制。也就是,不用信号波对载波进行调制,而是把希望输出的电流作为指令信号,把实际电流作为反馈信号,通过二者的瞬时值比较来决定逆变电路各功率器件的通断,使实际的输出跟踪电流的变化。采用滞环比较方式的电流跟踪型变流器的特点:
①硬件电路简单;
②属于实时控制方式,电流响应快;
③不用载波,输出电压波形中不含特定频率的谐波分量;
④与计算法和调制法相比,相同开关频率时输出电流中高次谐波含量较多;
⑤采用闭环控制.

占空比(Duty Ratio)在电信领域中有如下含义:
例如:脉冲宽度1μs,信号周期4μs的脉冲序列占空比为0.25。
在一段连续工作时间内脉冲占用的时间与总时间的比值。
在CVSD调制(continuously variable slope delta modulation)中,比特“1”的平均比例(未完成)。
引申义:
在周期型的现象中,某种现象发生后持续的时间与总时间的比。
例如,在成语中有句话:「三天打渔,两天晒网」,如果以三天为一个周期,“打渔”的占空比则为三分之一。


频率不控制什么,但是频率的高低会产生其他一些副作用。比如在电机控制中,频率太低会导致运动不稳定,如果频率刚好在人耳听觉范围,有时还会听到呼啸声。对于需要进行直流滤波的场合,频率越高,滤波的效果就越好。但是也不是说频率高一定好,太高的频率电机可能反应不过来。而且,如果PWM是由单片机产生的,那么他的频率和位数是成反比的(一些低端的单片机频率基本是确定的,位数也是确定的,不存在这个问题),比如说,单片机频率10M,如果PWM频率是5M,那么一个PWM周期内就只有两个机器周期,那么占空比的值就只有 0、50%、100%这三种。如果PWM频率是5k,那么一个PWM周期有2000个机器周期,占空比最小就可以去到1 / 2000 = 0.05%。所以实际运用中,要根据硬件因素设定频率,一旦设定了,也就不需要更改了,因为硬件是不会改变的。
占空比才是真正PWM应用的,其实就是开关的打开和关断的时间比值,这个比值在宏观上可以欺骗人眼,于是形成和电位器一样的作用。比如对一个电灯来说,你在1秒内,打开开关0.5秒,再关闭0.5秒,如此反复,那么电灯就会闪烁,但是如果是1毫秒内,0.5毫秒打开,0.5毫秒关闭,由于视觉暂留作用,也可能由于灯光的亮灭速度赶不上开关速度(还没全亮就又没电了),于是人眼不感觉电灯在闪烁,而是感觉灯的亮度少了一半。同理,如果是0.1毫秒开,0.9毫秒灭,感觉灯的亮度就只有1/10了。对于电机的原理也差不多,开关开时电机加速,关闭时电机减速,根据是加速时间多还是减速时间多,我们感觉总体的转速就是快了或慢了。当然,具体分析时还需考虑电机的电感作用,电感有滤波效果,但是用这个方式去理解也是成立的。
回到前面的频率问题,就如刚才说的,1秒内,0.5秒开,0.5秒灭,占空比是50%对吧?那么,1毫秒内,0.5毫秒开,0.5毫秒灭,占空比也是50%,对吧?如果是1秒呢,频率就是1HZ,如果是1毫秒,频率就是1KHZ,显然,同样是50%占空比,如果频率是1HZ,那电机肯定是跳着走的,灯光肯定闪得可以跳舞,不具有调速和调光的意义。


2019-06-06 15:42:30 weixin_44212493 阅读数 926

51单片机PWM控制LED的亮度仿真程序图谱
单片机输出PWM斩波,控制LED的亮度并在图谱上面显示出来

在这里插入图片描述
仿真开启

在这里插入图片描述
参考代码:

#include “reg51.h”
unsigned int cd,dd;
unsigned char cc,ee;

sbit LED=P2^0;
void led_int() interrupt 1 using 0
{
TH0=0xf1;
TL0=0xf1;
TR0=1;
dd++;
if(dd11)
{
if((cc
0x50)&&(ee0)){cd=0;}
if((cc
0)&&(ee==0x50)){cd=1;}
if(cd){cc++;ee–;}
else {cc–;ee++;}
dd=0;
}
}
void delay(unsigned int i)
{
unsigned int j;
while(i–)
{
for(j=0;j<0x20;j++);
}
}

void main()
{
cc=0;
ee=0x50;
TMOD=0x01;
TH0=0xf0;
TL0=0xf0 ;
EA=1;
ET0=1;
TR0=1;
while(1)
{
LED=0;
delay(ee);
LED=1;
delay(cc);
}
}

2019-03-20 20:40:05 qq_28997735 阅读数 536

1.基础模块:

  1. LED灯移位运算控制流水灯
  2. 数码管数码管显示
  3. 继电器和蜂鸣器关于继电器和蜂鸣器的干扰问题
  4. 按键定时扫描独立按键
    三行代码实现独立按键程序
    定时扫描矩阵按键
  5. PWM关于PWN调节小灯泡亮暗
  6. iic :eeprom与pcf859
  7. ds1302:DS1302时钟模块
  8. ds18b20:DS18B20读取温度(带小数)
  9. 底层驱动及应用官方底层代码测试及应用
  10. 超声波测距超声波测距
  11. 串口简单的串口程序
  12. DA转换DA转换
  13. NE555NE555测频

2.省赛代码:

  1. 模拟灌溉系统
  2. 简易温度采集与控制装置
  3. 温度记录器
  4. 自动售水机
  5. 单片机电子钟
  6. 彩灯控制器
  7. 模拟智能传送装置(eeprom未完成)
  8. 模拟风扇控制系统
  9. 第十届蓝桥杯测频率测电压

3.国赛代码

  1. 多功能测量表
  2. 超声波门禁系统

4.编程规范

  • if,while,switch后的大括号另起一行!
  • 大括号里的代码前也加空格
  • 在运算符两边加空格!
  • 函数前后也加空格
  • 真的不要吝惜空格!
2019-03-17 22:12:56 qq_28997735 阅读数 481

再次感谢ReCclay大佬文章的启迪:

《觉得自己再有必要开一篇PWM的文章了》 作者:ReCclay
[如果想要更深入详细了解PWN,请务必点击这篇文章↑↑↑↑]

实验原理:

在这里插入图片描述在这里插入图片描述在这里插入图片描述

通过上图就可以 看出,占空比越高,高电平越久,小灯泡就越暗
(这里高电平小灯泡灭,低电平小灯泡亮)

所以只要控制占空比,就可以控制小灯泡的亮暗

代码:

先设置一个10us的定时器

void Timer0Init()		//10us@12.000MHz
{
		AUXR |= 0x80;		
		TMOD &= 0xF0;	
		TL0 = 0x88;		
		TH0 = 0xFF;		
		TF0 = 0;		
		TR0 = 1;		
		ET0 = 1;
		EA = 1;
}

中断里控制PWN

void T0_time() interrupt 1
{
		static uint count = 0,n = 0;
		TL0 = 0x88;		
		TH0 = 0xFF;	
		if(++count >= 1000)   //周期10ms
		{
				count = 0;
		}
		if(count<PWN)         //亮 ,PWN越高,小灯泡越亮
		{
				ShowLed(0x00);
		}
		else 					   //灭
		{
				ShowLed(0xff);
		}		
}

应用:

呼吸灯:
main.c

******************************************************************************
* 文件名:呼吸灯
* 描  述:
* 作  者:思索与猫
* 日  期:  19/3/17 
* 备  注: 
*         
******************************************************************************
#include<stc15f2k60s2.h>
#include<sys.h>
void main()
{
		CloseFucker();
		Timer0Init();
		while(1)
		{
				;
		}
}

sys.h

#ifndef __SYS_H_
#define __SYS_H_

#include<stc15f2k60s2.h>
typedef unsigned char uchar;
typedef unsigned int uint;

void Timer0Init();
void CloseFucker();

void ShowLed(uchar led_dat);

#endif

sys.c

#include<sys.h>
bit flag_pwn;
void Timer0Init()		//10us@12.000MHz
{
		AUXR |= 0x80;		
		TMOD &= 0xF0;	
		TL0 = 0x88;		
		TH0 = 0xFF;		
		TF0 = 0;		
		TR0 = 1;		
		ET0 = 1;
		EA = 1;
}

void T0_time() interrupt 1
{
		static uint count = 0,n = 0,pwn = 0;
		TL0 = 0x88;		
		TH0 = 0xFF;	
		if(++count >= 1000)  //周期10ms
		{
				count = 0;
		}
		if(++n >= 100)     //每隔1ms变化一次pwn
		{
				n = 0;
				if(flag_pwn == 0)   
				{
						pwn++;                 //PWN增加,灯泡由亮到暗
						if(pwn == 1000)
						{
								flag_pwn = 1;
						}					
				}
				else if(flag_pwn == 1)
				{
						pwn--;                //PWN减少,灯泡由暗到亮
						if(pwn == 0)
						{
								flag_pwn = 0;
						}
				}
		}
		
		if(count > pwn)        //亮
		{
				ShowLed(0x00);
		}
		else                   //暗
		{
				ShowLed(0xff);
		}		
}

void CloseFucker()
{
		P2 = P2&0x1f|0xa0;
		P0 = 0xaf;
		P2 = P2&0x1f;
}

display.c

#include<sys.h>
void ShowLed(uchar led_dat)
{
		P2 = P2&0x1f|0x80;
		P0 = led_dat;
		P2 = P2&0x1f;
}

没有更多推荐了,返回首页