OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 310|回复: 0

【JSDuino】按键输入

[复制链接]

  离线 

45

主题

115

帖子

1

精华

版主

Rank: 7Rank: 7Rank: 7

积分
612
金钱
612
注册时间
2013-9-23
在线时间
80 小时
发表于 2017-6-24 10:38:04 | 显示全部楼层 |阅读模式
正点原子公众号
    通过本节的学习,您将了解到如何使用JavaScript代码来实现按键输入功能JSDuino开发板上一共拥有3个用户自定义按键,其中wkup按键在启动前三秒内作为启动固件下载和程序下载功能使用。当程序启动之后,wkup按键可以自由支配。在js代码按键回调函数中,通过判断按键名称可以知道哪个按键被使用。三个按键的名称分别是key0key1wkup
这里我想更多的介绍一下关于JSDuino是如何实现按键实现回调函数。首先明确两个概念:事件驱动和Javascript是基于单线程来设计的。很多情况下JSDuino的行为都是异步的,例如按键、网卡、串口接收数据等等。虽然看起来这些行为可以随时随地触发,其实它们是在一个无限循环的loop里面按照先来先到的原则顺序执行的。首先任何一个行为触发会向系统发送一个事件,这个无限循环的loop里面会一直检测一个叫做事件任务列队的地方。只要列队里面一有任务事件,则立刻执行这个任务直到结束。也就是说,如果这个任务是阻塞式的,那么后面不管有多少任务都会被搁置,直到当前这个任务被执行完毕。像按键的回调函数、setInterval的超时回调函数等等都是基于这个事件机制来设计的。也就是说,这些回调函数里面尽量不要运行占用时间特别长的程序,以免导致后面的程序被耽搁了。
    接下来我们可以聊聊为什么JavaScript语言是单线程的。对于不了解线程概念的朋友,可以简单的理解单线程就是一个无限循环的超级loop,就如同上面事件机制一样,一次只能执行一个任务,其他的任务都得靠边等着。而我们常说的操作系统都是多线程的,一次可以运行N个任务,没有谁会等着谁。但是JavaScript为什么这么设计呢,其实最早JavaScript语言是为浏览器设计的语言,主要用于用户与界面的互动以及DOM的操作。对于了解GUI的朋友可能知道,为了避免GUI互动中同步的问题,GUI往往也都是单线程设计。毕竟咱不可能一次点击到两个以上的按钮。JavaScript也一样,为了保证用户界面操作的过程性,也被设计为单线程。但是JavaScript真的只能是单线程么,其实像nodejs这样把JavaScript运用到服务器后端的情况时,JavaScript语言又被设计成了多线程来满足服务器性能的要求。

        Key模块封装了如下几个API可供使用:
on(function)
注册一个按键回调函数
参数
描述
function
注册一个按键按下的回调函数,回调函数传递一个带有按键名称的字符串参数。


[JavaScript] 纯文本查看 复制代码
var key= require("key");

function key_callback(keyName){
        print(keyName);
}
//注册按键的回调函数
key.on(key_callback);

function loop(){
        while(true){

        }
}

loop();


实验结果
当按键被按下之后,对应的按键名称会在回调函数中被打印出

回复

使用道具 举报

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

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2017-11-19 16:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */