OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17535|回复: 7

为什么这里一个用u8 一个用u16呢

[复制链接]

28

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-6-17
在线时间
0 小时
发表于 2012-7-2 01:50:39 | 显示全部楼层 |阅读模式
#include <stm32f10x_lib.h>
#include "delay.h"
////////////////////////////////////////////////////////////////////////////////// 
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//Mini STM32开发板
//使用SysTick的普通计数模式对延迟进行管理
//包括delay_us,delay_ms
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2010/5/27
//版本:V1.2
//版权所有,盗版必究。
//Copyright(C) 正点原子 2009-2019
//All rights reserved
//********************************************************************************
//V1.2修改说明
//修正了中断中调用出现死循环的错误
//防止延时不准确,采用do while结构!
////////////////////////////////////////////////////////////////////////////////// 
static u8  fac_us=0;//us延时倍乘数
static u16 fac_ms=0;//ms延时倍乘数   ///这里为什么一个是u8一个是u16呢     
//初始化延迟函数
//SYSTICK的时钟固定为HCLK时钟的1/8
//SYSCLK:系统时钟
void delay_init(u8 SYSCLK)
{
 SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟  HCLK/8
 fac_us=SYSCLK/8;     
 fac_ms=(u16)fac_us*1000;                     //这里的u16有什么用啊   那不是定义了fac_ms为u16么 
}  

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

145

主题

477

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1264
金钱
1264
注册时间
2012-4-2
在线时间
69 小时
发表于 2012-7-2 07:48:00 | 显示全部楼层
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-7-2 08:53:38 | 显示全部楼层
回复【2楼】767904101:
--------------------------------
一个比较小,一个比较大嘛...
回复【2楼】767904101:
---------------------------------
不能去掉!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

28

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-6-17
在线时间
0 小时
 楼主| 发表于 2012-7-2 11:07:25 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------那这里fac_ms=(u16)fac_us*1000;                     //这里的u16有什么用啊   那不是定义了fac_ms为u16么 
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-7-2 11:47:46 | 显示全部楼层
回复【4楼】sunwei056056:
---------------------------------
强制转换啊.
一个u8的数据*1000,就会溢出了,那你的结果就不正确了.所以要强制转换为u16之后,再去乘.
多写代码吧,这些细节的东西,真正你写多了才会注意到.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

145

主题

477

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1264
金钱
1264
注册时间
2012-4-2
在线时间
69 小时
发表于 2012-7-2 12:55:39 | 显示全部楼层
我错了,错看成fac_ms=(u16)(fac_us*1000);

让我想起来了
回复 支持 反对

使用道具 举报

28

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-6-17
在线时间
0 小时
 楼主| 发表于 2012-7-2 15:05:52 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
那一开始就可以定义  u16  fac_us =0;  你那样写有什么好处啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-7-2 17:09:45 | 显示全部楼层
回复【7楼】sunwei056056:
---------------------------------
省内存.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 13:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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