打印
[技术问答]

关于M051中断跟主函数执行优先的问题。

[复制链接]
1770|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jmworkspace|  楼主 | 2014-7-4 12:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jmworkspace 于 2014-7-7 08:59 编辑

对于M051这块MCU来说,是不是不能跑线程这样的东西的,我想问问。可否利用中断来实现类线程的功能?
我的代码编写是主函数有一个循环是时时刻刻监控由中断改变的 duty、period、及PWM输出持续时间的变化,如下代码:

    while(1)
                {       
                                CMR0A = i;                   //中:设定PWM0,1高占空比
                                CNR0A = x;                   //中:设定PWM0,1,2,3周期//en:Set PWM0,1,2,3 period
                               
                                POEA |= (PWM0_OE | PWM1_OE );         //中:输出使能//en:Output enable
                                TMR0_Delay1ms(n);
                       
                                POEA &= (0<<1) | (0<<0) ;
                                TMR0_Delay1ms(n);               
                }

当然这个循环必须每时每刻都检测及不断输出PWM波形。

若某个中断要控制PWM输出波形duty按delay某个时间持续增加减少,由0-100%-0的变化,或者自动从0增加到100%,或者从100%减少到0%,这个得需要中断函数持续1段时间。假设我设定1个Auto键,是由中断控制。当Auto为1则会执行这三种情况其中1种,若中断一直维持这个函数的变化,也要保持输出波形的变化同步,这可行吗?

所以,综合以上所谈,通常的中断工作原理是不是只是在主函数执行期间的千分之秒时间跑去处理中断函数然后跑回来主函数执行,期间必然有个1函数是暂停的?若按照上面3种模式,中断函数的执行时间必然延长,而且其中断函数工作更改的值只会是最后的值有效果。譬如duty由0-80%的变化。中断函数跑完了0-80%的变化但是主函数没有按照0-80%的变化,只是最后输出的波形是变成了80%。这样就不能看到或者证明是有经历过0-80%的duty变化。
按照我所说的方案,这个MCU能同时跑2个while()或多个while函数吗?类线程。并且同时没有相互的干扰,但是数据能同步更新。这可行吗?

哈哈,估计大家看这么多会觉得我的表达能力很差,但我也是尽力而为了。希望大家别见怪,有兴趣的可以探讨一下这个问题。先下班去吃饭了,首先感谢大家的意见。
沙发
gaoyang9992006| | 2014-7-4 12:34 | 只看该作者
你可以采用状态机的方式实现类似功能。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
jmworkspace + 2 很给力!
板凳
john_lee| | 2014-7-5 01:12 | 只看该作者
只想吐槽楼主帖子的第一句:你凭啥说M051不能跑线程?

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
haolaishi + 3
地板
戈卫东| | 2014-7-5 08:22 | 只看该作者
多任务听说过没有?

使用特权

评论回复
5
jmworkspace|  楼主 | 2014-7-7 09:22 | 只看该作者
很抱歉这样说了,楼主很后悔。已修改。但是对于我的能力来说,在这块板下实现多线程是比较难的。如果要有多线程,估计得要相关头文件、交叉编译链等东西吧

使用特权

评论回复
6
戈卫东| | 2014-7-8 10:25 | 只看该作者
jmworkspace 发表于 2014-7-7 09:22
很抱歉这样说了,楼主很后悔。已修改。但是对于我的能力来说,在这块板下实现多线程是比较难的。如果要有多 ...

有很多很小的KERNEL可以用,没有多么复杂神奇。
有些用起来很容易。

使用特权

评论回复
7
戈卫东| | 2014-7-8 10:31 | 只看该作者
http://www.nuvoton-m0.com/forum.php?mod=forumdisplay&fid=46
牛卧堂那里有专门的板块讨论嵌入式KERNEL的,你可以去看看。。。其实在这里提问应该也可以。

使用特权

评论回复
8
戈卫东| | 2014-7-8 10:35 | 只看该作者
21IC这里也有专门的嵌入式系统板块,人气应该高些,你可以看看。
你可能需呀学习一些基础理论——很容易的。

使用特权

评论回复
9
haolaishi| | 2014-7-8 15:33 | 只看该作者
按照你这么的说法,可以跟踪输出的PWM波形,然后自动调整时间,如果想让两者完全符合理论输出,是不可能的

使用特权

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

本版积分规则

12

主题

45

帖子

0

粉丝