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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6354|回復(fù): 35
打印 上一主題 下一主題
收起左側(cè)

C語(yǔ)言如何讓兩個(gè)步長(zhǎng)不一樣的FOR循環(huán)同時(shí)執(zhí)行?

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:653173 發(fā)表于 2020-7-14 08:46 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
C如何讓兩個(gè)步長(zhǎng)不一樣的FOR循環(huán)同時(shí)執(zhí)行?互不干擾,求大俠指點(diǎn)

void main()                                       
{            
        uchar i,j;

        while(1)
        {
//            for(i=0,j=0;i<8||j<15;i++,j++)  
              for(i=0;i<8;i++)
                {
               //循環(huán)體1
                }

                for(j=0;j<15;j++)
                {               
                //循環(huán)體2
                }
         }
        
}



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

使用道具 舉報(bào)

沙發(fā)
ID:331263 發(fā)表于 2020-7-14 09:47 | 只看該作者
void main()                                       
{            
        uchar i;

        while(1)
        {
                for(i=0;i<15;i++)
                {  
                    if((i*2)<15)   
                    {
                   //循環(huán)體1
                    }           
                   //循環(huán)體2
                }
         }      
}

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:653173 發(fā)表于 2020-7-14 10:20 | 只看該作者
dingpeng1980 發(fā)表于 2020-7-14 09:47
void main()                                       
{            
        uchar i;

if語(yǔ)句嵌套也不行啊,一個(gè)步長(zhǎng)是8,一個(gè)是15,兩個(gè)要隨時(shí)都能運(yùn)行。這樣還是有一段時(shí)間循環(huán)體1沒(méi)有繼續(xù)執(zhí)行,在等待循環(huán)體2執(zhí)行完畢15個(gè)步長(zhǎng)
回復(fù)

使用道具 舉報(bào)

地板
ID:142320 發(fā)表于 2020-7-14 12:12 | 只看該作者
你對(duì)C語(yǔ)言和編程的理解有誤,我們?yōu)槭裁窗褍蓚(gè)不同for要同步,你要實(shí)現(xiàn)這個(gè)的目的是為了什么。否則都是無(wú)意義的問(wèn)題。
回復(fù)

使用道具 舉報(bào)

5#
ID:653173 發(fā)表于 2020-7-14 12:41 | 只看該作者
gujp312365 發(fā)表于 2020-7-14 12:12
你對(duì)C語(yǔ)言和編程的理解有誤,我們?yōu)槭裁窗褍蓚(gè)不同for要同步,你要實(shí)現(xiàn)這個(gè)的目的是為了什么。否則都是無(wú)意 ...

循環(huán)體1的輸出與i有關(guān),循環(huán)體2的輸出與J有關(guān)。,比如P1口控制流水燈,P1口同時(shí)控制8段碼
回復(fù)

使用道具 舉報(bào)

6#
ID:451718 發(fā)表于 2020-7-14 15:08 | 只看該作者
做時(shí)間定標(biāo),用定時(shí)器來(lái)實(shí)現(xiàn)。   基于硬件的編程,不要老想著用算法來(lái)搞。   程序?qū)懙迷倩ǎ痪幾g就給你優(yōu)化了。
回復(fù)

使用道具 舉報(bào)

7#
ID:451718 發(fā)表于 2020-7-14 15:09 | 只看該作者
做時(shí)間定標(biāo),然后在定時(shí)器里面去實(shí)現(xiàn)。   面向硬件的編程,不要老實(shí)想著算法, 程序再花,一編譯就優(yōu)化了

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

