[ZLG-ARM] 请问HotPower的文潭:

[复制链接]
hotpower 发表于 2008-1-14 01:04 | 显示全部楼层

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

  
hotpower 发表于 2008-1-14 01:12 | 显示全部楼层

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

  <br /> 相关链接:<a href='http://blog.**/hotpower/14048/message.aspx'>http://blog.**/hotpower/14048/message.aspx</a>
太空穿梭机 发表于 2008-1-14 01:19 | 显示全部楼层

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

就好的拉
hotpower 发表于 2008-1-14 01:25 | 显示全部楼层

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

  
hotpower 发表于 2008-1-14 01:30 | 显示全部楼层

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

  
太空穿梭机 发表于 2008-1-14 01:34 | 显示全部楼层

这个有代码 大小限制 的

hotpower&nbsp;发表于&nbsp;2008-1-14&nbsp;01:25&nbsp;ZLG-ARM&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />24楼:&nbsp;闭眼答话~~~俺用KS的32K版本~~~ST&nbsp;MCU内有下载&nbsp;<br />
hotpower 发表于 2008-1-14 01:36 | 显示全部楼层

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

进入40秒迷糊倒计时~~~40,39...1
太空穿梭机 发表于 2008-1-14 01:38 | 显示全部楼层

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

  
 楼主| lymbgd 发表于 2008-1-14 13:29 | 显示全部楼层

请问hotpower:

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

俺要迷糊了~~~

if&nbsp;(Uart.TxCount&nbsp;!=&nbsp;Uart.TxdCount)<br />{<br />&nbsp;&nbsp;&nbsp;Uart.TxBusy&nbsp;=&nbsp;true;<br />}<br />else<br />{<br />&nbsp;&nbsp;Uart.TxBusy&nbsp;=&nbsp;false;<br />}<br />
 楼主| lymbgd 发表于 2008-1-14 14:11 | 显示全部楼层

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

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

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

我觉得要发送数据的时候直接写入UART&nbsp;FIFO启动发送不就行了,发送完最后一个字符它自然会中断,为什么非要去激活发送中断呢?<br />&nbsp;&nbsp;&nbsp;&nbsp;而你激活了发送中断却又什么也没干,如下:<br />case&nbsp;0x01://LPCARM保留中断,可用于软件模拟激活UART0中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!(VIC-&gtSoftInt&nbsp;&&nbsp;(1&nbsp;&lt&lt&nbsp;VICIntSel_UART0)))&nbsp;{//硬件UART0中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;//正常的UART0中断退出<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />是吗?<br />实在想不明白?还望指点一二
sodwell 发表于 2008-1-14 19:25 | 显示全部楼层

re

大叔还真耐心  手把手的交  要是做你徒弟真幸福啊
 楼主| lymbgd 发表于 2008-1-14 20:42 | 显示全部楼层

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

有些方面我自认为可以当你师傅
hotpower 发表于 2008-1-14 22:56 | 显示全部楼层

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

问题1:&quot;我觉得要发送数据的时候直接写入UART&nbsp;FIFO启动发送不就行了&quot;<br /><br />我一直反对直接操作硬件~~~这和打印机的道理是一样的~~~<br />我的程序要想象为&quot;用户端&quot;和&quot;系统端&quot;.<br />不能那个用户的级别高而插入正在&quot;打印的文本&quot;,否则这个&quot;打印好的文本是没人能看明白的&quot;<br /><br />所以不能直接操作硬件,特别是多用户处理时.<br /><br />&quot;用户&quot;只能写入缓冲区,&quot;打印&quot;是将此缓冲区的内容&quot;发送&quot;出去.两者互不知道~~~<br /><br />既然不能操作硬件,那么如何达到&quot;发送&quot;呢???---只有软件激活!!!<br />它只是个软中断触发标志,并不破坏正常的发送流程!!!<br /><br />问题2:&quot;发送完最后一个字符它自然会中断,为什么非要去激活发送中断呢?&quot;&nbsp;<br /><br />因为全部数据发送完后,&quot;用户&quot;可能此时没输入新数据,那么发送过程就此结束.<br /><br />当&quot;用户&quot;开始填入新数据时,由于不能操作硬件,故还要继续采用软件激活的方式才能达到发送的目的.<br /><br />由于我的发送协议为回车符结束,故此时激活软中断是最佳时机.<br /><br />问题3:&quot;&nbsp;&nbsp;&nbsp;&nbsp;而你激活了发送中断却又什么也没干,如下:<br />case&nbsp;0x01://LPCARM保留中断,可用于软件模拟激活UART0中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!(VIC-&gtSoftInt&nbsp;&&nbsp;(1&nbsp;&lt&lt&nbsp;VICIntSel_UART0)))&nbsp;{//硬件UART0中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;//正常的UART0中断退出<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />&quot;<br />这个可能是我注解的不好或您没仔细分析~~~<br /><br />我正是成功地利用LPCARM保留中断的漏洞才能&quot;植入病毒体&quot;呀~~~<br />case&nbsp;0x01://LPCARM保留中断,可用于软件模拟激活UART0中断<br /><br />下面注解应该是:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!(VIC-&gtSoftInt&nbsp;&&nbsp;(1&nbsp;&lt&lt&nbsp;VICIntSel_UART0)))&nbsp;{//硬件UART0中断继续执行<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;//不是软中断退出<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}//是软中断冒充硬件UART0中断继续发送<br /><br />不知俺将清楚没有~~~最好的办法是用软件仿真~~~<br /><br />但是3.15B就不支持那个软串口调试助手了~~~<br />&nbsp;<br />
 楼主| lymbgd 发表于 2008-1-15 12:51 | 显示全部楼层

谢谢

我再仔细研究一下,我一直是偏硬件的,没考虑这么多。
hotpower 发表于 2008-1-16 01:32 | 显示全部楼层

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

  
alin_99 发表于 2008-1-18 09:26 | 显示全部楼层

高了半天

原来你的编译器没设置好
huangqi412 发表于 2008-1-19 10:08 | 显示全部楼层

收藏

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

本版积分规则

快速回复 在线客服 返回列表 返回顶部