12
返回列表 发新帖
楼主: 胡孟龙

[讨论] 怎么计算在不同型号下的单片机运行Printf()函数的时间?

[复制链接]
  • TA的每日心情
    郁闷
    2021-1-9 21:21
  • 签到天数: 56 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
    发表于 2017-4-16 03:36:57 | 显示全部楼层
    胡孟龙 发表于 2017-4-15 14:12
    谢谢前辈的指点,虽然我现在还是不知道怎么计算Printf函数启动的时间,但是在连续输出200个数据的情况下 ...

    没什麽复杂的,就是不调用那些格式化处理,直接通过UART将数据发送出去,这样最省时间,例如一次发送16bit(2个Byte)应该能满足需要了(你的ADC不会超过16bit的精度吧?),采用DMA的方式发送(这样发送时不需要MCU内核的干预,省时间),关于怎样配置UART的DMA发送方式去看MCU手册的相关配置。
    处理流程如下:
    1、初始化DMA
    2、初始化UART(配置以DMA方式通讯)
    3、接收ADC数据
    4、将ADC数据放置到DMA的缓冲区(数据会通过UART自动发送出去,不需要再干预)
    5、处理下一组ADC
    6、循环到第4步
    这样就OK了
    回复 支持 1 反对 0

    使用道具 举报

    该用户从未签到

    32

    主题

    138

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    390
    最后登录
    2017-12-29
     楼主| 发表于 2017-4-17 12:11:45 | 显示全部楼层
    中山无雪 发表于 2017-4-16 03:36
    没什麽复杂的,就是不调用那些格式化处理,直接通过UART将数据发送出去,这样最省时间,例如一次发送16bi ...

    谢谢前辈!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-3-21 13:20
  • 签到天数: 1 天

    [LV.1]初来乍到

    16

    主题

    124

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    249
    最后登录
    2023-10-24
    发表于 2023-1-25 16:24:01 | 显示全部楼层
    你找个输出口如PA0,然后翻转,然后用示波器测试波形,就知道主循环一次多少us了。
    同理如下伪代码:
    u32 tcc=0;
    tcc++;
    if(10000<tcc)
    {
      tcc=0;
      Printf();
    }
    PA0=!PA0;   //示波器测试

    这时候示波器测试PA0,你会发现众多脉冲里,每隔一段时间,有个较大的缺口,这个缺口就是Printf()运行时间.一般在几ms左右,比较占时间。
    我今天最想说
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-5-2 09:39 , Processed in 0.123189 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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