OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4535|回复: 7

跪求普通IO定时器产生下图波形,节省代码存储空间,寄存器最好是8位的,我自己做出来了,但是占空间大~~

[复制链接]

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4638
金钱
4638
注册时间
2017-7-6
在线时间
705 小时
发表于 2017-8-11 18:00:11 | 显示全部楼层 |阅读模式
5金钱
        我自己写了个程序,虽然实现了一模一样的波形,但是占存储空间很大,还有十几个这样的波形呢,我只做了3个,空间就用了百分之20多。
       
                if(r_PWM_t < 26)        //1个
                                {
                                        Motor = 0;
                                }
                                else if(r_PWM_t <= 73)
                                {
                                        r_PWM_3t++;
                                        if(r_PWM_3t == 5)
                                        {
                                                r_PWM_3t = 0;
                                                b_t = 1;
                                        }
                                        if(b_t)
                                        {
                                                b_t = 0;
                                                Motor = ~Motor;
                                        }
                                }
                                else if(r_PWM_t < 99)     //2个
                                {
                                        Motor = 0;
                                }
                                else if(r_PWM_t <= 146)
                                {
                                        r_PWM_3t++;
                                        if(r_PWM_3t == 5)
                                        {
                                                r_PWM_3t = 0;
                                                b_t = 1;
                                        }
                                        if(b_t)
                                        {
                                                b_t = 0;
                                                Motor = ~Motor;
                                        }
                                }
                                else if(r_PWM_t < 172)   //3个
                                {
                                        Motor = 0;
                                }
                                else if(r_PWM_t <= 219)
                                {
                                        r_PWM_3t++;
                                        if(r_PWM_3t == 5)
                                        {
                                                r_PWM_3t = 0;
                                                b_t = 1;
                                        }
                                        if(b_t)
                                        {
                                                b_t = 0;
                                                Motor = ~Motor;
                                        }
                                }
                                else if(r_PWM_t < 245)    //4个
                                {
                                        Motor = 0;
                                }
                                else if(r_PWM_t <= 292)
                                {
                                        r_PWM_3t++;
                                        if(r_PWM_3t == 5)
                                        {
                                                r_PWM_3t = 0;
                                                b_t = 1;
                                        }
                                        if(b_t)
                                        {
                                                b_t = 0;
                                                Motor = ~Motor;
                                        }
                                }
                                else if(r_PWM_t <= 302)
                                {Motor = 0;}

                                else if(r_PWM_t <= 307)
                                {b_1t = 1;}
                                else if(r_PWM_t <= 312)
                                {
                                        Motor = 1;
                                        b_1t = 0;
                                }

                                else if(r_PWM_t <= 317)
                                {b_1t = 1;}
                                else if(r_PWM_t <= 322)
                                {
                                        Motor = 1;
                                        b_1t = 0;
                                }

                                else if(r_PWM_t <= 327)
                                {b_1t = 1;}
                                else if(r_PWM_t <= 332)
                                {
                                        Motor = 1;
                                        b_1t = 0;
                                }                               
                               
                                else if(r_PWM_t <= 337)
                                {b_1t = 1;}
                                else if(r_PWM_t <= 342)
                                {
                                        Motor = 1;
                                        b_1t = 0;
                                }
                               
                                else if(r_PWM_t <= 346)
                                {b_1t = 1;}

                                if(r_PWM_t > 346)
                                {       
                                        r_PWM_t = 0;
                                        b_1t = 0;
                                }
                        }
                        if(b_1t)
                        {
                                if(r_PWM_4t > 1)
                                {Motor = 0;}
                                else {Motor = 1;}
                                if(r_PWM_4t > 12)
                                {r_PWM_4t = 0;}
                        }

总的

总的

后面一下段

后面一下段

最佳答案

我是小白,很白很白的小白!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4638
金钱
4638
注册时间
2017-7-6
在线时间
705 小时
 楼主| 发表于 2017-8-11 18:00:12 | 显示全部楼层
我是小白,很白很白的小白!!!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165312
金钱
165312
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-8-11 23:45:51 | 显示全部楼层
优化代码了
回复

使用道具 举报

9

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
931
金钱
931
注册时间
2017-3-23
在线时间
255 小时
发表于 2017-8-12 08:47:10 | 显示全部楼层
编译器优化代码的等级可以改一下试试
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4638
金钱
4638
注册时间
2017-7-6
在线时间
705 小时
 楼主| 发表于 2017-8-14 08:54:07 | 显示全部楼层
未知1908 发表于 2017-8-12 08:47
编译器优化代码的等级可以改一下试试

代码太长,这波形室友规则的,所以就得找到好的方法
我是小白,很白很白的小白!!!
回复

使用道具 举报

9

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
931
金钱
931
注册时间
2017-3-23
在线时间
255 小时
发表于 2017-9-8 12:58:11 | 显示全部楼层
程功之道 发表于 2017-8-14 08:54
代码太长,这波形室友规则的,所以就得找到好的方法

可以设置一下编译器的代码优化Level试试
回复

使用道具 举报

0

主题

56

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1641
金钱
1641
注册时间
2017-7-15
在线时间
216 小时
发表于 2017-10-15 12:20:51 | 显示全部楼层
先区分波形,大体化成几种类型,然后使用公共程序,直接在里面赋值。周期,占空比,循环次数都可以写入。
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4638
金钱
4638
注册时间
2017-7-6
在线时间
705 小时
 楼主| 发表于 2017-10-19 14:01:21 | 显示全部楼层
妖孽11 发表于 2017-10-15 12:20
先区分波形,大体化成几种类型,然后使用公共程序,直接在里面赋值。周期,占空比,循环次数都可以写入。

恩恩,想出来了,谢谢
我是小白,很白很白的小白!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 22:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表