打印
[ZLG-MCU]

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

[复制链接]
6040|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2008-1-25 03:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LM菜鸟之"零耗时键盘"在LM上的基本实现C++裸奔程序

本程序主要实验目的:

1.时钟节拍中断
  主要体验Cortex-M3的SysTick及其中断.
2."零耗时键盘"的基本建立
  KEY1~KEY4. 只建立了放键,短压和长压3个事件。
  可像钢琴一样乱弹看LED3~LED6的变化及"并行任务"的实现,
  长压键蜂鸣器发声直到放键为止。
  这里只涉及了最基本的应用,回调钩子等技术未在本例中使用.
  所以它还不能称之为"基于零耗时键盘的OS",不过有人明白如何实现~~~
3.复位键做"键盘"
  不断电每按一次复位键LED1~LED2将交替亮灭。
4.再现C++类成员函数指针及在键盘命令表上的典型应用.

有人应该明白为什么键盘不用外部中断,为什么键盘要"扫而不描"的道理。

菜农 HotPower@126.com  2008.1.25 3:08 于雁塔村菜地

相关链接:https://bbs.21ic.com/upfiles/img/20081/20081253120794.rar

相关帖子

沙发
hotpower|  楼主 | 2008-1-25 03:22 | 只看该作者

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

使用特权

评论回复
板凳
jOhN_lIgHt| | 2008-1-25 04:06 | 只看该作者

尚未了解C++为何物

使用特权

评论回复
地板
香水城| | 2008-1-25 08:30 | 只看该作者

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

谢谢!

使用特权

评论回复
5
hotpower|  楼主 | 2008-1-25 09:12 | 只看该作者

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

使用特权

评论回复
6
hotpower|  楼主 | 2008-1-25 22:15 | 只看该作者

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

CoreTex-M3的中断函数和其他MCU/ARM/DSP都都不同,它就是简单的函数指针
typedef union
{
    void (*pfnHandler)(void);
    void * ulPtr;
}
uVectorEntry;

#pragma location = "INTVEC"
__root const uVectorEntry g_pfnVectors[] @ "INTVEC" =
{
    { .ulPtr = __sfe( "CSTACK" ) },
    __program_start,
    NmiSR,                                  // The NMI handler
    FaultISR,                               // The hard fault handler
    IntDefaultHandler,                      // The MPU fault handler
//(uVectorEntry)Keyboard.Exec(),//想这样做未果~~~
    SysTickISR,                            // The SysTick handler
    IntDefaultHandler,                      // The usage fault handler
///////
};

static
void SysTickISR(void)
{
    Keyboard.Exec();
}

void KeyboardObj::Exec(void);

俺想中断函数既然已经是普通的函数,那么怎么让类成员函数变中断函数呢???

键盘的散转如2年半前的讨论结果运行正常:

void KeyboardObj::Exec(void)
{
typedef void (KeyboardObj::*FunctionPtr)(void);//类成员函数指针
static const FunctionPtr KeyboardCommandTab[3][4] =
{
  {KeyboardObj::Key01, KeyboardObj::Key02, KeyboardObj::Key03, KeyboardObj::Key04},//放键表
  {KeyboardObj::Key11, KeyboardObj::Key12, KeyboardObj::Key13, KeyboardObj::Key14},//短压表
  {KeyboardObj::Key21, KeyboardObj::Key22, KeyboardObj::Key23, KeyboardObj::Key24} //长压表
};
unsigned char KeyCount;
//............................
  (::Keyboard.*KeyboardCommandTab[1][Count])();//调用类成员函数Key11()~Key14()
//.............................................
}

相关链接:https://bbs.21ic.com/club/bbs/showEssence.asp?id=6562&page=3

使用特权

评论回复
7
testcode| | 2008-1-26 03:49 | 只看该作者

gcc中有alias...

使用特权

评论回复
8
hotpower|  楼主 | 2008-1-26 04:16 | 只看该作者

IAR比GCC限制的过多~~~

使用特权

评论回复
9
hotpower|  楼主 | 2008-1-26 12:52 | 只看该作者

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

使用特权

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

本版积分规则

1460

主题

21619

帖子

506

粉丝