欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 如何在單片機(jī)上使用全局變量 [打印本頁(yè)]

作者: miaoxiaobaiqaq    時(shí)間: 2019-4-12 20:03
標(biāo)題: 如何在單片機(jī)上使用全局變量
在單片機(jī)中經(jīng)常會(huì)遇到二個(gè)不同的.c文件需要使用同一個(gè)變量,但如何定義一個(gè)變量可以在不同的.c文件中使用呢?  當(dāng)然是使用全局變量啦,可能有的人知道需要用extern來(lái)聲明變量,當(dāng)時(shí)總是編譯錯(cuò)誤,當(dāng)然啦,我也是經(jīng)常錯(cuò)誤,才寫這個(gè)筆記的啊

下面我先介紹一下怎么正確的使用,在貼幾張錯(cuò)誤使用全局變量的方法
如何正確的使用extern,實(shí)現(xiàn)main.c   led.c同時(shí)使用變量aaa

1在main.c中定義變量  int aaa=0;
2在led.c中定義 extern int aaa;(千萬(wàn)不要賦值)

這樣就可以二個(gè).c文件都可以使用aaa這個(gè)變量了,我之前為什么一直寫錯(cuò)呢,我理解錯(cuò)了extern的作用,其實(shí)extern是告訴編譯器這個(gè)變量在其他.c文件里面有了,取其他文件找就行了,哈哈,能搜到我這個(gè)的肯定是和我犯了一樣的錯(cuò)誤吧
現(xiàn)在貼幾張錯(cuò)誤的使用



顯示提示有錯(cuò)誤:ERROR L104: MULTIPLE PUBLIC DEFINITIONS


現(xiàn)在把extern int aaa=0;改為extern int aaa;結(jié)果如下


希望能幫到和我一樣的單片機(jī)小白吧



作者: tieq1952    時(shí)間: 2019-4-13 07:16
謝謝分享!!!
作者: hls123    時(shí)間: 2019-4-13 10:48
還有一種不要模塊化,把所有子函數(shù)放在一個(gè).c里面,然后定義變量主函數(shù)最上面定義的就是全局變量,在子函數(shù)里定義就是局部變量
作者: miaoxiaobaiqaq    時(shí)間: 2019-4-14 11:02
hls123 發(fā)表于 2019-4-13 10:48
還有一種不要模塊化,把所有子函數(shù)放在一個(gè).c里面,然后定義變量主函數(shù)最上面定義的就是全局變量,在子函數(shù) ...

你說(shuō)的對(duì),開始不會(huì)調(diào)用其他模塊的變量我就是把所有模塊放在一起寫,不過(guò)這樣寫的話如果以后需要用這個(gè)模塊就很不方便了,代碼模塊化以后調(diào)用起來(lái)特別方便
作者: miaoxiaobaiqaq    時(shí)間: 2019-4-14 11:03
tieq1952 發(fā)表于 2019-4-13 07:16
謝謝分享!!!

不謝不謝
作者: 郭龍·    時(shí)間: 2019-7-27 10:36
能不能舉個(gè)程序的例子呀 自己小白
作者: wuxiaojia    時(shí)間: 2019-7-27 13:42
1在main.c中定義變量  int aaa=0;
2在led.c中定義 extern int aaa;(千萬(wàn)不要賦值)
第二點(diǎn)非常重要,賦值就會(huì)報(bào)錯(cuò)了
作者: 7631001    時(shí)間: 2021-11-17 21:27
明白了,謝謝
作者: rz12345    時(shí)間: 2021-11-18 10:05
學(xué)習(xí)了,“其實(shí)extern是告訴編譯器這個(gè)變量在其他.c文件里面有了”重點(diǎn)
作者: 吳作和    時(shí)間: 2021-11-20 19:59
在led.c中,變量aaa不能賦值了,那有什么用
作者: 232-51    時(shí)間: 2021-11-20 20:34
常用變量直接建個(gè)變量聲明文件?
作者: ayld    時(shí)間: 2023-9-3 22:17

在led.c中,變量aaa不能賦值了,那有什么用

是的在其他文件中肯定要賦值的!
作者: likejian    時(shí)間: 2023-9-3 23:09
感謝提供出來(lái),我也為這個(gè)煩惱了很久,
作者: 123156fsadf    時(shí)間: 2023-9-4 08:39
likejian 發(fā)表于 2023-9-3 23:09
感謝提供出來(lái),我也為這個(gè)煩惱了很久,

