[ZLG-MCU] LM菜鸟之"零耗时键盘"在LM上的基本实现C++裸奔程序

[复制链接]
6451|8
 楼主| hotpower 发表于 2008-1-25 03:13 | 显示全部楼层 |阅读模式
LM菜鸟之&quot;零耗时键盘&quot;在LM上的基本实现C++裸奔程序<br /><br />本程序主要实验目的:<br /><br />1.时钟节拍中断<br />&nbsp;&nbsp;主要体验Cortex-M3的SysTick及其中断.<br />2.&quot;零耗时键盘&quot;的基本建立<br />&nbsp;&nbsp;KEY1~KEY4.&nbsp;只建立了放键,短压和长压3个事件。<br />&nbsp;&nbsp;可像钢琴一样乱弹看LED3~LED6的变化及&quot;并行任务&quot;的实现,<br />&nbsp;&nbsp;长压键蜂鸣器发声直到放键为止。<br />&nbsp;&nbsp;这里只涉及了最基本的应用,回调钩子等技术未在本例中使用.<br />&nbsp;&nbsp;所以它还不能称之为&quot;基于零耗时键盘的OS&quot;,不过有人明白如何实现~~~<br />3.复位键做&quot;键盘&quot;<br />&nbsp;&nbsp;不断电每按一次复位键LED1~LED2将交替亮灭。<br />4.再现C++类成员函数指针及在键盘命令表上的典型应用.<br /><br />有人应该明白为什么键盘不用外部中断,为什么键盘要&quot;扫而不描&quot;的道理。<br /><br />菜农&nbsp;HotPower@126.com&nbsp;&nbsp;2008.1.25&nbsp;3:08&nbsp;于雁塔村菜地<br /><br /> 相关链接:<a href='https://bbs.21ic.com/upfiles/img/20081/20081253120794.rar'>https://bbs.21ic.com/upfiles/img/20081/20081253120794.rar</a>
 楼主| hotpower 发表于 2008-1-25 03:22 | 显示全部楼层

哈哈~~~菜农以后的裸奔不会再有C的位置了~~~

jOhN_lIgHt 发表于 2008-1-25 04:06 | 显示全部楼层

尚未了解C++为何物

  
香水城 发表于 2008-1-25 08:30 | 显示全部楼层

准备把hot大叔的“零耗时键盘”C++裸奔程序换个地方

谢谢!
 楼主| hotpower 发表于 2008-1-25 09:12 | 显示全部楼层

哈哈~~~今晚就该轮到STM32了~~~正准备倒塌类成员函数变中断函

  
 楼主| hotpower 发表于 2008-1-25 22:15 | 显示全部楼层

2年半后继续呼叫IceAge和TestCode及John_Lee三位同志

CoreTex-M3的中断函数和其他MCU/ARM/DSP都都不同,它就是简单的函数指针<br />typedef&nbsp;union<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;(*pfnHandler)(void);<br />&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;*&nbsp;ulPtr;<br />}<br />uVectorEntry;<br /><br />#pragma&nbsp;location&nbsp;=&nbsp;&quot;INTVEC&quot;<br />__root&nbsp;const&nbsp;uVectorEntry&nbsp;g_pfnVectors[]&nbsp;@&nbsp;&quot;INTVEC&quot;&nbsp;=<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;.ulPtr&nbsp;=&nbsp;__sfe(&nbsp;&quot;CSTACK&quot;&nbsp;)&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;__program_start,<br />&nbsp;&nbsp;&nbsp;&nbsp;NmiSR,&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;The&nbsp;NMI&nbsp;handler<br />&nbsp;&nbsp;&nbsp;&nbsp;FaultISR,&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;&nbsp;&nbsp;&nbsp;//&nbsp;The&nbsp;hard&nbsp;fault&nbsp;handler<br />&nbsp;&nbsp;&nbsp;&nbsp;IntDefaultHandler,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;The&nbsp;MPU&nbsp;fault&nbsp;handler<br />//(uVectorEntry)Keyboard.Exec(),//想这样做未果~~~<br />&nbsp;&nbsp;&nbsp;&nbsp;SysTickISR,&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;//&nbsp;The&nbsp;SysTick&nbsp;handler<br />&nbsp;&nbsp;&nbsp;&nbsp;IntDefaultHandler,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;The&nbsp;usage&nbsp;fault&nbsp;handler<br />///////<br />};<br /><br />static<br />void&nbsp;SysTickISR(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Keyboard.Exec();<br />}<br /><br />void&nbsp;KeyboardObj::Exec(void);<br /><br />俺想中断函数既然已经是普通的函数,那么怎么让类成员函数变中断函数呢???<br /><br />键盘的散转如2年半前的讨论结果运行正常:<br /><br />void&nbsp;KeyboardObj::Exec(void)<br />{<br />typedef&nbsp;void&nbsp;(KeyboardObj::*FunctionPtr)(void);//类成员函数指针<br />static&nbsp;const&nbsp;FunctionPtr&nbsp;KeyboardCommandTab[3][4]&nbsp;=<br />{<br />&nbsp;&nbsp;{KeyboardObj::Key01,&nbsp;KeyboardObj::Key02,&nbsp;KeyboardObj::Key03,&nbsp;KeyboardObj::Key04},//放键表<br />&nbsp;&nbsp;{KeyboardObj::Key11,&nbsp;KeyboardObj::Key12,&nbsp;KeyboardObj::Key13,&nbsp;KeyboardObj::Key14},//短压表<br />&nbsp;&nbsp;{KeyboardObj::Key21,&nbsp;KeyboardObj::Key22,&nbsp;KeyboardObj::Key23,&nbsp;KeyboardObj::Key24}&nbsp;//长压表<br />};<br />unsigned&nbsp;char&nbsp;KeyCount;<br />//............................<br />&nbsp;&nbsp;(::Keyboard.*KeyboardCommandTab[1][Count])();//调用类成员函数Key11()~Key14()<br />//.............................................<br />}<br /> <br /> 相关链接:<a href='https://bbs.21ic.com/club/bbs/showEssence.asp?id=6562&page=3'>https://bbs.21ic.com/club/bbs/showEssence.asp?id=6562&page=3</a>
testcode 发表于 2008-1-26 03:49 | 显示全部楼层

gcc中有alias...

  
 楼主| hotpower 发表于 2008-1-26 04:16 | 显示全部楼层

IAR比GCC限制的过多~~~

  
 楼主| hotpower 发表于 2008-1-26 12:52 | 显示全部楼层

祥见有关"零耗时键盘"的具体说明,注意本例程的实现过程

  <br /> 相关链接:<a href='https://bbs.21ic.com/club/bbs/showEssence.asp?id=8907&page=1'>https://bbs.21ic.com/club/bbs/showEssence.asp?id=8907&page=1</a>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1460

主题

21617

帖子

508

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