AT-Command/docs/Porting.md
2022-12-31 22:42:31 +08:00

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作业上下文相关接口