8#
ID:451718 發(fā)表于 2020-7-14 15:10 | 只看該作者
void tm0_isr() interrupt 1         //中斷入口
{
        SysTick++;
回復(fù)

使用道具 舉報(bào)

9#
ID:451718 發(fā)表于 2020-7-14 15:14 | 只看該作者
void tm0_isr() interrupt 1         //中斷入口
{
        SysTick++;
}

void main()
{
    switch(SysTick%8)
   {
        case 0:
            i= 0;
            j= 0;
            j= 1;
        break;
        case 1:
            i= 1;
            j= 2;
            j= 3;
        break;
        case 2:
            i= 2;
            j= 4;
            j= 5;
       break;
    ...........

   }
}
回復(fù)

使用道具 舉報(bào)

10#
ID:735148 發(fā)表于 2020-7-14 15:14 | 只看該作者
嚴(yán)格意義上的同時(shí),只能執(zhí)行一個(gè);
你可以利用定時(shí)器定時(shí),一個(gè)主要執(zhí)行,另外一個(gè)隔一段時(shí)間執(zhí)行一段,只要時(shí)間設(shè)置的足夠短,就可以理解為同時(shí)執(zhí)行。
回復(fù)

使用道具 舉報(bào)

11#
ID:636538 發(fā)表于 2020-7-14 15:28 | 只看該作者
soaic 發(fā)表于 2020-7-14 12:41
循環(huán)體1的輸出與i有關(guān),循環(huán)體2的輸出與J有關(guān)。,比如P1口控制流水燈,P1口同時(shí)控制8段碼

在我這看來(lái),這個(gè)本身就不能同時(shí),你的理解有誤,雖然IO復(fù)用,但是是不同時(shí)間的使用,單片機(jī)執(zhí)行的速度讓你感覺(jué)在同時(shí)執(zhí)行

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

12#
ID:553941 發(fā)表于 2020-7-14 15:28 | 只看該作者
這個(gè)問(wèn)題問(wèn)的,for循環(huán)本來(lái)就是要執(zhí)行完內(nèi)部的程序才能跳出,兩個(gè)for肯定是兩個(gè)單獨(dú)的。優(yōu)化你的邏輯吧,另外,單片機(jī)同一時(shí)刻只能做一件事
回復(fù)

使用道具 舉報(bào)

13#
ID:639106 發(fā)表于 2020-7-14 19:59 | 只看該作者
C不允許兩條或兩條以上的語(yǔ)句同時(shí)執(zhí)行,你可以用定時(shí)器來(lái)切換這兩個(gè)for循環(huán)
回復(fù)

使用道具 舉報(bào)

14#
ID:284454 發(fā)表于 2020-7-14 20:17 | 只看該作者
void main()                                       
{            
        uchar i,j,k=1;

        while(1)
        {
            if(k==1)

              for(i=0;i<8;i++)
                {
               //循環(huán)體1
                k=0
                }
           else
                for(j=0;j<15;j++)
                {               
                //循環(huán)體2
               k=1
                }
         }
        
}
c單個(gè)處理器永遠(yuǎn)沒(méi)有同時(shí)同步的,只是無(wú)限接近同時(shí)同步,都是一步一步執(zhí)行,切換快而已。
引入一個(gè)數(shù),相當(dāng)于正反轉(zhuǎn),每個(gè)循環(huán)執(zhí)行一次就切換另一個(gè)循環(huán)。
中間忽略了幾個(gè)指令周期,看看是不是和你的意思。
回復(fù)

使用道具 舉報(bào)

15#
ID:332444 發(fā)表于 2020-7-14 21:08 | 只看該作者
比如P1口控制流水燈,P1口同時(shí)控制8段碼,沒(méi)說(shuō)明清楚是要怎樣控制,數(shù)碼管顯示0-9?流水燈從左到右?
回復(fù)

使用道具 舉報(bào)

16#
ID:332444 發(fā)表于 2020-7-14 21:16 | 只看該作者
所謂同時(shí)也可以理解為多任務(wù)當(dāng)然也是存在前后一個(gè)機(jī)器周期的,真正的同時(shí)也是可以的,就是用同一個(gè)計(jì)數(shù)達(dá)到不同值時(shí)的不同處理,比如i計(jì)數(shù)到8就執(zhí)行再到15就執(zhí)行可視為同時(shí)。
回復(fù)

使用道具 舉報(bào)

17#
ID:592807 發(fā)表于 2020-7-15 08:31 | 只看該作者
看了一圈不知道你要要什么東西。講一下自己的了理解吧。i和j要相互獨(dú)立而 i是8循環(huán)j是15循環(huán)的對(duì)吧
i = 0 j = 0
i = 1 j =1
.
.
.
i = 7 j = 7
i = 0 j = 8.
.
.

i = 6 j = 14
i = 7 j = 0

這樣循環(huán)的對(duì)吧,你用取余數(shù)方法就可以得到你要的結(jié)果。
for(k = 0;k <120;k++)
i = k % 8;
j = k % 15;
i和j的值同時(shí)增大循環(huán),取值相互獨(dú)立。
回復(fù)

使用道具 舉報(bào)

18#
ID:331263 發(fā)表于 2020-7-15 08:51 | 只看該作者
重點(diǎn)看周期,如果小于循環(huán)周期就認(rèn)為是同時(shí)運(yùn)行,大于循環(huán)周期就提高時(shí)鐘頻率,在不夠用就只有換cpu了
回復(fù)

使用道具 舉報(bào)

19#
ID:331263 發(fā)表于 2020-7-15 08:55 | 只看該作者
soaic 發(fā)表于 2020-7-14 12:41
循環(huán)體1的輸出與i有關(guān),循環(huán)體2的輸出與J有關(guān)。,比如P1口控制流水燈,P1口同時(shí)控制8段碼

你這不是總線通訊原理么?你還要一個(gè)時(shí)鐘線,看看IIC通訊原理吧
回復(fù)

使用道具 舉報(bào)

20#
ID:331263 發(fā)表于 2020-7-15 09:02 | 只看該作者
dingpeng1980 發(fā)表于 2020-7-15 08:55
你這不是總線通訊原理么?你還要一個(gè)時(shí)鐘線,看看IIC通訊原理吧

簡(jiǎn)單點(diǎn)的增加1個(gè)使能口,一個(gè)高使能一個(gè)低使能就能驅(qū)動(dòng)2個(gè)了,這不是程序的問(wèn)題你要搞懂原理
回復(fù)

使用道具 舉報(bào)

21#
ID:282850 發(fā)表于 2020-7-15 10:03 | 只看該作者
問(wèn)題很是怪,程序是順序執(zhí)行的,這是基本思想,再加上中斷。但永遠(yuǎn)不可能同時(shí)執(zhí)行
回復(fù)

使用道具 舉報(bào)

22#
ID:311846 發(fā)表于 2020-7-15 11:43 | 只看該作者
非多核芯片做不到同時(shí)執(zhí)行,無(wú)論多NB的單核芯片都是受時(shí)間輪執(zhí)行的,單片機(jī)允許時(shí)間誤差內(nèi)一般當(dāng)做同時(shí)執(zhí)行處理,如UCOSII之類(lèi)的多線程也是有時(shí)間差的,主要是看做什么,了解原理,才能編寫(xiě)相應(yīng)的程序
回復(fù)

使用道具 舉報(bào)

23#
ID:653173 發(fā)表于 2020-7-16 10:10 | 只看該作者
xianfajushi 發(fā)表于 2020-7-14 21:08
比如P1口控制流水燈,P1口同時(shí)控制8段碼,沒(méi)說(shuō)明清楚是要怎樣控制,數(shù)碼管顯示0-9?流水燈從左到右?

是的。。。。
回復(fù)

使用道具 舉報(bào)

24#
ID:653173 發(fā)表于 2020-7-16 10:12 | 只看該作者
本帖最后由 soaic 于 2020-7-16 10:18 編輯
ko44 發(fā)表于 2020-7-14 20:17
void main()                                       
{            
        uchar i,j,k=1;

提供了一個(gè)很好的方法,謝謝!但是上述代碼還是不能跳出循環(huán),不能實(shí)現(xiàn)P0口跑馬燈移位的同時(shí),P1口數(shù)碼管0-9顯示
回復(fù)

使用道具 舉報(bào)

25#
ID:653173 發(fā)表于 2020-7-16 10:27 | 只看該作者
本帖最后由 soaic 于 2020-7-16 10:30 編輯
黃youhui 發(fā)表于 2020-7-15 08:31
看了一圈不知道你要要什么東西。講一下自己的了理解吧。i和j要相互獨(dú)立而 i是8循環(huán)j是15循環(huán)的對(duì)吧
i = 0  ...

謝謝大俠,利用公約數(shù)取余的方法解決了同步執(zhí)行的問(wèn)題,類(lèi)似天干地支計(jì)年;代碼也簡(jiǎn)單,牛!!!!
回復(fù)

使用道具 舉報(bào)

26#
ID:473925 發(fā)表于 2020-7-16 10:37 | 只看該作者
如果真正意義上的同時(shí) ,要用FPGA 來(lái)做
回復(fù)

使用道具 舉報(bào)

27#
ID:804115 發(fā)表于 2020-7-16 12:01 | 只看該作者
兄弟,雖然你的表述不是很清晰,大家都不太好理解你要具體做什么,但我基本理解你要干什么了。
我想你是想問(wèn),當(dāng)我們編程時(shí),想讓多個(gè)任務(wù)同時(shí)運(yùn)行應(yīng)該怎么編程,且在各個(gè)任務(wù)運(yùn)行時(shí)盡可能互不影響,對(duì)吧?
首先,絕對(duì)的不影響是不可能的,因?yàn)閙cu一般都是單核的,同一時(shí)間,一個(gè)指令周期只能執(zhí)行一條命令。但我們還是可以做到通過(guò)肉眼看兩個(gè)任務(wù)是同時(shí)運(yùn)行的。比如流水燈和數(shù)碼管顯示,因?yàn)樗麄兌际强刂苅o翻轉(zhuǎn),耗時(shí)很小。
解決方法有兩種:一種就是借助OS系統(tǒng),可以簡(jiǎn)化代碼,但需要熟悉OS系統(tǒng);另外一種就是通過(guò)大循環(huán)里的標(biāo)記判斷; OS的就不說(shuō)了,下面針對(duì)大循環(huán)舉例說(shuō)明一下:
基本思想:各個(gè)任務(wù)在寫(xiě)代碼的形式上保持獨(dú)立性,這樣便于后期代碼維護(hù),同時(shí)要讓各個(gè)任務(wù)之間的互相影響達(dá)到最小。
基本手段:拆分每個(gè)耗時(shí)的任務(wù),每次大循環(huán)只執(zhí)行拆分大任務(wù)后的一個(gè)個(gè)小部分。
       
       
unsigned char LedCnt=0,SmgCnt=0;

