注册 登录
查看: 362|回复: 4

[K60] 请教关于延时的问题

[复制链接]
发表于 2014-10-4 10:14:34 | 显示全部楼层 |阅读模式
在conf.h文件中有如下代码
/*
* 配置延时函数
*/
#if 1
#include "MK60_DWT.h"                       //推荐使用
#define DELAY()         dwt_delay_ms(500)
#define DELAY_MS(ms)    dwt_delay_ms(ms)
#define DELAY_US(us)    dwt_delay_us(us)
#elif   0
#include "MK60_lptmr.h"
#define     DELAY()         lptmr_delay_ms(500)
#define     DELAY_MS(ms)    lptmr_delay_ms(ms)
#define     DELAY_US(us)    lptmr_delay_us(us)
#elif   0
#include "MK60_pit.h"
#define DELAY()         pit_delay_ms(PIT3,500)
#define DELAY_MS(ms)    pit_delay_ms(PIT3,ms)
#define DELAY_US(us)    pit_delay_us(PIT3,us)
#else
#include "MK60_SysTick.h"
#define DELAY()         systick_delay_ms(500)
#define DELAY_MS(ms)    systick_delay_ms(ms)
#define DELAY_US(us)    systick_delay_us(us)
#endif

这段代码中有四种类型的延时,但是延时的名字是一样的,我如果想选择其中一种的话是不是把它对应的#elif后面的0改成1就可以?始终保持四个选项中有一个是1其他三个为0就可以选择对应的延时类型吗?
回复

使用道具 举报

发表于 2014-10-4 10:46:48 | 显示全部楼层
这个是条件编译,跟c普通if用法类似,0表示条件不成立,不用。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-4 10:47:14 | 显示全部楼层
第二个问题
void sysinit (void)
{
    core_clk_mhz = pll_init(CORE_CLK);     //设置系统时钟

    core_clk_khz = core_clk_mhz * 1000;     //把配置好的时钟都保存在全局变量里,以便后续使用
    bus_clk_khz = core_clk_khz / (((SIM_CLKDIV1 & SIM_CLKDIV1_OUTDIV2_MASK) >> 24) + 1);

    uart_init (FIRE_PORT, FIRE_BAUD);   //初始化printf用到的管脚
}
这里假如我超频到200M的话那么core_clk_mhz也是200M,但是下面一句core_clk_khz = core_clk_mhz * 1000;这个core_clk_khz难道是200 000 000 000这么大?因为我看了别人的程序中有段自己写的延时函数,其中用到了core_clk_khz这个变量,然后设定了一个数去自减达到延时的微秒级别的效果,所以想自己写一个试试,但是这里苦于不知道该用哪个频率去确定我的变量的公式,而且不知道这个频率是多大,因为看到那个”core_clk_khz = core_clk_mhz * 1000“翻了1000倍有点不敢相信,请指教
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-4 11:16:38 | 显示全部楼层
微粒子 发表于 2014-10-4 10:46
这个是条件编译,跟c普通if用法类似,0表示条件不成立,不用。

嗯嗯  这个明白了
回复 支持 反对

使用道具 举报

发表于 2014-10-4 12:52:27 | 显示全部楼层
六步上篮 发表于 2014-10-4 10:47
第二个问题
void sysinit (void)
{

看单位,不同单位的。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部