久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2765|回復: 14
打印 上一主題 下一主題
收起左側

為什么keil的多文件工程就有問題

[復制鏈接]
跳轉到指定樓層
樓主
事情是這樣的,在keil上我用單文件功能能實現的功能。
再用多文件工程的時候,功能就實現不了了,就是一個外部中斷控制燈的程序。
用的是51單片機,普中的開發板。


實實在在搞了,兩天沒什么頭緒,工程的各種添加也都添加了,特來交流交流。

14、按鍵換擋模仿產品控制板 - 副本.rar

24.01 KB, 下載次數: 11

程序

普中-2&普中-3&普中-4開發板原理圖.pdf

151.73 KB, 下載次數: 8

原理圖

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:161164 發表于 2023-9-5 18:09 | 只看該作者

回復

使用道具 舉報

板凳
ID:883242 發表于 2023-9-5 22:26 | 只看該作者
你早說是C51啊??

我還以為是RVMDK,興沖沖的進來,掃興回去。
回復

使用道具 舉報

地板
ID:180919 發表于 2023-9-6 00:52 | 只看該作者
中斷就是等按鍵按下,你把按鍵放中斷里,永遠都進不去。
單玩玩的話,去掉按鍵部份,直接按P3.3就可以的,不過沒有消抖會跳,如下1和2。
1、exint1.c
void exti1() interrupt 2 //外部中斷1中斷函數
{
    mode++;       
    if(mode>=3)
                mode=0;       
}

2、exint1.h
sbit KEY4=P3^5;

想加個按鍵觸發的話如下3。
1、exint1.c
void exti1_init(void)
{
        IT1=1;//跳變沿觸發方式(下降沿)
        EX1=1;//打開INT1的中斷允許
        EA=1;//打開總中斷
}

void key(void)
{
        if(!KEY4)
        {
                delay_10us(2000);
                if(!KEY4)
                {          
                        Flag = 0;                               
                }
                while(!KEY4)
                Flag = 1;       
        }
}

void exti1() interrupt 2 //外部中斷1中斷函數
{
        mode++;
        if(mode>=3)
                        mode=0;                       
}


2、exint1.h
//定義獨立按鍵K4控制腳
sbit KEY4=P3^5;
sbit Flag=P3^3;


3、main.c
while(1)
        {               
            key();               
                        switch(mode)
                {
                        case 0: led1=1;led2=1;led3=1;break;
                        case 1: led1=0;led2=0;led3=0;break;
                        case 2: led1=0;led2=0;led3=1;break;
                        case 3: led1=0;led2=1;led3=1;break;
                }
               
        }       

回復

使用道具 舉報

5#
ID:712097 發表于 2023-9-6 08:50 | 只看該作者
沙發說的對,mode全局變量只在exint1.h中定義為extern u8 mode;表示外部已經定義了,但我找遍工程都沒看到哪里有定義。建議在main.c中加入變量申明u8 mode;試試。
回復

使用道具 舉報

6#
ID:647261 發表于 2023-9-6 08:59 | 只看該作者

我用你的文件建了個工程,問題如下:
1. 首先出現以下問題,這個只需要把庫文件路徑設置一下就好了,相信你肯定不是這個問題引起的


2. 已經成功編譯,但是一堆警告,問題點指向mode變量。


沒錯,就是這個變量的問題。
你在exint1.h文件中定義全局變量,但是用了extern u8 mode;這個是引用變量
應該這么改,在main()函數上面定義u8 mode,這樣就沒問題了
或者你把exint1.h文件中的extern u8 mode改成u8 mode,然后在main()函數上面寫上extern u8 mode,也是一樣的
還可以




回復

使用道具 舉報

7#
ID:647261 發表于 2023-9-6 09:07 | 只看該作者
剛剛又試了一下,有一點說錯了,如果mode變量要放在exit文件中定義的話,放.h文件是不行的,要放.c文件中定義,也就是2樓的圖中那樣寫
main()函數中還是要加extern u8 mode的,不然mode變量傳不過去的
回復

