周期
时钟周期:也叫振荡周期,就是单片机外接晶振的倒数,如12Mhz,周期就是1/12us,最小的时间单位。频率越高,速度越快
指令周期:执行一条指令需要的时间,一般由若干个机器周期组成
机器周期:一个指令的基本操作(取指,分析,执指)所需要的时间为机器周期,一般由12个时钟周期组成 机器周期 = 12/晶振频率
总线周期:CPU通过总线对外部进行一次访问需要的时间 一个总线周期一般包含4个时钟周期
主频(时钟频率):1秒钟,时钟周期的个数为主频
关于定时器的使用
1、滴答定时器,用于单一定时
cpp
rt_tick_t start;
start = rt_tick_get()
if(rt_tick_get() - start < 3*1000)
{
}
else
{
}
2、使用rt_thread_mdelay(),用于多个定时处理
需要创建一个独立的任务,如果需要重新定时,需要删除改线程
cpp
rt_thread_t ruigang_output3_thread = RT_NULL; // 用于保存RUIGANG_OUTPUT3线程的句柄
void RUIGANG_OUTPUT3(void *param)
{
while(1)
{
if(!pi_in.pi_close && !pi_in.pi_reset && RUIGANG_Flag)
{
contrl_pin(_24V_CNTL3, PIN_HIGH, PenFaTime5Sec);
contrl_pin(_24V_CNTL3, PIN_LOW, PenFaTime3Min);
contrl_pin(_24V_CNTL3, PIN_HIGH, PenFaTime3Sec);
contrl_pin(_24V_CNTL3, PIN_LOW, PenFaTime5Min);
rt_pin_write(_24V_CNTL3, PIN_HIGH);
rt_thread_mdelay(PenFaTime5Min*60);
}
else
{
continue;
}
rt_thread_mdelay(10);
}
}
if (ruigang_output3_thread != RT_NULL)
{
rt_thread_delete(ruigang_output3_thread); // 删除当前线程
}
ruigang_output3_thread = rt_thread_create("RUIGANG_OUTPUT3",
RUIGANG_OUTPUT3,
RT_NULL,
1024,
PRIORITY_OUT3,
10);
if (ruigang_output3_thread != RT_NULL)
{
rt_thread_startup(ruigang_output3_thread); // 启动新线程
}
3、软件定时器 1秒定时器 时间到了 会自用调用 回调函数
用于单一定时
cpp
#include <rtthread.h>
// 定时器的回调函数
static void timer_callback(void* parameter)
{
rt_kprintf("Timer tick\n");
}
int main(void)
{
// 定义定时器句柄
rt_timer_t timer;
// 创建软件定时器
timer = rt_timer_create("mytimer", // 定时器名称
timer_callback, // 定时器到期时调用的回调函数
RT_NULL, // 传给回调函数的参数
rt_tick_from_millisecond(1000), // 定时周期,单位为tick。这里使用1秒作为周期。
RT_TIMER_FLAG_PERIODIC | RT_TIMER_FLAG_SOFT_TIMER); // 定时器标志:周期性和软件定时器
// 判断定时器是否创建成功
if (timer != RT_NULL)
{
// 启动定时器
rt_timer_start(timer);
}
return 0;
}