0 单片机C语言请教! - 第4页 - 单片机论坛,单片机技术交流论坛 - 21ic电子技术开发论坛
打印

单片机C语言请教!

[复制链接]
楼主: space005
手机看帖
扫描二维码
随时随地手机跟帖
61
chongxing| | 2008-10-19 11:17 | 只看该作者 回帖奖励 |倒序浏览

有收获

5楼的厉害啊

使用特权

评论回复
62
学生D| | 2008-10-20 09:53 | 只看该作者

53楼担心TD4测试期间发生中断会修改其值,可能吗?

下面这段程序可以看出:使用信号量TD4时,不用考虑中断影响。
开/关几万、几十万次无效中断是完全可以避免的。

    4: main() 
     5: {
     6: while(1){ 
     7: while(TD4)TD4--,TD3++;

C:0x0003    E50A     MOV      A,TD4(0x0A)
C:0x0005    60FC     JZ       main(C:0003)      ;  这里应跳到主程序c:0004,(如果有的话)。
C:0x0007    150A     DEC      TD4(0x0A)
C:0x0009    0509     INC      0x09
C:0x000B    E509     MOV      A,0x09
C:0x000D    70F4     JNZ      main(C:0003)
C:0x000F    0508     INC      TD3(0x08)
C:0x0011    80F0     SJMP     main(C:0003)

c:0004 这里有主程序

使用特权

评论回复
63
horse7812| | 2008-10-20 12:40 | 只看该作者

向楼上学习了

  我原来的想法有些多余了,只要TD4不为xdata类型,对于data和idata类型,KEIL C都只用一跳指令去完成减法操作,不会去执行读出来--->改写---->写回去的步骤,这也说明了KEIL C在大多数的时候还是很聪明的.

使用特权

评论回复
64
linqing171| | 2008-10-20 12:59 | 只看该作者

双线程都要访问的变量必须先锁住。

操作之前关中断是必须的。
Keil C里面似乎没有变量可重入的关键字。

使用特权

评论回复
65
学生D| | 2008-10-20 13:14 | 只看该作者

还有。

再仔细分析一下。
好像还错过了什么细节。

while(1)
{
while(TD4)TD4--,TD3++;
.
.
.
主程序其他内容
.
.
.
}

这里while(TD4)TD4--,TD3++;已经不是一个持续循环;TD4减到0就会退出执行主程序其他内容。
while(TD4)TD4--,TD3++ 测试可以发生在2个时标之间的任何时刻点。这也是说时标中断只有能够恰好发生在while(TD4)TD4--,TD3++ 运行时隙,才可能影响TD4的值。
也即:主程序其他内容的运行时间长度恰好与时标(或倍率)吻合。

这个概率?

使用特权

评论回复
66
horse7812| | 2008-10-20 14:31 | 只看该作者

。。。。。。。。。。

   在不使用其他中断的情况下应该可以把它看作不可能事件了。不过在一般应用中,很少不使用其他的中断。

使用特权

评论回复
67
学生D| | 2008-10-21 09:46 | 只看该作者

请教64楼。

64楼说的是操作系统的功能,用户不可能考虑到这么复杂的机制。

假设这里要关18000次(或者500000次)中断,其他地方可能还有类似的问题,也要由用户考虑是否关中断,那么这个用户是在写操作系统程序还是在写用户程序?

操作系统是用户程序与系统硬件之间的接口。嵌入式系统开发工程师写的是用户程序,他不必关心操作系统是如何完成他申请的的操作的。

操作系统,或者说线程、互锁、关中断进入管态....这些观念是计算机专家的事。用户程序员不可能强大到两者都是专家。

所以,既然这里没有用操作系统,程序员只要按照规则编程序及至中断程序,就不应该有问题,难道一个裸奔程序设计员要不断地考虑中断发生时产生的影响?
中断是后台程序,它的基本行为准侧就是不能喧宾夺主,影响到前台的演出,甚或自己跑到前台来。(排除硬件行为)

所以,前后台程序是两个独立设计运行的程序,通过信号互相协调。软件禁止后台,又要考虑一堆其他问题。还不如不管。

使用特权

评论回复
68
杨晓波| | 2008-10-25 10:02 | 只看该作者

单片机C语言请教!

你在试验一下吧!

使用特权

评论回复
69
花花牛| | 2008-10-25 13:48 | 只看该作者

呵呵

我认为3,4楼说的对

使用特权

评论回复
70
icmap| | 2008-10-26 18:52 | 只看该作者

长时间定时没必要用中断。

使用特权

评论回复
71
lxcx| | 2008-10-28 17:56 | 只看该作者

我不认为这是编译器的Bug

我不认为这是编译器的Bug

使用特权

评论回复
72
lsp6257495| | 2008-10-29 09:36 | 只看该作者

学习学习

学习———思考———学习

使用特权

评论回复
73
雅子| | 2008-10-29 14:12 | 只看该作者

计数初值

TD3跟TH0=(65536-50000)/256;TL0=(65536-50000)%256有关

使用特权

评论回复
74
低功耗| | 2008-12-3 19:07 | 只看该作者

学习了

又学到一点知识了!所以有事没事,都要常来21IC逛逛,看看别人的问题,学下怎么解决。

使用特权

评论回复
75
异客| | 2008-12-4 00:18 | 只看该作者

受教了~~~

使用特权

评论回复
76
最最| | 2008-12-4 13:25 | 只看该作者

学习了

看了两篇** ,受教了。

使用特权

评论回复
77
还我今生| | 2008-12-4 16:33 | 只看该作者

不错

使用特权

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

本版积分规则