void led_handler(void)
{
  if(LedCnt < 8)
  {
    //循環(huán)體1   
  }else
  {
    LedCnt = 0;
  }
  LedCnt ++;
}

void shu_ma_guan_handler(void)
{
  if(SmgCnt < 8)
  {
    //循環(huán)體2
  }else
  {
    SmgCnt = 0;
  }
  SmgCnt ++;  
}

while(1)
{
  led_handler();
  shu_ma_guan_handler();
}


如果我理解錯(cuò)誤,沒(méi)有及時(shí)看到,可以給我qq發(fā)郵件,qq號(hào)如名。
回復(fù)

使用道具 舉報(bào)

28#
ID:653173 發(fā)表于 2020-7-16 14:14 | 只看該作者
本帖最后由 soaic 于 2020-7-16 14:51 編輯
黃youhui 發(fā)表于 2020-7-15 08:31
看了一圈不知道你要要什么東西。講一下自己的了理解吧。i和j要相互獨(dú)立而 i是8循環(huán)j是15循環(huán)的對(duì)吧
i = 0  ...

最大公約數(shù)取余,相當(dāng)于天干地支紀(jì)年,這是最簡(jiǎn)單的實(shí)現(xiàn)辦法。但是要滿足步長(zhǎng)8和15,公約數(shù)還得增加一下
for(k=0;k<144;k++)         //最大公約數(shù)取余同時(shí)執(zhí)行
  {
      i=k%9;
      j=k%16;
     //原P0口循環(huán)體
     //原P1口循環(huán)體
    delay(500);
}
回復(fù)

