八达网

标题: 这段代码能不能改成if语句的? [打印本页]

作者: nkwd    时间: 2009-1-9 12:07
标题: 这段代码能不能改成if语句的?
for (j=0;j<task1;j++)
   {for(i=0;i<=j;i++)
        *(int *) 0x10000000 |= 0x04;
    m=task1-j;
        for(i=1;i<m;i++)
        *(int *) 0x10000000 &= 0xFB;
   }

求教呀~~~
作者: nkwd    时间: 2009-1-9 12:08
还有11个小时报告要交了
他妈是编个嵌入式程序的 完全不会
大家救命呀
作者: nkwd    时间: 2009-1-9 12:11
我贴火星笑话来顶贴。。帮个忙吧

那不行,身体吃不消啊

今儿,我一哥们去上货。问服务员:小丽,快过年了搞活动不? 小丽说:搞啊,现在就搞。 我哥们:搞到什么时候? 小丽:你要来咱们天天搞! 我哥们:那不行,身体吃不消啊!小丽:... ...
作者: nkwd    时间: 2009-1-9 12:12
我贴火星笑话来顶贴。。帮个忙吧

你也和他做那种事了啊!?

有一牧场的主人雇用一个年轻人,在牧场工作。
一日,年轻人将主人的小女儿带进仓库成其好事,小女儿回房后,对姐姐说:

「这次雇用的年轻人,可真是专家啊!」姐姐听了之后就往仓库跑,点来之后,也承认年轻人的技术高超。
门口她们的母亲听到了,这次轮到女主人到仓库去,回来之后,对家人说:
「这年轻人真不简单呀!会各种技巧,真不愧是行家。」
男主人听了此话,也往仓库里去。
年轻人看到男主人来到,就假装认真工作,一手扛著牧草,一手推著轮车,而且还熟练的喂食牛崽、挤牛奶。男主人回到家便说:
「你们说得没错,这年轻人果然厉害,什么都会啊!」
「什么?」太太与女儿异口同声地说:「你也和他做那种事了啊!?」
作者: 潜规则    时间: 2009-1-9 12:13
为什么要改if?
作者: nkwd    时间: 2009-1-9 12:15
本帖最后由 nkwd 于 2009-1-9 12:21 编辑

8个led灯 要实现不同周期的渐亮渐灭 反正好的方法我是不会的
用这个for循环能实现单独一个led的渐亮渐灭 但是合在一起就不能同时执行 要等上一个for执行完了才能执行下一个for
for能改成if来表达的话 也许还能糊弄过去
作者: nkwd    时间: 2009-1-9 12:18
主要是嵌入式的东西要在芯片板上调试 国内又不用这个板的

问都问不到
作者: nkwd    时间: 2009-1-9 12:18
哥哥些 救命呀
作者: ilzl    时间: 2009-1-9 12:20
使用goto?
作者: nkwd    时间: 2009-1-9 12:23
ls大哥。。我C语言烂啊 所以搞不出
你看看得行不
作者: ilzl    时间: 2009-1-9 12:25
问题是。。。你单纯改if的话,代码本身其实没有变

原来怎么样的还是怎么样

还是要从算法改起啊

不清楚你具体要实现什么东西
作者: hkkhhk    时间: 2009-1-9 12:25
用while或do while行不
作者: kkk1234486    时间: 2009-1-9 12:25
提示: 作者被禁止或删除 内容自动屏蔽
作者: nkwd    时间: 2009-1-9 12:26
就是这么类似的8个for循环 摆在一起的话只能依次执行 要搞成同时执行
作者: hkkhhk    时间: 2009-1-9 12:28
#include <stdio.h>
#include <string.h>

void main(void)
{
        int i,j,task1,m;
        for (j=0;j<task1;j++)
        {
                i=0;
                while(i<=j)
                {
                        *(int *) 0x10000000 |= 0x04;
                        i++;
                }
                m=task1-j;
                i=1;
                while(i<m)
                {
                        *(int *) 0x10000000 &= 0xFB;
                        i++;
                }
         }
}
作者: nkwd    时间: 2009-1-9 12:29
我把全部贴上来。。。

前面那些定义的就不用看了

就中间那8个task

define LED0 0x01.doc

34.5 KB, 下载次数: 12


