keil的信号函数用于模拟和测试串行IO,模拟IO,端口通讯等重复发生的外部事件。

信号函数以关键字signal开头。在函数中必须调用twatch用于延时,不然keil会陷入死循环。twatch函数的参数表示要延时的CPU执行周期,比如twatch(1000000)表示一个信号函数延时1000000个CPU周期。

信号函数受到如下约束:

  • 函数的返回值类型必须为void
  • 函数最多只能有8个参数。
  • 信号函数可以调用其他重定义函数和用户函数。
  • 信号函数之间不能相互调用。
  • 信号函数可以被用户函数调用。
  • 信号函数必须调用twatch至少一次。如果信号函数从不调用twatch,则目标程序将得不到时间执行。而且由于不能使用Ctrl+C中断信号函数,在这种情况下µVision3将进入死循环。

1.建立函数

keil中有内建的函数编辑器,通过Debug--Function Editor来打开。打开函数编辑器时需要输入一个文件名或者打开一个由Options for Target--Debug Initialization File指定的文件。

2. 编辑例子。

下面的例子在LPC2114的P0.8引脚上输入一个如下图所示的方波。

// 在200HZ的方波的低半周期中增加两个频率为1K的波
//
//
signal void test(void)
{
    )
    {
        PORT0 |=0x100;            //P0.8置高
        twatch(*/);    //延时2.5ms(200HZ)
        PORT0 &=~0x100;            //P0.8置低
        twatch(*/);    //延时2.5ms(200HZ)

        PORT0 |=0x100;            //P0.8置高
        twatch(*/);    //延时2.5ms(200HZ)
        PORT0 &=~0x100;            //P0.8置低
        twatch(*/);    //延时2.5ms(200HZ)

        PORT0 |=0x100;            //P0.8置高
        twatch(*/);    //延时2.5ms(200HZ)
        PORT0 &=~0x100;            //P0.8置低
        twatch(*/);    //延时ms(800HZ)
        PORT0 |=0x100;            //P0.8置高
        twatch(*/);    //延时2.5ms(400HZ)
        PORT0 &=~0x100;            //P0.8置低
        twatch(*/);    //延时2.5ms(800HZ)
        PORT0 |=0x100;            //P0.8置高
        twatch(*/);    //延时2.5ms(400HZ)
        PORT0 &=~0x100;            //P0.8置低
        twatch(*/);    //延时2.5ms(800HZ)    

    }
}

3.编译

在信号函数编辑界面上,点击Compile按钮,编译通过与否都会有相应提示。

4. 调用信号函数

编译通过后,在软件仿真时,在控制窗口(Command窗口)中输入如下命令: test()

注:test为信号函数名。

5.查看空闲信号函数

使用signal state命令

6. 删除信号函数(以test()为例)

signal kill test或者kill func test

keil MDK的信号函数的更多相关文章

  1. 基于IAP和Keil MDK的远程升级设计

    写在前面:三个周之前,我突然想写一个远程升级的程序.那个时候我只是大概知道IAP的意思是在应用编程,但怎么编,我还一无所知.我给自己定下一个个阶段目标,从最基础的代码一点点写起,解决一个又一个的问题. ...

  2. Keil MDK STM32系列(九) 基于HAL和FatFs的FAT格式SD卡TF卡读写

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  3. Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  4. Keil MDK 无法设置断点【worldsing】

    要解决一个问题就怕不知道怎么搜索,或是别人没有遇到过: 同样碰到Keil MDK Debug调试无法设置断点问题,首先来问百度,GOOGLE,一下是我搜索到的结果:   1.keil 不能设置断点,每 ...

  5. keil MDK启动文件分析---基于LPC2100系列(其实都是相通的)

    转用MDK有一段时间了,越来越觉得MDK的强大,因为我之前都是用ADS1.2开发产品,所以更能体会到MDK的强大与易用性.MDK编译出来的代码与ADS1.2相比,代码量减少了很多,我的一个工程用ADS ...

  6. Keil MDK入门---从新建一个工程开始

    熟悉Keil C51的朋友对于Keil MDK上手应该比较容易,毕竟界面是很像的.但ARM内核毕竟不同于51内核,因此无论在设置上还是在编程思想上,都需要下番功夫研究的.本文以MDK V4.03为例, ...

  7. 转:Keil MDK从未有过的详细使用讲解

    来自:http://blog.csdn.net/zhzht19861011/article/details/5846510 熟悉Keil C 51的朋友对于Keil MDK上手应该比较容易,毕竟界面是 ...

  8. keil MDK编译器警告和错误详解(不定期更新)

    工作后从单片机转成ARM,刚开始用ADS1.2编译器,用了一段时间,因为我接手的项目的老程序正是用ADS编译的,部门也大都在用.在学单片机的时候用的是keil c51编译器,ads和这个编译器在易用性 ...

  9. Keil MDK下如何设置非零初始化变量

    一些工控产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位而重启现场设备.而keil mdk在默认情况下,任何形式的复位都会将RAM区的非初始 ...

随机推荐

  1. [makefile] filter-out

    $(filter-out ,) 名称:反过滤函数——filter-out.功能:以模式过滤字符串中的单词,去除符合模式的单词.可以有多个模式.返回:返回不符合模式的字串.示例: objects=mai ...

  2. PHP学习笔记13淘宝接口开发一例(tmall.items.discount.search),PHP

    程序设计,因为接口是有请求次数限制的,正式接口也只有2W次每天的请求次数,所以我们需要把从接口返回的数据缓存起来. 采用的接口是http://api.taobao.com/apidoc/api.htm ...

  3. MySQL入门转载

    21分钟 MySQL 入门教程 http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html 目录 一.MySQL的相关概念介绍 二.Wi ...

  4. SQL Server 创建全文索引

    背景知识: 全文目录是全文索引是容器.所以在创建全文索引前要有全文目录. 第一步: 创建全文目录: create fulltext catalog catalog_name [on filegroup ...

  5. Nginx 变量漫谈(四)

    在设置了“取处理程序”的情况下,Nginx 变量也可以选择将其值容器用作缓存,这样在多次读取变量的时候,就只需要调用“取处理程序”计算一次.我们下面就来看一个这样的例子:     map $args  ...

  6. 致终将火爆的NFC——ISO14443 TypeA

    毫无疑问,当NFC终端越来越普及,逐渐成为智能手机标配功能后,我们终将迎来NFC的火爆.国内NFC应用最为广泛的将是TypeA,如Mifare.NFC Tag.移动支付等,所以接下来将主要研究Type ...

  7. linux scp ssh命令不用输入密码

    把你的本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中 假设本地主机linux100,远程主机linux200 一,在linux100主机里的用户 运 ...

  8. 【思考题】CSDN第四届在线编程大赛2014初赛:带通配符的数

    题目要求: 输入参数:参数A,含有任意个数的?的数值字符串,如:12?4,?代表一位任意数                     参数B,不含?的数值字符串,长度与参数A一致 输出结果:参数A比参数 ...

  9. CreateThread线程函数

    之前在一篇 基于TCP套接字实现的简单Demo   一文中用到了线程函数CreateThread()函数来 创建新的线程.下面以一个最简单的多线程例子来说明. C-代码如下: //最简单的创建多线程实 ...

  10. Linux学习笔记6-Linux根目录下各个目录的作用

    /bin:存放最常用命令:  /boot:启动Linux的核心文件: /dev:设备文件: /etc:存放各种配置文件: /home:用户主目录: /lib:系统最基本的动态链接共享库: /mnt:一 ...