shenwou
发表于 2014-10-28 22:56:48
多谢楼主分享,先MARK下
xtaens
发表于 2014-10-30 22:22:22
y574924080 发表于 2014-8-29 23:43
最新的 oopc.h可以到 http://www.amobbs.com/thread-5590165-1-1.html
下载工程模板就可以找到了 ...
lz你好,我把你的这个按键驱动移植到stm32f103上,使用最新的ooc.h,编译报错说有一个变量没有定义,但是我包含了那个定义的文件
还是提示没有定义,这是怎么了?使用旧的oopc.h文件编译正常。
slzm40
发表于 2014-10-30 22:49:12
xtaens 发表于 2014-10-30 22:22
lz你好,我把你的这个按键驱动移植到stm32f103上,使用最新的ooc.h,编译报错说有一个变量没有定义,但是 ...
这个变量应该是自定义布尔类型。。要自己定义。 状态机执行完毕,返回true(fsm_xxx_finish),状态机进行中,返回false(fsm_xxx_going),好像是这个意思。 我把它们改成bool也能用
zl_123
发表于 2014-10-30 22:59:12
看了很不错,mark
y574924080
发表于 2014-10-30 23:38:22
xtaens 发表于 2014-10-30 22:22
lz你好,我把你的这个按键驱动移植到stm32f103上,使用最新的ooc.h,编译报错说有一个变量没有定义,但是 ...
fsm_rt_t 在工程模版下 .\gsf\utilities\arm
我们的习惯是一个通用的宏定义,类型等,都是定义在 .\gsf\utilities\ 下,这样可以避免重复劳动,
事实上 .\gsf\utilities\下还有不少很有意思的东西,{:biggrin:}
y574924080
发表于 2014-10-30 23:40:02
slzm40 发表于 2014-10-30 22:49
这个变量应该是自定义布尔类型。。要自己定义。 状态机执行完毕,返回true(fsm_xxx_finish),状态机进行中 ...
这个是我们状态机通用的返回值类型,
一开始也使用过布尔类型,但是再后来需要表达更多返回状态的时候,就改成了 fsm_rt_t
都习惯了这个,忘记说明了,{:titter:}
xtaens
发表于 2014-10-31 08:34:43
y574924080 发表于 2014-10-30 23:38
fsm_rt_t 在工程模版下 .\gsf\utilities\arm
我们的习惯是一个通用的宏定义,类型等,都是定义在 .\gsf\ ...
我使用的是 旧工程test_2F 下的app_cfg.h文件,此文件中有类
typedef enum {
fsm_rt_err = -1, //!< fsm error, error code can be get from other interface
fsm_rt_cpl = 0, //!< fsm complete
fsm_rt_on_going = 1, //!< fsm on-going
fsm_rt_wait_for_obj = 2, //!< fsm wait for object
fsm_rt_asyn = 3, //!< fsm asynchronose complete, you can check it later.
} fsm_rt_t;
//! @}
没有使用新工程下的那个文件哦。
selflag_bbs
发表于 2014-10-31 08:36:46
不错,留着
xtaens
发表于 2014-10-31 08:38:14
y574924080 发表于 2014-10-30 23:38
fsm_rt_t 在工程模版下 .\gsf\utilities\arm
我们的习惯是一个通用的宏定义,类型等,都是定义在 .\gsf\ ...
目前的处理方法是直接把下面的两个直接屏蔽,就可以编译通过了
//! \name general event handler
//! @{
EXTERN_CLASS( DELEGATE_HANDLE,
typedef fsm_rt_t DELEGATE_HANDLE_FUNC(void *pArg, void *pParam);
)
DELEGATE_HANDLE_FUNC *fnHandler; //!< event handler
void *pArg; //!< Argument
DELEGATE_HANDLE *ptNext; //!< next
END_EXTERN_CLASS(DELEGATE_HANDLE)
//! @}
//! \name event
//! @{
EXTERN_CLASS(DELEGATE)
DELEGATE_HANDLE *ptEvent;
DELEGATE_HANDLE *ptBlockedList;
DELEGATE_HANDLE **pptHandler;
END_EXTERN_CLASS(DELEGATE)
//! @}
hellohaitong
发表于 2014-10-31 09:35:35
楼主很强大,
mafeimafei
发表于 2014-11-4 16:33:22
学习,mark,谢谢!
mafeimafei
发表于 2014-11-5 11:23:15
再次学习了。
beijisnow
发表于 2014-11-5 17:26:47
好帖 留名~~~~~~~~~
snaky_mok
发表于 2014-12-3 21:05:24
收下了,MARK
haoyu0729
发表于 2014-12-3 23:16:14
状态机很强大
yao2013lin
发表于 2014-12-4 00:05:31
谢谢分享,不错的设计
shuimubai
发表于 2014-12-4 10:26:21
是否带缓存处理按键?
Gorgon_Meducer
发表于 2014-12-4 10:40:41
sunismyself-la 发表于 2014-10-22 15:11
版主,这是哪个资料上的图,求介绍
我自己用word画的
Gorgon_Meducer
发表于 2014-12-4 10:41:04
shuimubai 发表于 2014-12-4 10:26
是否带缓存处理按键?
必须带啊~
minicatcatcn
发表于 2014-12-15 09:35:38
留个脚印,学习一下。
gracialee
发表于 2014-12-26 20:48:33
通用的按键,正想弄这个程序测试。
北辰
发表于 2014-12-26 23:24:25
mark
北辰
发表于 2014-12-26 23:24:43
mark think
Dongshan888
发表于 2014-12-26 23:46:15
非常感谢分享,学习了
gy810986741
发表于 2014-12-27 10:56:26
赞一个,学习了
ztlaputa
发表于 2014-12-28 12:13:26
留着,慢慢消化,用来学习下编程思想。
zyorai
发表于 2014-12-29 18:53:56
非常好用~~~~
chess01
发表于 2014-12-29 20:17:41
mark,留待后观
ustcls
发表于 2014-12-29 21:17:30
mark一下,谢谢分享
zhongsandaoren
发表于 2014-12-30 09:24:50
没有看过傻孩子,自己研究出来的,用了好几年了,原理大同小异。
tcpln
发表于 2014-12-30 09:43:38
果断收藏了,状态机的思想真得很重要,以前按键检测用的是延时,不能能用,自己用了状态机之后,程序的稳定性自己也有保障了。
Gorgon_Meducer
发表于 2014-12-30 09:51:27
zhongsandaoren 发表于 2014-12-30 09:24
没有看过傻孩子,自己研究出来的,用了好几年了,原理大同小异。
不同的人在不交流的情况下经过足够的时间得出了相同的结论,这是计算机技术客观性的体现。赞兄弟!
levy
发表于 2014-12-30 10:57:18
收藏,谢谢。。。
taiyangshendi2
发表于 2014-12-30 11:08:03
水平不够 只看懂了一部分,不过很少用到这么多按键的时候先收藏了吧
unnormal
发表于 2014-12-30 11:34:52
留下来以后慢慢看
xhcyfc
发表于 2014-12-30 11:49:47
mark, 有空仔细看看
demonye
发表于 2015-1-3 21:13:15
学习了
谢谢楼主
lf8013
发表于 2015-1-3 22:46:40
强大,很好,学习....
feiante116
发表于 2015-1-3 23:30:25
“支持最多255个按键,每个按键都支持包括按下检测、
松手检测、长按、连按的效果”
这个要看看,有机会移植一下,用于以后的项目中
枫叶情缘
发表于 2015-1-8 16:41:34
经典,学习
wen007pcb
发表于 2015-1-8 18:46:47
收藏了!!
foxpro2005
发表于 2015-1-26 23:31:19
更新日志
- 2014-3-24
a. 修改key_queue接口:增加中断保护修改注释风格
b. 更新Demo工程,并将key_task放入到system tick 异常处理程序中
------------------------------------------------------------------------------------------------------------------------
您现在楼主位的test2F工程是最近一次更新的么, 没有看到有把 “b. 更新Demo工程,并将key_task放入到system tick 异常处理程序中”(我应该没看漏吧...{:lol:} )。
另外,昨天看了一下, 不解systick.c与systick.h中类型定义部分的用意, 两个文件中均有重复定义, 而systick.c并没有依赖systick.h,是不是想把类型通过接口输出(而隐藏具体细节信息, 就是之前傻孩子大师讲的做掩码结构体),但看test2F代码并不完全是。如下对比图:
y574924080
发表于 2015-1-27 00:07:21
foxpro2005 发表于 2015-1-26 23:31
更新日志
- 2014-3-24
a. 修改key_queue接口:增加中断保护修改注释风格
最后一次更新工程模版, 我上传第二天就发现上传错了,
但是没人指出, 就懒得改了, 现在也找不到工程模版了
这个贴, 其实是傻孩子老师培训的题目....
然后关于.c .h的使用, 我们的习惯就是把*.h作为向外提供信息的文件, 理应包含恰好的信息,
systick_cfg_t作为systick的配置结构体, 外部需要这个信息, 所以可以在.h可以看到
你看到的工程模版是我培训中间的成果, 很多习惯还没改变
建议去看傻孩子老师的蜘蛛机器人贴 或者 播放器帖子的工程模版
foxpro2005
发表于 2015-1-27 00:19:30
本帖最后由 foxpro2005 于 2015-1-27 00:21 编辑
y574924080 发表于 2015-1-27 00:07
最后一次更新工程模版, 我上传第二天就发现上传错了,
但是没人指出, 就懒得改了, 现在也找不到工程模版 ...
之前一直处于忙碌中,没及时关注傻孩子老师团队的帖子, 这两天稍微有点空, 在跟你们的步伐在看, 再慢去细品、学习...,感谢你们的开源分享..
看你们在用svn在管理项目, git也是一个非常不错的版本管理工具哦。
y574924080
发表于 2015-1-27 10:41:05
foxpro2005 发表于 2015-1-27 00:19
之前一直处于忙碌中,没及时关注傻孩子老师团队的帖子, 这两天稍微有点空, 在跟你们的步伐在看, 再慢 ...
用svn, 是因为公司的服务器搭建的就是svn服务器
git的话, 现在正在学习~~~ {:lol:}
gy810986741
发表于 2015-2-6 12:38:10
多谢楼主分享
huaidan2088
发表于 2015-2-6 15:31:55
看了,很不错,这个很好
xujianglun1
发表于 2015-2-24 16:58:53
好,记下了
wszyjsw2
发表于 2015-2-25 11:51:10
mark通用按键模块
F_QD_000A
发表于 2015-2-26 17:14:04
看似简单的按键代码,要做好还真得需要高水平。
HalenYU
发表于 2015-2-26 20:34:26
{:sad:}。还米有感受到这个
captain_steve
发表于 2015-2-27 10:00:53
很强大,收下了,谢谢楼主
Harlan
发表于 2015-3-8 22:52:28
不得不说又学习了
efree
发表于 2015-4-3 15:38:17
学习了,支持 一下。
jjkkty
发表于 2015-4-3 21:52:11
mark按键
sos9616
发表于 2015-4-7 16:59:56
谢谢!
对我帮助很大
efree
发表于 2015-4-14 17:05:23
好贴要顶。绝对支持。
if_else
发表于 2015-4-14 23:43:30
学习了,按键程序不同的系统要使用不同框架的程序
miight
发表于 2015-4-16 15:24:43
学习了,谢谢LZ分享!
darkness27
发表于 2015-4-25 01:17:03
请问为什么会有两个相同 的app_cfg.h文件呢?谢谢。
堂吉诃德
发表于 2015-4-25 09:59:07
好东西,收藏
didadida
发表于 2015-5-9 12:07:04
顶一顶贴,层次状态机
索达客
发表于 2015-7-8 10:33:23
谢谢楼主分享,收藏备用了!
yangpeng012
发表于 2015-7-13 21:42:10
这个代码必须在IAR下吗?在keil里面怎么不行!!!
longjunyi
发表于 2015-7-13 22:16:42
xuexixuexi
yangpeng012
发表于 2015-7-13 23:26:03
楼主给的工程是基于IAR的,下面的这两个获取当前中断状态和恢复中断状态的宏定义在KEIL下如何移植呢???感谢了
#if __IS_COMPILER_IAR__
#define GET_GLOBAL_INTERRUPT_STATE() __get_interrupt_state()
#define SET_GLOBAL_INTERRUPT_STATE(__STATE) __set_interrupt_state(__STATE)
typedef __istate_t istate_t;
#else
#error No support for interrupt state access
#endif
//! \brief The safe ATOM code section macro
#define SAFE_ATOM_CODE(...) {\
istate_t tState = GET_GLOBAL_INTERRUPT_STATE();\
DISABLE_GLOBAL_INTERRUPT();\
__VA_ARGS__;\
SET_GLOBAL_INTERRUPT_STATE(tState);\
}
daska110a
发表于 2015-7-14 00:38:27
方便移植的按键程序
daska110a
发表于 2015-7-14 00:39:38
方便移植的按键程序
夜猫
发表于 2015-7-14 08:38:13
很强大的按键处理
liulingang_1205
发表于 2015-7-14 11:42:32
按键处理,这个帖子值得收藏。
Gorgon_Meducer
发表于 2015-7-14 18:47:20
yangpeng012 发表于 2015-7-13 23:26
楼主给的工程是基于IAR的,下面的这两个获取当前中断状态和恢复中断状态的宏定义在KEIL下如何移植呢??? ...
鸣谢:祥子
arm_compiler.h
/*!< Macro to enable all interrupts. */
#if __IS_COMPILER_IAR__
# define ENABLE_GLOBAL_INTERRUPT() __enable_interrupt()
#elif __IS_COMPILER_MDK__
# define ENABLE_GLOBAL_INTERRUPT() __enable_irq()
#else
# define ENABLE_GLOBAL_INTERRUPT() __asm__ __volatile__ (" CPSIE i")
#endif
/*!< Macro to disable all interrupts. */
#if __IS_COMPILER_IAR__
# define DISABLE_GLOBAL_INTERRUPT() __disable_interrupt()
#elif __IS_COMPILER_MDK__
# define DISABLE_GLOBAL_INTERRUPT() __disable_irq()
#else
# define DISABLE_GLOBAL_INTERRUPT() __asm__ __volatile__ (" CPSID i");
#endif
#if __IS_COMPILER_IAR__
# define GET_GLOBAL_INTERRUPT_STATE() __get_interrupt_state()
# define SET_GLOBAL_INTERRUPT_STATE(__STATE) __set_interrupt_state(__STATE)
typedef __istate_t istate_t;
#elif __IS_COMPILER_MDK__
# define GET_GLOBAL_INTERRUPT_STATE() __disable_irq()
# define SET_GLOBAL_INTERRUPT_STATE(__STATE) if (__STATE) { __enable_irq(); }
typedef int istate_t;
#else
#error No support for interrupt state access
#endif
signal.h
#if __IS_COMPILER_MDK__
//! \brief The safe ATOM code section macro
# define SAFE_ATOM_CODE(...) {\
istate_t tState = GET_GLOBAL_INTERRUPT_STATE();\
__VA_ARGS__;\
SET_GLOBAL_INTERRUPT_STATE(tState);\
}
//! \brief Exit from the safe atom operations
# define EXIT_SAFE_ATOM_CODE() SET_GLOBAL_INTERRUPT_STATE(tState);
#else
//! \brief The safe ATOM code section macro
# define SAFE_ATOM_CODE(...) {\
istate_t tState = GET_GLOBAL_INTERRUPT_STATE();\
DISABLE_GLOBAL_INTERRUPT();\
__VA_ARGS__;\
SET_GLOBAL_INTERRUPT_STATE(tState);\
}
//! \brief Exit from the safe atom operations
# define EXIT_SAFE_ATOM_CODE() SET_GLOBAL_INTERRUPT_STATE(tState);
#endif
ludlee
发表于 2015-7-15 17:03:43
{:handshake:}{:handshake:}{:handshake:}{:handshake:}{:handshake:}{:handshake:}
tanek
发表于 2015-7-20 17:31:39
Gorgon_Meducer 发表于 2015-7-14 18:47
鸣谢:祥子
arm_compiler.h
GET_GLOBAL_INTERRUPT_STATE()这个怎么把全局中断都关掉了。也只能在 SAFE_ATOM_CODE 里面用了,貌似不能单独用
micheal147
发表于 2015-7-22 14:08:07
这个要MARK
lxk52000
发表于 2015-7-22 18:07:12
在这里总能受益匪浅啊
heisewangluo
发表于 2015-7-24 16:39:50
好贴,正在学习源码中,准备用我的stm8试试。
ponder2077
发表于 2015-7-24 18:32:59
没有系统看傻孩子的宏定义,所以有点难看懂,还是要坚持看懂,
ponder2077
发表于 2015-7-24 19:04:30
两个按键同时按下,或多个按键同时按下呢? 能否识别?
yoursnemo
发表于 2015-7-30 23:00:30
好东西~~
Gorgon_Meducer
发表于 2015-8-4 10:23:34
ponder2077 发表于 2015-7-24 19:04
两个按键同时按下,或多个按键同时按下呢? 能否识别?
这个问题前面已经有讨论,结论是取决于你的接口函数如何编码多按键的情况了。这个库只是对你的按键编码提供各类按键事件的识别服务。
ponder2077
发表于 2015-8-4 16:14:05
按下按键立即打开手筒, 但是,在打开手电筒状态下, 松开按键才能关手电筒?
wei669
发表于 2015-8-5 21:33:39
我现在比较头疼的是组合按键处理!有兴趣的朋友可以讨论下
wwoneway
发表于 2015-8-5 21:52:30
学习了{:handshake:}
Gorgon_Meducer
发表于 2015-8-6 15:47:35
ponder2077 发表于 2015-8-4 16:14
按下按键立即打开手筒, 但是,在打开手电筒状态下, 松开按键才能关手电筒?
怎么用好KEY_DOWN, KEY_UP, KEY_PRESSED, KEY_LONG_PRESSED这类事件能解决你的问题。
ponder2077
发表于 2015-8-6 16:36:11
Gorgon_Meducer 发表于 2015-8-6 15:47
怎么用好KEY_DOWN, KEY_UP, KEY_PRESSED, KEY_LONG_PRESSED这类事件能解决你的问题。
谢谢傻孩子, 虽然还是没有看懂,
catwill
发表于 2015-8-6 21:09:18
ponder2077 发表于 2015-8-6 16:36
谢谢傻孩子, 虽然还是没有看懂,
一次性看懂是非常困难的,最好能够先用起来
青叶林
发表于 2015-8-6 21:27:42
很好的一个程序!
zhj2000
发表于 2015-8-7 07:49:29
按键处理,必须用到的模块,下载学习{:biggrin:}{:biggrin:}{:biggrin:}
Vampireyifeng
发表于 2015-8-9 23:12:11
通用按键模块
ynleo
发表于 2015-10-28 09:17:22
MARK 好东西
wjg29542954
发表于 2015-10-28 09:54:18
研究研究
碧水渊
发表于 2015-11-23 10:58:18
大神们,对我来说这个看了很久没有看懂,谁有keil版本的啊,楼主的好多宏看不懂{:sad:}{:sad:}{:sad:}
碧水渊
发表于 2015-11-24 15:34:34
版主你好,有没有测试过,这个程序运行一遍需要多少时间,在ARM-M0上
大笨蛋1990
发表于 2015-11-24 18:28:37
学习
atg525
发表于 2015-11-24 22:05:11
果断收藏
yao2013lin
发表于 2015-11-25 00:10:38
先标记下回头再看
碧水渊
发表于 2015-11-25 09:38:35
tanek 发表于 2015-7-20 17:31
GET_GLOBAL_INTERRUPT_STATE()这个怎么把全局中断都关掉了。也只能在 SAFE_ATOM_CODE 里面用了,貌似不 ...
请问你在keil下获取中段状态的宏问题解决了吗?我也遇到了同样的问题。key_task放在中断里面就不会运行了,放在主函数中就可以正常的用。
bigwei
发表于 2015-12-23 20:59:31
成功移植,可以用,但是还有问题,继续研究~
yzn327
发表于 2015-12-25 22:45:21
先MARK一下,下次再来看
yanzhiwei
发表于 2015-12-26 15:17:20
好贴顶起来,收藏了