[单片机框架][AT指令框架][从机版] 高内聚 低耦合
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.") 三种写法
一、核心思想
- 采用__attribute__((used)) attribute((section (“atcmd”)))的形式
优点:
- 可以自由变换输出通道,实现三方通讯。
- 注册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指令框架][从机版] 高内聚 低耦合相关推荐
- php tp框架手册,php框架手册
应用介绍 php框架手册是一款涵盖php相关教程的app,提供php基础教程,为初学者提供一个入门的平台,让初学者对php产生兴趣,该app还包含linux教程.linux命令.mysql教程和php ...
- 很强大!低耦合高内聚的MCU实用软件框架
大家好,我是晓宇,不知道大家有没有听过软件设计中的低耦合,高内聚的两个原则. 具体是什么意思呢? 在一个项目中:每个模块之间相联系越紧密,则耦合性越高:这样你改动其中一个模块,其他模块也需要一起改动, ...
- iOS游戏框架Sprite Kit基础教程——Swift版上册
iOS游戏框架Sprite Kit基础教程--Swift版上册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C 介绍:本教程是国内唯一的Swift版的Spritekit ...
- [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)...
星期一, 20. 八月 2018 01:53上午 - beautifulzzzz 1.前言 做类似zigbee.ble mesh...无线网络节点性能测试的时候,手动操作然后看表象往往很难找出真正的原 ...
- Java框架jboot_Jboot v3.0.3 正式版发布,基于 JFinal 的微服务框架
Jboot是一个基于JFinal.JFinal-Undertow.Dubbo等开发的微服务框架,帮助开发者降低微服务开发门槛.同时完美支持在idea.eclipse下多maven模块,对java代码. ...
- Spring Boot框架入门到进阶教程(自学版)
文章目录 前言 一Spring Boot 入门 1.Spring Boot 简介 2.微服务 3.环境准备 1.MAVEN设置: 2.IDEA设置 4.Spring Boot HelloWorld 1 ...
- 火山视窗CEF浏览器用网页框架操作实现取本机IP、地址
本源码转载自利快云https://www.lkuaiy.com/ 火山视窗CEF浏览器用网页框架操作实现取本机IP.地址 一.准备工作 在网页中存在一种名叫"框架"的元素,具体 ...
- Python 15大框架、操作系统 linux的发行版有多少
目录: 操作系统 1.2 Linux发行版本 Python Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和 ...
- LabVIEW 通用框架,满足绝大部分上位机软件功能要求,简单直观
LabVIEW 通用框架,满足绝大部分上位机软件功能要求,简单直观 _:7210668077108761labview使用者
最新文章
- 一文搞懂:词法作用域、动态作用域、回调函数、闭包
- 《软件需求分析(第二版)》第 6 章——获取客户的需求 重点部分总结
- 查看一个定义的方法在哪些地方被使用过(vs2008)
- Vue 中的列表渲染
- ssm游文化推广系统答辩PPT模板
- 荣耀手表gspro会用鸿蒙,真实使用荣耀手表GS Pro功能用2个月评测反馈!一定看看如何!...
- java内存模型及GC原理
- Atitit 提升开发效率的方法 提升语言级别 目录 1. 提升语言级别到4gl	1 1.1. 语言的代际关系 sql 》script 》java	1 1.2. 使用4gl dsl语言与api	1
- 算法设计与分析第一章习题解答与学习指导(第2版)屈婉婷 刘田 张立昂 王捍贫编著 清华大学出版社
- CSND博客几年没有登录了,终于找回密码来报个到!
- 信捷plc用c语言编程视频,信捷PLC/触摸屏全套编程软件/学习教程视频资料 大全编程操作手册...
- 成都二套房限购政策有哪些,看完就知道
- 国内常用地图坐标系总结
- 免费的PDF转换器有哪些?小圆象PDF转换器办公达人必备工具
- Nginx从入门到入坟(十)- Rewrite功能详解与案例实操
- 【软工作业思考】关于软工的一些概念性理解暨第一次阅读作业
- MFC 108问题
- oracle dba_waiters中的lockid是什么,SQL Server和Oracle中的锁和死锁(三)
- android gta5 下载地址,gta5 for android
- 合作式智能运输系统 车用通信系统 应用层及应用数据交互标准
热门文章
- 计算机接口中物理地址,怎么修改电脑的物理地址
- 【PTA】跟奥巴马一起画方块
- #652 (Div. 2)C. RationalLee(贪心)
- 官网MySQL下载速度慢的解决方法
- ES可视化工具--ElasticHD--下载、安装、使用
- 太厉害了!2021Java不死我不倒
- 【电脑开机报错(0271: Check Date and Time sett ings .)】
- 索引超出矩阵维度(《无人驾驶车辆模型预测控制》第一版)
- iOS 类似简单的第三方微博客户端,可进行登录微博浏览相关信息
- 10届蓝桥杯大赛青少年省赛C++组试题