OpenEdv-开源电子网

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

STM32代码相关问题,请教一下

[复制链接]

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
发表于 2023-3-6 15:11:53 | 显示全部楼层 |阅读模式
1金钱

int main(void)
{         
        u8 key;
        u16 i=0;
        u8 datatemp[SIZE];
请问在写代码时,定义变量的时候,什么时候写=0;什么时候不用写=0?

最佳答案

查看完整内容[请看2#楼]

这得看你怎么用它,例如: u16 i; U8 buf[5]; 串口接收中断() { buf=SBUF; if(i>=5)i=0; } i未赋初值,就可能为任意值,这就可能造成写数组时越界,就可能把数据写到了未知的位置,就可能死机或出现莫名奇妙的问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-3-6 15:11:54 | 显示全部楼层
本帖最后由 LcwSwust 于 2023-3-6 15:49 编辑

这得看你怎么用它,例如:
u16 i;
U8 buf[5];

串口接收中断()
{
buf[i++]=SBUF;
if(i>=5)i=0;
}
i未赋初值,就可能为任意值,这就可能造成写数组时越界,就可能把数据写到了未知的位置,就可能死机或出现莫名奇妙的问题。
专治疑难杂症
回复

使用道具 举报

3

主题

800

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3775
金钱
3775
注册时间
2017-3-7
在线时间
1645 小时
发表于 2023-3-6 15:31:40 | 显示全部楼层
代码规范,定义变量的同时最好初始化,不管是不是0
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-3-6 17:30:02 | 显示全部楼层
a5820736 发表于 2023-3-6 15:31
代码规范,定义变量的同时最好初始化,不管是不是0

请问老哥你说的初始化是啥意思
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-3-6 17:34:30 | 显示全部楼层
LcwSwust 发表于 2023-3-6 15:48
这得看你怎么用它,例如:
u16 i;
U8 buf[5];

老哥是不是赋值为0的话,就是它在后面用的时候就不能变了,没赋值的话后面还能给它赋值,是这样吗?
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2676
金钱
2676
注册时间
2018-11-8
在线时间
431 小时
发表于 2023-3-6 19:02:28 | 显示全部楼层
=0叫初始化
局部变量不初始化可能是任何值
如果不在开头初始化 后面直接用这个变量参与计算就GG了
所以局部变量 除了用来接收数值的 最好在定义时就都初始化
回复

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4418
金钱
4418
注册时间
2018-5-11
在线时间
923 小时
发表于 2023-3-6 20:06:22 | 显示全部楼层
wsh15249375668 发表于 2023-3-6 17:34
老哥是不是赋值为0的话,就是它在后面用的时候就不能变了,没赋值的话后面还能给它赋值,是这样吗?

变量什么时候都可以变,
任何变量都可在需要的时候赋值,
与申明变量时是否赋值为0没有关系。
只不过:在申明变量时赋值为0或特定的起始值(即所谓的变量初始化)
是一项好的编程习惯。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-3-7 09:10:01 | 显示全部楼层
wsh15249375668 发表于 2023-3-6 17:34
老哥是不是赋值为0的话,就是它在后面用的时候就不能变了,没赋值的话后面还能给它赋值,是这样吗?

都能给它赋值,你可以百度一下 C语言 变量 初始化,或翻一下C语言的书,无关STM32,这是C语言的基础。
专治疑难杂症
回复

使用道具 举报

3

主题

800

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3775
金钱
3775
注册时间
2017-3-7
在线时间
1645 小时
发表于 2023-3-7 14:39:07 | 显示全部楼层
需要沉下心学学c语言的基础知识
回复

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2023-3-4
在线时间
6 小时
发表于 2023-3-7 14:44:22 | 显示全部楼层
本帖最后由 mmmyyy999 于 2023-3-7 14:46 编辑

c语言中要有变量必须要定义 但是可以没有初始值, 编译器会自动赋予一个初始值 也就是说定义变量的时候 你设不设等于0都是无所谓的 编译器都会帮你设置 但不一定是你想要的 所以最好一开始就预设一个值避免后续调试的时候不必要的麻烦
初始化就是你程序开始的时候要先按预设的内容进行设置 举个例子比如说你在网吧租了个号玩英雄联盟 进游戏先要设置一下快捷施法 和你习惯的快捷键 这个过程就叫初始化 程序中的初始化往往就是在程序运行前给一些变量赋值啊 给单片机的寄存器赋值这样的 如果你不赋值就直接开干很容易出现程序bug 我举个例子 比如A在做饭 B在上厕所 C在喝水 D在待命 你突然下道命令立刻出列报数 ABC都会出现奇怪的情况 这种时候你需要先下一道命令 全部收拾好待命 然后再是出列报数
说的不对的地方请大佬指正
回复

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2023-3-4
在线时间
6 小时
发表于 2023-3-7 14:47:20 | 显示全部楼层
wsh15249375668 发表于 2023-3-6 17:34
老哥是不是赋值为0的话,就是它在后面用的时候就不能变了,没赋值的话后面还能给它赋值,是这样吗?

后面用的时候还可以变 因为他是一个变量 如果你加了const修饰就不能变了 因为那会变成常量 常量不可更改 我建议你先从头学习c语言打好基础再来研究单片机
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-3-7 15:41:29 | 显示全部楼层
mmmyyy999 发表于 2023-3-7 14:47
后面用的时候还可以变 因为他是一个变量 如果你加了const修饰就不能变了 因为那会变成常量 常量不可更改  ...

好的,谢谢
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-3-7 15:46:20 | 显示全部楼层
mmmyyy999 发表于 2023-3-7 14:44
c语言中要有变量必须要定义 但是可以没有初始值, 编译器会自动赋予一个初始值 也就是说定义变量的时候 你设 ...

知道了,感谢,请问写单片机的代码c语言的哪些东西是必须会的,所有吗?
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2020-12-28
在线时间
5 小时
发表于 2023-3-7 16:10:47 | 显示全部楼层
wsh15249375668 发表于 2023-3-7 15:46
知道了,感谢,请问写单片机的代码c语言的哪些东西是必须会的,所有吗?

基本上在你能搜到的学习C语言相关过程的书籍或者资料中,从开始一直看到指针、数组等方面的知识内容后,就基本具有了编写单片机代码的能力。至于其他的可以在应用过程中查缺补漏的学习
回复

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2023-3-7 16:14:25 | 显示全部楼层
yangt3344 发表于 2023-3-7 16:10
基本上在你能搜到的学习C语言相关过程的书籍或者资料中,从开始一直看到指针、数组等方面的知识内容后, ...

知道了,感谢
回复

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2023-3-4
在线时间
6 小时
发表于 2023-3-7 16:44:13 | 显示全部楼层
wsh15249375668 发表于 2023-3-7 15:46
知道了,感谢,请问写单片机的代码c语言的哪些东西是必须会的,所有吗?

c语言必须要有一定的基础 把菜鸟教程上关于c语言的东西看完就行了 或者找个网课学习一下c语言入门 入了门就行了 高深的以后慢慢学习
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 15:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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