使用道具 舉報(bào)

29#
ID:332444 發(fā)表于 2020-7-16 16:45 | 只看該作者

之前我回復(fù)過(guò)一個(gè)帖子,說(shuō)明了一個(gè)P加一片鎖存器就可以實(shí)現(xiàn)對(duì)8位數(shù)碼管的控制,你的描述還是不夠清楚,說(shuō)要控制8段碼是指只給數(shù)碼管的段值而不控制數(shù)碼管的位?
可以明確回復(fù)你的是可以實(shí)現(xiàn)的加1片鎖存器即可解放P,若用2片鎖存器可實(shí)現(xiàn)控制數(shù)碼管的段和位,同時(shí)也能實(shí)現(xiàn)流水燈。
回復(fù)

使用道具 舉報(bào)

30#
ID:804329 發(fā)表于 2020-7-16 16:54 | 只看該作者
使用定時(shí)器中斷就行,在main函數(shù)執(zhí)行一個(gè)語(yǔ)句,在中斷服務(wù)函數(shù)執(zhí)行另一個(gè)。把中斷服務(wù)函數(shù)進(jìn)入間隔調(diào)小點(diǎn)就能看成同時(shí)進(jìn)行。這就是前后臺(tái)系統(tǒng)。
回復(fù)

使用道具 舉報(bào)