其實(shí)最好不要用全局變量,你可以在a.c中定義一個(gè)static uint16_t  test = 0; 然后在a.c中寫一個(gè)函數(shù),uint16_t GetTest(void)
{
    return test;
}
這樣寫,一個(gè)模塊最好只有幾個(gè)外部接口,如果變量過(guò)多可以用一個(gè)結(jié)構(gòu)體包含

作者: 13205495918    時(shí)間: 2023-9-4 12:54
只可以有一個(gè)定義,但是可以有很多個(gè)聲明
作者: zhxzhx    時(shí)間: 2023-9-5 19:35
吳作和 發(fā)表于 2021-11-20 19:59
在led.c中,變量aaa不能賦值了,那有什么用

不能在聲明的時(shí)候賦值,C怎么學(xué)的啊
作者: 3038838599    時(shí)間: 2023-9-7 15:54
123156fsadf 發(fā)表于 2023-9-4 08:39
其實(shí)最好不要用全局變量,你可以在a.c中定義一個(gè)static uint16_t  test = 0; 然后在a.c中寫一個(gè)函數(shù),uin ...

為什么要這樣寫呢 覺(jué)得這樣太麻煩了,一個(gè)全局變量直接搞定了
作者: ayld    時(shí)間: 2023-10-14 10:00
wuxiaojia 發(fā)表于 2019-7-27 13:42
1在main.c中定義變量  int aaa=0;
2在led.c中定義 extern int aaa;(千萬(wàn)不要賦值)
第二點(diǎn)非常重要,賦值 ...

在程序中可以賦值,
aaa=0;


作者: 趣致克林    時(shí)間: 2023-10-16 17:25
也可以在一個(gè).c文件里面定義變量,然后在.h頭文件里面extern 這個(gè)變量就可以,之后在用到這個(gè)變量的.c文件里面包含這個(gè)頭文件
作者: xuuummmm    時(shí)間: 2023-10-17 09:41
謝謝,真的很需要
作者: 123156fsadf    時(shí)間: 2025-7-28 17:18
3038838599 發(fā)表于 2023-9-7 15:54
為什么要這樣寫呢 覺(jué)得這樣太麻煩了,一個(gè)全局變量直接搞定了

​​1、內(nèi)存資源浪費(fèi)​​
全局變量在程序​​整個(gè)生命周期​​占用RAM空間(即使長(zhǎng)時(shí)間不使用)
示例:在資源受限的STM32F103(僅20KB RAM)中聲明uint32_t globalBuffer[1024]會(huì)直接消耗4KB內(nèi)存(占總量20%)
2、​​耦合性災(zāi)難
3、​​不可重入性陷阱
4、​​初始化順序漏洞
5、中斷沖突(最危險(xiǎn)場(chǎng)景)
6、多線程競(jìng)爭(zhēng)(RTOS環(huán)境)
7、調(diào)試地獄
8、代碼復(fù)用障礙

使用全局變量問(wèn)題很多,很麻煩的
作者: fj51hei    時(shí)間: 2025-7-29 09:08
吳作和 發(fā)表于 2021-11-20 19:59
在led.c中,變量aaa不能賦值了,那有什么用

是聲明的時(shí)候不要賦值,不是函數(shù)內(nèi)不要操作這個(gè)變量
作者: fj51hei    時(shí)間: 2025-7-29 09:18
123156fsadf 發(fā)表于 2023-9-4 08:39
其實(shí)最好不要用全局變量,你可以在a.c中定義一個(gè)static uint16_t  test = 0; 然后在a.c中寫一個(gè)函數(shù),uin ...

你這個(gè)函數(shù)是怎么起作用的?能在不同的C文件做傳遞的,能說(shuō)說(shuō)?
作者: 18701931930    時(shí)間: 2025-7-29 09:24
123156fsadf 發(fā)表于 2025-7-28 17:18
​​1、內(nèi)存資源浪費(fèi)​​
全局變量在程序​​整個(gè)生命周期​&#8203 ...

我個(gè)人喜歡使用函數(shù)傳遞的方式讀寫。
全局變量基本上都是靜態(tài)全局變量。
作者: likejian    時(shí)間: 2025-7-29 14:06
還在單片機(jī)入門階段




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1