AWTK移植STM32F767

AWTK移植STM32F767实践

1. 资料下载

1.1 下载源码

源码官方仓库:码云awtk官方参库
AWTK移植STM32F767官方demo :官方移植demo

1.2 下载官方文档

以下几个文档是移植AWTK需要仔细阅读。

  1. AWTK开发实践pdf
  2. AWTK 硬件资源需求评估
  3. 嵌入式平台移植注意事项
  4. AWTK Designer快速使用指南.pdf (位于AWTK designer安装目录下)

1.3 安装awtk designer

官网下载地址:AWTK官网地址

2. 移植前硬件准备

移植AWTK前需确认LCD驱动正常,移植先自己简单测试下画线,画点是否正常。

3. 资源评估

  1. 官方移植demo资源
    编译一下官方的移植demo,FALSH:993.07kB, 其实AWTK控件没有那么大,只是移植demo用的demo ui把很多的字库资源直接编译到FLASH,这导致编译出映像文件很大。这也是我刚移植是没注意遇到的一个问题。
    官方demo
  2. 屏蔽输入法,使用基本控件,AWTK编译FLASH约250K

4.工程建立

4.1 源码目录管理

源码目录里增加3个AWTK相关目录:

  1. AWTK: 用于存储WTK源码
    进入AWTK目录,执行git clone命令从码云上下载awtk最新源码。
    git clone https://gitee.com/yyf_sea/awtk
  2. AWTK_PROT: 用于存储AWTK移植相关源码。
  3. AWTK_APP: 用于存储AWTK demo UI
    在这里插入图片描述

4.2 keil工程管理

官方移植文档
参考官方移植文档,将相关的文件添加keil工程目录中。

4.3 keil工程配置

官方移植文档
参考官方文档:主要以下相要配置
1.如果要加载 png/jpg 图片格式 StackSize 不小于 32K。
2. 使用 keil 编译时,请在 C/C++ -> Misc Controls 中加上**–gnu **标志。
3. 如果系统有 FPU,初始化时一定要开启 FPU。
4. 在工程中定义宏 HAS_AWTK_CONFIG。

5 嵌入式系统移植

如果要使用自己的嵌入式系统,还需要移植一些系统资源。
下载的官方移植文档中已经移植有像RT-Tread系统,如果要移植其他系统,可参考该系统移植

5.1. 锁移植

AWTK提供了锁的接口,我们只要基于要移植的嵌入式系统实现相应接口即可。

接口名称接口描述
tk_mutex_t* tk_mutex_create()创建锁
ret_t tk_mutex_lock(tk_mutex_t* mutex)上锁
ret_t tk_mutex_unlock(tk_mutex_t* mutex)释放锁
ret_t tk_mutex_destroy(tk_mutex_t* mutex)销毁锁

我们将官方移植例程中:awtk\src\platforms\rtt\mutex.c拷贝到AWTK_PORT目录,然后修改实现相应接口。
以上锁接口为例:

ret_t tk_mutex_lock(tk_mutex_t* mutex) {
  return_value_if_fail(mutex != NULL, RET_BAD_PARAMS);
  os_lock(mutex->mutex);
  return RET_OK;
}

5.2 信号量移植

AWTK提供了信号量的接口,我们只要基于要移植的嵌入式系统实现相应接口即可。

接口名称接口描述
tk_semaphore_t* tk_semaphore_create创建信号量
ret_t tk_semaphore_wait(tk_mutex_t* mutex)等待信号量
ret_t tk_semaphore_post(tk_mutex_t* mutex)发送信号量
ret_t tk_semaphore_destroy(tk_mutex_t* mutex)销毁信号量

我们将官方移植例程中:awtk\src\platforms\rtt\semaphore.c拷贝到AWTK_PORT目录,然后修改实现相应接口。
以发送信号量接口为例:

ret_t tk_semaphore_post(tk_semaphore_t* semaphore) {
  return_value_if_fail(semaphore != NULL, RET_BAD_PARAMS);

  return_value_if_fail(os_sem_post(semaphore->sem) == OS_ERR_NONE, RET_FAIL);

  return RET_OK;
}

5.3 进程移植

AWTK提供了进程的接口,我们只要基于要移植的嵌入式系统实现相应接口即可,以下为进程的主要接口

接口名称接口描述
tk_thread_t* tk_thread_create()创建任务
ret_t tk_thread_start(tk_thread_t* thread)启动任务
ret_t tk_thread_destroy(tk_thread_t* thread)删除任务

我们将官方移植例程中:awtk\src\platforms\rtt\semaphore.c拷贝到AWTK_PORT目录,然后修改实现相应接口。

5.4平台资源相关移植

  1. 时间节拍移植
uint64_t get_time_ms64() {
  return HAL_GetTick();
}
  1. 休眠接口移植
void sleep_ms(uint32_t ms) {
  delay_ms(ms);
}
  1. AWTK资源移植
    AWTK需要使用到动态内存,我们可以基于AWTK本身提供的内存管理来做,我们只需要分配一段内存,然后AWTK的内存初始化接口初始化即可。
#define AWTK_MEM2_MAX_SIZE 2 * 1024 * 1024			//AWTK·ÖÅä2M¶¯Ì¬ÄÚ´æ¿Õ¼ä
#define AWTK_MEM2_ADDR (uint8_t*)0XC0400000

ret_t platform_prepare(void) {
  tk_mem_init(AWTK_MEM2_ADDR, AWTK_MEM2_MAX_SIZE);
	
  return RET_OK;
}
  1. 自定义内存管理
    如果想使用自己的内存管理就必须实现AWTK的3个内存管理接口
接口名称接口
void* malloc(size_t size)分配内存
void* realloc(void* ptr, size_t size)重分配内存
void free(void* ptr)释放内存
void* calloc(size_t count, size_t size)分配内存

注意:realloc不能直接调用malloc来直接实现

6 AWTK Designer生成界面

6.1. 创建工程

在这里插入图片描述

6.2 创建demo ui

demo ui包括两个
在这里插入图片描述

6.3 裁剪字库

因为我们的demo仅有两个按钮,我们可以对字库进行裁剪,以减少demo ui占用的flash控件。
如图裁剪前有9460.61KB,裁剪后仅为14.4KB。
在这里插入图片描述

6.4 打包

  1. 将工程打包
    在这里插入图片描述
  2. 将打包文件拷贝到keil工程目录
    将awtk demo工程目录下的res目录和rc目录拷贝到keil工程的awtk-app目录下。
  3. 重新编译keil工程
    注意:编译可能提示部分文件找不到,修改相关路径即可

7 awtk启动过程

7.1awtk初始化入口

我们在代码中调用gui_app_start()即可初始化并启动awtk demo

void  GUI_task( void*arg )
{
	gui_app_start(LCD_XSIZE, LCD_YSIZE);

	while ( 1 )
	{
		GUI_msleep( 1 );
	}
}

7.2 awtk初始化过程

在这里插入图片描述

8.鼓励作者

在这里插入图片描述

9.我的公众号

关注我的公众号,分享嵌入开发,android开发,linux运维的原创文章。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值