mirror of
https://gitee.com/moluo-tech/AT-Command.git
synced 2025-02-05 17:28:23 +08:00
3.5 KiB
3.5 KiB
平台移植及配置
在使用前,你需要先进行平台移植,下面是下整个组件的目录结构:
at_chat
│
|───docs 使用文档
|───samples 演示案例
|───inlcude 头文件目录
| │───at_chat.h
| │───at_port.h
| │───linux_list.h
└───src
│───at_port.c
│───at_chat.c
平台移植
移植只涉及到3个接口实现及若干配置定义(at_port.h中声明了这些需要实现的接口及配置).
//内存申请,释放
void *at_malloc(unsigned int nbytes);
void at_free(void *ptr);
//获取系统毫秒数(从开机开始)
unsigned int at_get_ms(void);
内存相关接口实现
void *at_malloc(unsigned int nbytes)
{
return malloc(nbytes);
}
void at_free(void *ptr)
{
free(ptr);
}
系统时间获取接口实现
如果你使用的是MCU,可以通过定时器计数方式实现,参考下面的例程:
/* 滴答计数器*/
static volatile unsigned int tick = 0;
/**
* @brief 定时器中断服务程序(1ms 1次)
*/
void timer_handler(void)
{
tick++;
}
/**
* @brief 获取系统毫秒数
*/
unsigned int at_get_ms(void)
{
return tick;
}
对于linux系统,可以参考下面方式获取:
/**
* @brief 获取系统毫秒数
*/
unsigned int at_get_ms(void)
{
struct timeval tv_now;
//这里需要注意的是,当系统时间被更改后,会获取到一个错误的值,造成命令超时(代码仅做的演示)。
gettimeofday(&tv_now, NULL);
return (tv_now.tv_sec * 1000000 + tv_now.tv_usec) / 1000;
}
配置说明
这些配置项主用于命令交互响应设置,内存使用限制及模块开关等,实际应用时需要考虑你所在系统的资源情况,对于大多数情况,默认值已经够用。
配置项 | 默认值 | 配置说明 |
---|---|---|
AT_DEF_RESP_OK | "OK" | 默认AT命令正确响应,当匹配到此值到,状态码返回AT_RESP_OK |
AT_DEF_RESP_ERR | "ERROR" | 默认AT命令错误响应,当匹配到此值到,状态码返回AT_RESP_ERR |
AT_DEF_TIMEOUT | 500 | 默认AT响应超时时间(ms),当命令超时时,状态码返回AT_RESP_TIMEOUT |
AT_DEF_RETRY | 2 | 当发生AT响应错误或者超时时重发次数 |
AT_URC_TIMEOUT | 1000 | 默认URC帧超时时间(ms) |
AT_MAX_CMD_LEN | 256 | 最大命令长度(用于可变参数命令内存限制). |
AT_LIST_WORK_COUNT | 32 | 它规定了同时能够支持的AT异步请求个数, 他可以限制应用程序(使用不当时)短时间内大量突发请求造成内存不足的问题,一般来说8-16已经够用了. |
AT_URC_WARCH_EN | 1 | URC消息监视使能 |
AT_URC_END_MARKS | ":,\n" | URC结束标记列表,越少越好,因为URC匹配程序会根据此列表对接收到的字符做URC结束帧匹配处理,列表太大会影响程序性能. |
AT_MEM_WATCH_EN | 1u | 内存监视使能 |
AT_MEM_LIMIT_SIZE | (3 * 1024) | 内存使用限制 |
AT_WORK_CONTEXT_EN | 1u | AT作业上下文相关接口 |