31#
ID:332444 發(fā)表于 2020-7-16 16:55 | 只看該作者
當(dāng)然執(zhí)行肯定是分時(shí)的,單核不可能實(shí)現(xiàn)并行,只能說(shuō)使用手段可以實(shí)現(xiàn)一個(gè)P多重復(fù)用,且在時(shí)間安排允許的范圍內(nèi)。
回復(fù)

使用道具 舉報(bào)

32#
ID:332444 發(fā)表于 2020-7-16 17:02 | 只看該作者
我寫(xiě)的示例有用一個(gè)循環(huán)控制2種不同的延時(shí),這很容易實(shí)現(xiàn),但不是你要實(shí)現(xiàn)的目標(biāo),因此說(shuō)你描述不夠清楚,你要實(shí)現(xiàn)的功能不是用并行循環(huán)去實(shí)現(xiàn)的。
回復(fù)

使用道具 舉報(bào)

33#
ID:653173 發(fā)表于 2020-7-17 11:02 | 只看該作者
1692483014 發(fā)表于 2020-7-16 12:01
兄弟,雖然你的表述不是很清晰,大家都不太好理解你要具體做什么,但我基本理解你要干什么了。
我想你是想 ...

這也可以,但是要把兩個(gè)LedCnt ++;、 SmgCnt ++;  放在循環(huán)體下一行
回復(fù)

使用道具 舉報(bào)

34#
ID:280512 發(fā)表于 2020-7-17 14:22 | 只看該作者
單片機(jī)硬件的工作就是由時(shí)鐘同步,去一個(gè)周期一個(gè)周期的去執(zhí)行指令。在一個(gè)cpu的條件下。不可能一個(gè)脈沖去執(zhí)行兩個(gè)指令
回復(fù)

使用道具 舉報(bào)

35#
ID:804733 發(fā)表于 2020-7-17 14:30 | 只看該作者
定時(shí)器或者使用操作系統(tǒng)(RTOS)
回復(fù)

使用道具 舉報(bào)

36#
ID:284454 發(fā)表于 2020-7-17 22:56 | 只看該作者
soaic 發(fā)表于 2020-7-16 10:12
提供了一個(gè)很好的方法,謝謝!但是上述代碼還是不能跳出循環(huán),不能實(shí)現(xiàn)P0口跑馬燈移位的同時(shí),P1口數(shù)碼管 ...

代碼只是弄了個(gè)接近同步的循環(huán)而已,每個(gè)循環(huán)需要執(zhí)行什么任務(wù),在單個(gè)循環(huán)里面再編輯功能。就跟單片機(jī)新手教程里講的跑馬燈以及數(shù)碼管的實(shí)現(xiàn)一樣就行了。
如果連一個(gè)單片機(jī)單獨(dú)實(shí)現(xiàn)跑馬燈都不會(huì),還是再取復(fù)習(xí)下吧,遺忘那么多,再學(xué)新的沒(méi)用的。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美 日韩 国产 成人 在线 91 | 欧美理论片在线 | 亚洲av毛片成人精品 | 日韩中文字幕av | 97起碰| 天堂素人约啪 | 久久av一区二区三区 | 日韩欧美三级电影在线观看 | 日韩毛片在线视频 | 99精品一区二区三区 | 欧美日韩国产在线观看 | 人成精品 | 日韩精品一区二区三区视频播放 | h片在线免费看 | 久久精品福利视频 | 久久影音先锋 | 97国产在线观看 | 欧美午夜视频 | 国产精品成人一区二区 | 日本午夜精品一区二区三区 | 婷婷午夜天 | 成年女人免费v片 | 亚洲成人毛片 | 亚洲欧美视频一区 | 日本特黄a级高清免费大片 特黄色一级毛片 | 91精品国产91久久久久福利 | 亚洲综合日韩精品欧美综合区 | 久久精品亚洲精品国产欧美 | 亚洲欧美一区二区三区1000 | 久久99国产精品 | 亚洲天堂一区二区 | 免费的色网站 | 久久丁香 | 国产视频精品区 | 久久精品视频网站 | 毛片一级黄色 | 欧美在线一区二区视频 | 中文二区 | 毛色毛片免费看 | 欧美福利视频 | 久久青|