使用道具 舉報

8#
ID:1064915 發表于 2023-9-6 09:15 | 只看該作者
在keil4上,不能編譯
回復

使用道具 舉報

9#
ID:1091094 發表于 2023-9-8 10:40 | 只看該作者
joyb 發表于 2023-9-6 09:15
在keil4上,不能編譯

用的是keil c51  而且一個全局變量有問題可能編譯不成功。
回復

使用道具 舉報

10#
ID:1091094 發表于 2023-9-8 10:43 | 只看該作者

是的  就是這個全局變量處理不好,已經解決了,感謝感謝
回復

使用道具 舉報

11#
ID:1091094 發表于 2023-9-8 10:47 | 只看該作者
Hephaestus 發表于 2023-9-5 22:26
你早說是C51啊??

我還以為是RVMDK,興沖沖的進來,掃興回去。

下次在標題標明一下,現在只是在用51單片機,也不知道RVMDK這些東西
回復

使用道具 舉報

12#
ID:1091094 發表于 2023-9-8 11:34 | 只看該作者
sttt300 發表于 2023-9-6 09:07
剛剛又試了一下,有一點說錯了,如果mode變量要放在exit文件中定義的話,放.h文件是不行的,要放.c文件中定 ...

對是的  我是想在.H文件里用extren定義了mode ,然后在main.c文件里再包含對應的.h文件就行了。實際上是不行的,而是要在main.c里面先定義mode,然后再在.h文件用extern聲明才可以用,其中的原因也不清楚。
  不知道是不是文件在多個文件夾的原因,因為在一個文件夾里就可以的。
  
回復

使用道具 舉報

13#
ID:117977 發表于 2023-9-8 12:10 | 只看該作者
會不會是優化等級優化了 volatile 試試。
回復

使用道具 舉報

14#
ID:883242 發表于 2023-9-8 16:39 | 只看該作者
labview_mcu 發表于 2023-9-8 12:10
會不會是優化等級優化了 volatile 試試。

c51與眾不同,假定其用戶都不懂volatile,所以不加都沒有問題。
回復

使用道具 舉報

15#
ID:647261 發表于 2023-9-9 11:04 | 只看該作者
3038838599 發表于 2023-9-8 11:34
對是的  我是想在.H文件里用extren定義了mode ,然后在main.c文件里再包含對應的.h文件就行了。實際上是不 ...

跟文件在哪沒關系,文件在哪只影響你lib路徑的選擇
extern是引用其他文件中的變量,不是定義變量
一定要在一個.c文件中定義了全局變量
如果這個全局變量在另外一個.c文件中引用了的話,就要在那個.c文件也加上這個全局變量的聲明,并且要加extern
也就是這兩句“int mode”和“extern int mode”需要分別放在main.c和exit.c文件中
至于哪句放哪個文件?都可以,只要一個文件一句就行,效果一樣。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费看黄色大片 | 精品久久久久久久久久久 | 四虎在线免费观看视频 | 日本一区二区在线播放 | 免费播放av| 久久一区视频 | 日韩第一区| 在线观看免费av网站 | 国产日韩久久 | 亚洲小说欧美激情另类 | 欧美国产激情 | 一区二区精品 | 国产精品国产成人国产三级 | 天海翼一区二区 | 少妇一级淫片 | 中文字幕综合 | 国产一及片 | 日韩高清中文字幕 | 91久久精品日日躁夜夜躁欧美 | 中文字幕超清在线观看 | 可以看av的网站 | 欧美激情中文字幕 | 秋霞一区二区 | 午夜久久精品 | 一区在线观看视频 | 成人在线免费 | 天天看天天操 | 天天做天天干 | 一级免费看 | 久久精品一区二区 | 黄色一级片免费看 | 成人黄性视频 | 夜夜嗨av一区二区三区网页 | 成年人国产 | 久久精品久久久久久久 | 国产91在线播放 | 成人免费看片39 | 成人一区二区视频 | 91精品国产色综合久久不卡98 | 色综合一区二区 | 亚洲三级av|