打印

关于for循环嵌套

[复制链接]
2351|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
297178587|  楼主 | 2008-7-19 23:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用CY3261A-RGB板子上的led16做了个小程序,用rgb实现颜色的变更,采用for循环嵌套,程序代码如下:

#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"
#define uchar unsigned char
#define uint unsigned int     // PSoC API definitions for all User Modules

void delay(uint x)
{
uint i,j;
for(i=0;i<=x;i++)
   {
   for(j=0;j<=50;j++);
   }
}


void main()
{
uchar r1=0,g1=0,b1=0,i=3;

PRT2DR&=~0x80;

SSDM_1_Start();                                    
SSDM_2_Start();
SSDM_3_Start();

M8C_EnableGInt;

while(i--)
    {
    SSDM_1_WriteSignalDensity(0xff);
    SSDM_2_WriteSignalDensity(0x80);
    SSDM_3_WriteSignalDensity(0x00);
    delay(2000);
    SSDM_1_WriteSignalDensity(0x00);
    SSDM_2_WriteSignalDensity(0x80);
    SSDM_3_WriteSignalDensity(0xff);
    delay(2000);
    SSDM_1_WriteSignalDensity(0x80);
    SSDM_2_WriteSignalDensity(0x00);
    SSDM_3_WriteSignalDensity(0xff);
    delay(2000);
    }
for(r1=0;r1<=250;r1+=5)
    {
    for(g1=0;g1<=250;g1+=5)
        {
                   for(b1=250;b1>=0;b1-=25)
            {
            delay(1000);
            SSDM_1_WriteSignalDensity(r1);
            SSDM_2_WriteSignalDensity(g1);
            SSDM_3_WriteSignalDensity(b1);
            }
        }
    }
}
}

程序执行后,第一个while循环可以正常执行,但是后面的for嵌套却不行,每次都只是蓝灯渐暗,另外两个始终点不亮,很奇怪。后来我把for嵌套程序修改如下后,正常执行了。感到莫名其妙,不知道是哪里的问题。
for(r1=0;r1<=250;r1+=5)
    {
    for(g1=0;g1<=250;g1+=5)
        {
        b1=250;
        while(b1-=5)
            {
            delay(1000);
            SSDM_1_WriteSignalDensity(r1);
            SSDM_2_WriteSignalDensity(g1);
            SSDM_3_WriteSignalDensity(b1);
            }
        }
    }
}
不知道这是不是designer的bug?
    
沙发
麦克尔| | 2008-7-21 09:25 | 只看该作者

开发EZ-Color可以用Designer?

请问楼主:这个SSDM_1_WriteSignalDensity(r1);函数是从哪里看到的?希望楼主不吝赐教!

使用特权

评论回复
板凳
PSoC_Rock| | 2008-7-21 09:40 | 只看该作者

回楼主:应该是变量定义出了问题

应该是变量定义出了问题:

uchar r1=0,g1=0,b1=0,i=3;

如果你把上面的定义改成:

int r1=0,g1=0,b1=0, i=3;

就好了。

使用特权

评论回复
地板
297178587|  楼主 | 2008-7-21 17:12 | 只看该作者

问题解决了

关于1楼的问题回复:那个函数来自ssdm的API函数。
关于2的回复:我用的ssdm模块是八位的,函数定义是8位无符号数,曾经有一个PSoC的工程师告诉我改为char类型的,但是也不行,后来我把最里面的for(b1=250;b1>=0;b1-=25)改为for(b1=250;b1>0;b1-=25)就行了,我想应该算是溢出吧。

使用特权

评论回复
5
PSoC_Rock| | 2008-7-21 17:29 | 只看该作者

不是溢出,而是b1>=0这个条件永远满足

不是溢出,而是b1>=0这个条件永远满足!
因为b1即使溢出了也是无符号数,也是>=0.而b1>0,正好有一个0不满足这个条件.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

25

帖子

0

粉丝