发新帖我要提问
12
返回列表
打印
[ZLG-ARM]

请问HotPower的文潭:

[复制链接]
楼主: lymbgd
手机看帖
扫描二维码
随时随地手机跟帖
21
hotpower| | 2008-1-14 01:04 | 只看该作者 回帖奖励 |倒序浏览

我倒!!!无错无警告还不叫"对",真有你的~~~本来想迷糊的,被气

使用特权

评论回复
22
hotpower| | 2008-1-14 01:12 | 只看该作者

做人做到底,若是3.05的版本再奉送给你个好玩的~~~

使用特权

评论回复
23
太空穿梭机| | 2008-1-14 01:19 | 只看该作者

如果hotpower 你能送一个KEIL 没有代码大小 时间限制的 给我

就好的拉

使用特权

评论回复
24
hotpower| | 2008-1-14 01:25 | 只看该作者

闭眼答话~~~俺用KS的32K版本~~~ST MCU内有下载

使用特权

评论回复
25
hotpower| | 2008-1-14 01:30 | 只看该作者

细看19楼的代码比3楼的要长,是版本的问题还是优化级别不同?

使用特权

评论回复
26
太空穿梭机| | 2008-1-14 01:34 | 只看该作者

这个有代码 大小限制 的

hotpower 发表于 2008-1-14 01:25 ZLG-ARM ←返回版面    

24楼: 闭眼答话~~~俺用KS的32K版本~~~ST MCU内有下载 

使用特权

评论回复
27
hotpower| | 2008-1-14 01:36 | 只看该作者

小声点~~~网上找找~~~闭眼迷糊了~~~

进入40秒迷糊倒计时~~~40,39...1

使用特权

评论回复
28
太空穿梭机| | 2008-1-14 01:38 | 只看该作者

我太贪心了 是么??我想要没有代码大小限制的

使用特权

评论回复
29
lymbgd|  楼主 | 2008-1-14 13:29 | 只看该作者

请问hotpower:

/*-----------------------------------------------------------------
    串口发送部分代码
这里主要是充分地利用LPCARM的16个字节的FIFO来实现“无限FIFO”
-----------------------------------------------------------------*/
    case 0x02://THRE中断
        Uart.TxBusy = Uart.TxCount != Uart.TxdCount;//保证FIFO发送全部结束时,缓冲区空不拒绝发送
      for (i = 0; (i < 16) && (Uart.TxCount != Uart.TxdCount); i ++) {//1次写入FIFO最多16个字节
        ch = Uart.TxBuffer[Uart.TxdCount ++];//取出缓冲区1个字节数据
        U0->THR = ch;//将缓冲区1个字节数据写入FIFO
      }
      VIC->SoftIntClr = (1 << VICIntSel_UART0);//这里必须清除此软件标志!!!
      break;
  }
  VIC->VectAddr = 0x00;        /* 通知VIC中断处理结束                            */
}
中下面这一句是什么意思?实在看不懂
Uart.TxBusy = Uart.TxCount != Uart.TxdCount;

使用特权

评论回复
30
hotpower| | 2008-1-14 13:44 | 只看该作者

俺要迷糊了~~~

if (Uart.TxCount != Uart.TxdCount)
{
   Uart.TxBusy = true;
}
else
{
  Uart.TxBusy = false;
}

使用特权

评论回复
31
lymbgd|  楼主 | 2008-1-14 14:11 | 只看该作者

噢,谢谢,明白了。下面一段什么意思?

    串口激活部分代码
当Uart.TxBusy=1时表示串口忙正在发送数据,这是就不需用软件激活。
因为串口FIFO中最后一个字节的数据发送结束时还要引发一次中断。
否则在Uart.TxBusy=0时,由于串口闲,不可能进入发送中断。故需两种
办法来激活发送中断:
1.取出一个字节发送出去,在发送中断里再发送后续字节。
2.用VIC->SoftInt = (1 << VICIntSel_UART0);//模拟51的TI=1来引发发送中断
-----------------------------------------------------------------*/
      if (!Uart.TxBusy) {//发送器不忙可以立即发送
        VIC->SoftInt = (1 << VICIntSel_UART0);//模拟51的TI=1来引发发送中断
      }
      break;
