找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 320|回复: 2
打印 上一主题 下一主题
收起左侧

keil c51平台软件版本V9.61 数据比较大小怪事

[复制链接]
跳转到指定楼层
楼主
ID:939553 发表于 2025-5-24 16:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定义一个全局变量uint16_t sys_tick ,在定时器内sys_tick ++,通过uint16 get_sys_tick(void){return sys_tick;}

在主循环程序:
uintdata = get_sys_ticks();
               
                while(1)
                {
                        uint16_t uintll = get_sys_ticks();
                        if((uintll - uintdata) >= 50u){uart0_dbg("\r\n[%u,%u]", uintdata, uintll); uintdata = uintll;}
                }

现在的现象为
随机为获取到了sys_tick出现回转,如上次为513,下次获取的为324.
如果这样处理就不会.
if((uint8_t)(uintll - uintdata) >= 50u){uart0_dbg("\r\n[%u,%u]", uintdata, uintll); uintdata = uintll;}
请教各位
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1149997 发表于 2025-5-25 11:37 | 只看该作者
324 - 513 = 324 + (65536 - 513) = 324 + 65023 = 65347 (uint16_t)
改成下面这种试试:
if ((uint8_t)(uintll - uintdata) >= 50u)
回复

使用道具 举报

板凳
ID:939553 发表于 2025-5-25 21:37 | 只看该作者
紫电谈论 发表于 2025-5-25 11:37
324 - 513 = 324 + (65536 - 513) = 324 + 65023 = 65347 (uint16_t)
改成下面这种试试:
if ((uint8_t)( ...

你计算的理解是对的.左右两方等式判断不存在问题.就是为什么会影响到uintll 的值(或sys_tick)
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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