作者: maddrone    时间: 2009-1-9 12:29
如果你的led对应的gpio寄存器为GPDX[0-7],每位表示一个 led
则不同周期的亮灭如下:
while(1)
{
//set all led on
GPDX |= 0xFF;
//delay some time and set it off
for(i=0; i<7; i++)
{
     GPDX &= ~(1 << i);
     for(j=0; j<10000; j++);   //delay some time
}
}
作者: ilzl    时间: 2009-1-9 12:30
你怎么区分不同的灯的呢?
作者: hkkhhk    时间: 2009-1-9 12:30
#include <stdio.h>
#include <string.h>

void main(void)
{
        int i,j,task1,m;
        for (j=0;j<task1;j++)
        {
                i=0;

loop1:
                {
                        *(int *) 0x10000000 |= 0x04;
                        i++;
                }
                  if(i<=j)
                        goto loop1;

                m=task1-j;
                i=1;
loop2:       
                {
                        *(int *) 0x10000000 &= 0xFB;
                        i++;
                }
                if(i<m)
                        goto loop2;
         }
}
作者: nkwd    时间: 2009-1-9 12:32
感谢。。先消化一下
作者: nkwd    时间: 2009-1-9 12:34
你怎么区分不同的灯的呢?
ilzl 发表于 2009-1-9 12:30


就是我doc文章中间那8个task 一个task一个灯 类似的8个for循环 摆在一起的话只能依次执行 要搞成同时执行
作者: 可粗可长了    时间: 2009-1-9 12:34

作者: maddrone    时间: 2009-1-9 12:34
什么叫同事执行呢,如果是1个任务的话就是你自己定好每个灯亮灭的时间,然后delay就ok了。
作者: 恶魔的CD    时间: 2009-1-9 12:35
我靠 8DA竟然还有C语言贴 太高级了
作者: 吕布无双    时间: 2009-1-9 12:36
不懂的路过
作者: maddrone    时间: 2009-1-9 12:36
不知道8da有没有做嵌入式linux或者dsp/fpga之类的,可以加我qq大家学习学习,89354744
作者: 偶尔也无奈    时间: 2009-1-9 12:42
本帖最后由 偶尔也无奈 于 2009-1-9 12:46 编辑

没搞过嵌入式编程,简单看了一下,如果task1,m都是普通变量,答案应该如下:

if (tastk1 > 0)
        *(int *) 0x10000000 |= 0x04;
if (task1 > 1)
        *(int *) 0x10000000 &= 0xFB;


循环体都是一条语句,本来就没有必要用循环的。
如果是lz自己写出来的代码,那显然楼主连c语言的基本语法都没搞清楚。
如果是哪本书里的考题,这考题也不过是考考c语言的基本语法罢了,蒙人的。
作者: ilzl    时间: 2009-1-9 12:46
是不是每个灯的变化跨度不一样?
作者: nkwd    时间: 2009-1-9 12:47
什么叫同事执行呢,如果是1个任务的话就是你自己定好每个灯亮灭的时间,然后delay就ok了。
maddrone 发表于 2009-1-9 12:34

简单说下吧 板子芯片是ARM9 AT91SAM9261(国内应该很少用..)
课题的任务是8个led,要求分别按1s,1.1s,1.2s,1.3s,1.4s,1.5s,1.6s,1.7s的间隔时间进行渐亮和渐灭,其中前4个灯在每个tick都执行,后4个中有2个在奇数的tick执行.2个在偶数tick执行
渐亮渐灭过程要使用周期为20ms的PWM来实现
作者: mimosa    时间: 2009-1-9 12:51
......
作者: maddrone    时间: 2009-1-9 12:53
27# 偶尔也无奈


你看那地址就知道是寄存器地址了
应该加个volatile就是了
作者: maddrone    时间: 2009-1-9 13:16
27# 偶尔也无奈


你看那地址就知道是寄存器地址了
应该加个volatile就是了
作者: kk_Ab    时间: 2009-1-9 13:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: ilzl    时间: 2009-1-9 13:24
灯亮之后是马上渐灭还是等所有灯亮了再开始渐灭操作?
作者: nkwd    时间: 2009-1-9 16:36
恩 来问的那b睡了。。。还是感谢~~~~
作者: TM_MaRine_Z    时间: 2009-1-9 16:37
if i can.




欢迎光临 八达网 (https://www.8-da.com/) Powered by Discuz! X2.5