/*-----------------------------------------------------------------
    串口发送激活部分代码
由于U0->IIR & 0x0f==1时为LPCARM保留中断,可用于软件模拟激活UART0中断
利用此漏洞来实现非典的思想来达到实战的要求。
-----------------------------------------------------------------*/
    case 0x01://LPCARM保留中断,可用于软件模拟激活UART0中断
     if (!(VIC->SoftInt & (1 << VICIntSel_UART0))) {//硬件UART0中断
       break;//正常的UART0中断退出
     }
     //至此成功利用了软件模拟中断偷入敌阵~~~继续运行,以达到发送首字符的目的
我想问的是:为什么要激活发送中断?

使用特权

评论回复
32
lymbgd|  楼主 | 2008-1-14 14:20 | 只看该作者

实在想不明白?还望指点一二

我觉得要发送数据的时候直接写入UART FIFO启动发送不就行了,发送完最后一个字符它自然会中断,为什么非要去激活发送中断呢?
    而你激活了发送中断却又什么也没干,如下:
case 0x01://LPCARM保留中断,可用于软件模拟激活UART0中断
     if (!(VIC->SoftInt & (1 << VICIntSel_UART0))) {//硬件UART0中断
       break;//正常的UART0中断退出
     }

是吗?
实在想不明白?还望指点一二

使用特权

评论回复
33
sodwell| | 2008-1-14 19:25 | 只看该作者

re

大叔还真耐心  手把手的交  要是做你徒弟真幸福啊

使用特权

评论回复
34
lymbgd|  楼主 | 2008-1-14 20:42 | 只看该作者

sodwell:你说谁是你大叔,我么?

有些方面我自认为可以当你师傅

使用特权

评论回复
35
hotpower| | 2008-1-14 22:56 | 只看该作者

32楼的问题很好,俺就做些说明吧~~~

问题1:"我觉得要发送数据的时候直接写入UART FIFO启动发送不就行了"

我一直反对直接操作硬件~~~这和打印机的道理是一样的~~~
我的程序要想象为"用户端"和"系统端".
不能那个用户的级别高而插入正在"打印的文本",否则这个"打印好的文本是没人能看明白的"

所以不能直接操作硬件,特别是多用户处理时.

"用户"只能写入缓冲区,"打印"是将此缓冲区的内容"发送"出去.两者互不知道~~~

既然不能操作硬件,那么如何达到"发送"呢???---只有软件激活!!!
它只是个软中断触发标志,并不破坏正常的发送流程!!!

问题2:"发送完最后一个字符它自然会中断,为什么非要去激活发送中断呢?" 

因为全部数据发送完后,"用户"可能此时没输入新数据,那么发送过程就此结束.

当"用户"开始填入新数据时,由于不能操作硬件,故还要继续采用软件激活的方式才能达到发送的目的.

由于我的发送协议为回车符结束,故此时激活软中断是最佳时机.

问题3:"    而你激活了发送中断却又什么也没干,如下:
case 0x01://LPCARM保留中断,可用于软件模拟激活UART0中断
     if (!(VIC->SoftInt & (1 << VICIntSel_UART0))) {//硬件UART0中断
       break;//正常的UART0中断退出
     }
}
"
这个可能是我注解的不好或您没仔细分析~~~

我正是成功地利用LPCARM保留中断的漏洞才能"植入病毒体"呀~~~
case 0x01://LPCARM保留中断,可用于软件模拟激活UART0中断

下面注解应该是:
     if (!(VIC->SoftInt & (1 << VICIntSel_UART0))) {//硬件UART0中断继续执行
       break;//不是软中断退出
     }//是软中断冒充硬件UART0中断继续发送

不知俺将清楚没有~~~最好的办法是用软件仿真~~~

但是3.15B就不支持那个软串口调试助手了~~~
 

使用特权

评论回复
36
lymbgd|  楼主 | 2008-1-15 12:51 | 只看该作者

谢谢

我再仔细研究一下,我一直是偏硬件的,没考虑这么多。

使用特权

评论回复
37
hotpower| | 2008-1-16 01:32 | 只看该作者

实际你直接运行代码后就是明白了~~~

使用特权

评论回复
38
alin_99| | 2008-1-18 09:26 | 只看该作者

高了半天

原来你的编译器没设置好

使用特权

评论回复
39
huangqi412| | 2008-1-19 10:08 | 只看该作者

收藏

使用特权

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

本版积分规则