请选择 进入手机版 | 继续访问电脑版
搜索
查看: 188|回复: 0

[原创] 《K64进阶笔记》节选-嵌入式系统软件的典型开发框架(3)

[复制链接]
  • TA的每日心情
    奋斗
    2017-1-17 10:45
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    37

    主题

    387

    帖子

    1127

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1127
    发表于 2017-1-11 21:57:22 | 显示全部楼层 |阅读模式

    嵌入式系统软件的典型开发框架


    • 基本的超循环结构
    • 使用中断的前后台结构
    • 完全依赖中断的事件驱动系统
    • 状态机驱动系统——玩转按键
    • 总结



    3. 完全依赖中断的事件驱动系统


    3.1 程序结构


    在以外部交互为主的应用场景中,只有当外部触发事件发生之时,系统才会执行相应的处理,而待机的情况下几乎不需要做任何事情。在这种情况下,开发者更多关注的是根据触发事件设计好前台程序,在后台的超循环中不需要运行任何常驻的程序。甚至为了减少耗电,程序被设计成一旦从前台程序返回后台,就通过执行特殊命令,关掉系统的部分时钟和供电,进入低功耗模式。此时,整个应用的设计几乎是完全抛弃掉后台程序,只设计前台程序,那么整个程序就完全依赖于外部事件触发的中断进行驱动。


    特点:开发者只需要针对每个事件(中断源)编写相应的中断服务程序就可以了,而每个中断服务程序的函数相当于是一个个短小但又能完成独立功能的任务,程序逻辑简单清晰。

    图03.png
    图3


    3.2 样例程序(1个)


    Blinky_v1_4_UartRx_LowPower工程
    1. /*!
    2. * @file main.c
    3. * @author suyong_yq@126.com
    4. */

    5. #include "app_inc.h"

    6. int main(void)
    7. {
    8.     /* Initialize the board. */
    9.     BSP_InitSystem();
    10.     BSP_InitStdioUART(115200);
    11.     BSP_InitLEDGPIO();

    12.     printf("\r\nBlinky v1.4 Project.\r\n");

    13.     /* Led. */
    14.     GPIO_SetPinLogic(BSP_GPIO_LED3_PORT, BSP_GPIO_LED3_PIN, true);
    15.     GPIO_SetPinDir(BSP_GPIO_LED3_PORT, BSP_GPIO_LED3_PIN, true);

    16.     printf("Type anything into terminal to toggle the Led3\r\n");

    17.     /* Enable the interrupt for UART0 Rx. */
    18.     NVIC_EnableIRQ(UART0_RX_TX_IRQn);
    19.     UART_SetIntEnabledOnRxBufferFull(UART0, true);

    20.     while (1) /* Endless loop. */
    21.     {
    22.         __ASM("WFI");
    23.     }
    24. }

    25. /* ISR for UART0 */
    26. void UART0_RX_TX_IRQHandler(void)
    27. {
    28.     volatile uint8_t tmp8;
    29.     /* ISR for RX. */
    30.     if (UART_IsRxBufferFull(UART0))
    31.     {
    32.         tmp8 = UART_GetRxData(UART0); /* Read rx data to clear rx flag. */
    33.         /* Toggle the Led3. */
    34.         GPIO_TogglePinLogic(BSP_GPIO_LED3_PORT, BSP_GPIO_LED3_PIN);
    35.     }
    36. }

    37. /* EOF. */
    复制代码











    回复

    使用道具 举报

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

    本版积分规则

    Archiver|手机版|小黑屋|恩智浦技术社区    

    GMT+8, 2017-11-19 07:27 , Processed in 0.112428 second(s), 15 queries , Memcache On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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