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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2707|回復: 14
收起左側

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

[復制鏈接]
ID:1091094 發表于 2023-9-5 16:52 | 顯示全部樓層 |閱讀模式
事情是這樣的,在keil上我用單文件功能能實現的功能。
再用多文件工程的時候,功能就實現不了了,就是一個外部中斷控制燈的程序。
用的是51單片機,普中的開發板。


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

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

24.01 KB, 下載次數: 11

程序

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

151.73 KB, 下載次數: 8

原理圖

回復

使用道具 舉報

ID:161164 發表于 2023-9-5 18:09 | 顯示全部樓層
2023-09-05_180817.png
回復

使用道具 舉報

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;
                }
               
        }       

回復

使用道具 舉報

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

使用道具 舉報

ID:647261 發表于 2023-9-6 08:59 | 顯示全部樓層

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

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

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

44.jpg

回復

使用道具 舉報

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

使用道具 舉報

ID:1064915 發表于 2023-9-6 09:15 | 顯示全部樓層
在keil4上,不能編譯
回復

使用道具 舉報

ID:1091094 發表于 2023-9-8 10:40 | 顯示全部樓層
joyb 發表于 2023-9-6 09:15
在keil4上,不能編譯

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

使用道具 舉報

ID:1091094 發表于 2023-9-8 10:43 | 顯示全部樓層

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

使用道具 舉報

ID:1091094 發表于 2023-9-8 10:47 | 顯示全部樓層
Hephaestus 發表于 2023-9-5 22:26
你早說是C51啊??

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

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

使用道具 舉報

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聲明才可以用,其中的原因也不清楚。
  不知道是不是文件在多個文件夾的原因,因為在一個文件夾里就可以的。
  
回復

使用道具 舉報

ID:117977 發表于 2023-9-8 12:10 | 顯示全部樓層
會不會是優化等級優化了 volatile 試試。
回復

使用道具 舉報

ID:883242 發表于 2023-9-8 16:39 | 顯示全部樓層
labview_mcu 發表于 2023-9-8 12:10
會不會是優化等級優化了 volatile 試試。

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

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产乱码精品1区2区3区 | 中文字幕二区三区 | 99久久99| 综合色在线 | 精品videossex高潮汇编 | 国产成人精品综合 | 99精品欧美一区二区蜜桃免费 | 久久黄色精品视频 | 日韩成人在线视频 | 成人精品在线视频 | 国产精品福利一区二区三区 | 色吧综合| 黄色免费在线观看网站 | 97超碰免费 | 亚洲精品乱码久久久久v最新版 | 91网站在线观看视频 | 亚洲a视| 日韩www| 国产国产精品久久久久 | 81精品国产乱码久久久久久 | 国产精品美女www爽爽爽视频 | 一区二区三区免费在线观看 | 精品视频久久久久久 | 日韩中文字幕视频 | 免费看一区二区三区 | 99re在线视频 | 激情一区二区三区 | 日韩综合网 | 精品乱码一区二区 | 亚洲一区中文字幕在线观看 | 国产精品久久毛片av大全日韩 | 亚洲精品国产成人 | 国产高清免费视频 | 天天躁日日躁aaaa视频 | 日韩精品一区二区三区免费视频 | 久草在线青青草 | 久久久999成人 | 91精品国产91久久久久久吃药 | 色综合久久天天综合网 | 少妇一区二区三区 | 亚洲精品九九 |