AT指令框架--从机版]

    • 一、核心思想
    • 二、下面就是举例使用方法:test.c
    • 三、用串口举例
    • 四、代码:
    • 五、GCC链接文件修改(.lds):
    • 六、IAR链接文件修改(.icf) (带协议栈版本)
    • 七、IAR链接文件修改(.icf) (不带协议栈版本)
    • 八、IAR链接文件修改(.icf) (OAD版本)![在这里插入图片描述](https://img-blog.csdnimg.cn/b56e0f494970411b92733b3f1a1597d0.png)
    • 九、IAR链接文件整合(OAD_IMG_B+OAD_IMG_A+正常APP)
  • IAR __section__(".atcmd.") 三种写法

一、核心思想

  1. 采用__attribute__((used)) attribute((section (“atcmd”)))的形式

优点:

  1. 可以自由变换输出通道,实现三方通讯。
  2. 注册AT指令,只用写到模块内部,不用耦合其他文件

二、下面就是举例使用方法:test.c

#include "atcmd_slave.h"#if ATCMD_EN
// 在功能模块中定义一个标准函数
static int test(atcmd_pack_t *pack) {uint8_t buff[20] = "test\r\n";strcat((char*)buff, AT_OK);pack->reply(buff, strlen((char*)buff));return 0;
}static int test2(atcmd_pack_t *pack) {if (pack->argc != 2) return -1;uint8_t buff[20] = "";uint8_t num = 0, num1 = 0;sscanf((char*)(pack->data), "%c,%c", &num, &num1);snprintf((char*)buff, 20, "%d,%d"AT_OK, num, num1);pack->reply(buff, strlen((char*)buff));return 1;
}// 注册AT指令,传入标准函数
ATCMD_INIT("AT^TEST?", test);
ATCMD_INIT("AT^TEST=", test2);
#endif

三、用串口举例

没有使用DMA和中断,仅提供思路。

uint8_t buff[255] = {0};
uint8_t len = 0;
void uart_rx_cb(uint8_t data) {buff[len] = data;len++;if (len == 1 && buff[0] != 'A')len = 0;else if (len == 2 && buff[1] != 'T')len = 0;else if (len == 3 && buff[2] != '^')len = 0;else if (buff[len] == '\n' && buff[len - 1] == '\r') {atcmd_pack_t pack;pack.reply = uart_send;pack.data = data;pack.len = len;atcmd_msg_handle(&pack);}
}

如果使用DMA和中断,直接:

void uart_rx_cb(uint8_t *data, uint16_t len) {atcmd_pack_t pack;pack.reply = uart_send;pack.data = data;pack.len = len;atcmd_msg_handle(&pack);
}

四、代码:

/********************************************************************************* @file    atcmd_slave.c* @author  jianqiang.xue* @Version V1.0.0* @Date    2022-09-04* @brief   从机版 AT指令 https://lisun.blog.csdn.net/article/details/126683930********************************************************************************/
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h>#include "atcmd_slave.h"extern atcmd_info_t __atcmd_start;
extern atcmd_info_t __atcmd_end;bool atcmd_msg_handle(atcmd_pack_t* pack) {bool match = false;atcmd_info_t* atcmd;for (atcmd 

[单片机框架][AT指令框架][从机版] 高内聚 低耦合相关推荐

  1. php tp框架手册,php框架手册

    应用介绍 php框架手册是一款涵盖php相关教程的app,提供php基础教程,为初学者提供一个入门的平台,让初学者对php产生兴趣,该app还包含linux教程.linux命令.mysql教程和php ...

  2. 很强大!低耦合高内聚的MCU实用软件框架

    大家好,我是晓宇,不知道大家有没有听过软件设计中的低耦合,高内聚的两个原则. 具体是什么意思呢? 在一个项目中:每个模块之间相联系越紧密,则耦合性越高:这样你改动其中一个模块,其他模块也需要一起改动, ...

  3. iOS游戏框架Sprite Kit基础教程——Swift版上册

    iOS游戏框架Sprite Kit基础教程--Swift版上册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C  介绍:本教程是国内唯一的Swift版的Spritekit ...

  4. [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)...

    星期一, 20. 八月 2018 01:53上午 - beautifulzzzz 1.前言 做类似zigbee.ble mesh...无线网络节点性能测试的时候,手动操作然后看表象往往很难找出真正的原 ...

  5. Java框架jboot_Jboot v3.0.3 正式版发布,基于 JFinal 的微服务框架

    Jboot是一个基于JFinal.JFinal-Undertow.Dubbo等开发的微服务框架,帮助开发者降低微服务开发门槛.同时完美支持在idea.eclipse下多maven模块,对java代码. ...

  6. Spring Boot框架入门到进阶教程(自学版)

    文章目录 前言 一Spring Boot 入门 1.Spring Boot 简介 2.微服务 3.环境准备 1.MAVEN设置: 2.IDEA设置 4.Spring Boot HelloWorld 1 ...

  7. 火山视窗CEF浏览器用网页框架操作实现取本机IP、地址

    本源码转载自利快云https://www.lkuaiy.com/ 火山视窗CEF浏览器用网页框架操作实现取本机IP.地址   一.准备工作 在网页中存在一种名叫"框架"的元素,具体 ...

  8. Python 15大框架、操作系统 linux的发行版有多少

    目录: 操作系统 1.2 Linux发行版本 Python Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和 ...

  9. LabVIEW 通用框架,满足绝大部分上位机软件功能要求,简单直观

    LabVIEW 通用框架,满足绝大部分上位机软件功能要求,简单直观 _:7210668077108761labview使用者

最新文章

  1. 一文搞懂:词法作用域、动态作用域、回调函数、闭包
  2. 《软件需求分析(第二版)》第 6 章——获取客户的需求 重点部分总结
  3. 查看一个定义的方法在哪些地方被使用过(vs2008)
  4. Vue 中的列表渲染
  5. ssm游文化推广系统答辩PPT模板
  6. 荣耀手表gspro会用鸿蒙,真实使用荣耀手表GS Pro功能用2个月评测反馈!一定看看如何!...
  7. java内存模型及GC原理
  8. Atitit 提升开发效率的方法 提升语言级别 目录 1. 提升语言级别到4gl 1 1.1. 语言的代际关系 sql 》script 》java 1 1.2. 使用4gl dsl语言与api 1
  9. 算法设计与分析第一章习题解答与学习指导(第2版)屈婉婷 刘田 张立昂 王捍贫编著 清华大学出版社
  10. CSND博客几年没有登录了,终于找回密码来报个到!
  11. 信捷plc用c语言编程视频,信捷PLC/触摸屏全套编程软件/学习教程视频资料 大全编程操作手册...
  12. 成都二套房限购政策有哪些,看完就知道
  13. 国内常用地图坐标系总结
  14. 免费的PDF转换器有哪些?小圆象PDF转换器办公达人必备工具
  15. Nginx从入门到入坟(十)- Rewrite功能详解与案例实操
  16. 【软工作业思考】关于软工的一些概念性理解暨第一次阅读作业
  17. MFC 108问题
  18. oracle dba_waiters中的lockid是什么,SQL Server和Oracle中的锁和死锁(三)
  19. android gta5 下载地址,gta5 for android
  20. 合作式智能运输系统 车用通信系统 应用层及应用数据交互标准

热门文章

  1. 计算机接口中物理地址,怎么修改电脑的物理地址
  2. 【PTA】跟奥巴马一起画方块
  3. #652 (Div. 2)C. RationalLee(贪心)
  4. 官网MySQL下载速度慢的解决方法
  5. ES可视化工具--ElasticHD--下载、安装、使用
  6. 太厉害了!2021Java不死我不倒
  7. 【电脑开机报错(0271: Check Date and Time sett ings .)】
  8. 索引超出矩阵维度(《无人驾驶车辆模型预测控制》第一版)
  9. iOS 类似简单的第三方微博客户端,可进行登录微博浏览相关信息
  10. 10届蓝桥杯大赛青少年省赛C++组试题