联盛德 HLK-W801(二):SDK启动分析

联盛德 HLK-W801(二):SDK启动分析

声明:这是学习的时候记录的笔记,可能存在错误,另外我有一篇针对这个开发板打开串口复位问题进行了硬件修改,相关问题请看我的另一篇博客

1. 开发环境

  • 系统:win10
  • 开发版:联盛德 HLK-W801开发板
  • SDK版本:wm_sdk_w80x_20211115
  • IDE:cdk-windows-V2.12.1

2. SDK工程简述

对于软件安装,可以完全仿照网上关于W806教程,非常多。sdk下载网上也有教程,本文不赘述

感叹:明明是一个白盒的mcu,结果因为寄存器等资料不全,硬生生的要当黑盒来用,没办法成本限制不得不用,幸亏SDK上有些注释,希望SDK没有bug,否则直接挂逼

用cdk打开软件后,点击菜单的Project ->Open Multi-Project Workspace…,然后找到\tools\w800\projects\SDK_Project\project\CDK_WS\CDK_WS.cdkws文件,点击Open,就可以打开工程。

打开工程后目录如下(user 是我自己建的,不用管):

在这里插入图片描述

目录名 功能
demo sdk下的所有外设使用示例
include 所有能用到的头文件,包括底层源码,
ld 链接脚本文件,指导编译的
platform w801的底层源码
src 驱动框架库,是在底层源码之上的带有协议的开源库,包括rtos,lwip
user 工程里我自己建的文件夹(sdk里面不带),用户自己写的程序最好放在这里,避免污染sdk,第五节会说明这个文件夹

3. 从SDK上分析W801的启动过程

3.1 在汇编中启动

点开链接脚本gcc_csky.ld, 可以vectors在 .text 段开始地址,如下图:
在这里插入图片描述

点开startup.s,可以发现vectors指的是中断向量表,中断向量表最后有定义_start,如图:
在这里插入图片描述

当_start执行调用了函数Reset_Handler,Reset_Handler除了配置堆栈,初始化数据区,内存等外,主要执行了三个函数,其中前两个是条件编译的,如下图:
在这里插入图片描述

宏的定义决定了前两个函数是否执行,程序编译上可能用到的宏有五大类来源:系统宏,编程语言宏,IDE软件宏,工程项目定义宏,文件内部定义宏。观察可知__NO_SYSTEM_INIT,__NO_BOARD_INIT 这两个宏具有明显的SDK特色,所以只能是工程项目定义宏或文件内部定义宏。

在startup.s文件中引入了头文件csi_config.h,工程中找到这个文件,发现定义了很文件内部定义宏,如下:
在这里插入图片描述

然后右击本工程的工程名W800_SDK,选图标为魔术棒形状的Options for “W800_SDK”选项,在选择Compiler,查看工程配置的工程项目定义宏,如下图:
在这里插入图片描述

通过这些宏定义可以知道,没定义那两个宏,所以SystemInit,board_init, main三个函数要依次调用。

3.2 SystemInit函数

在这里插入图片描述

3.3 board_init函数

在这里插入图片描述
上图那个配置printf的方式可以看一下,因为这个和硬件无关,很容易看懂,可以学习一下它的思路。

至于w801如何初始化串口我会另写一篇来讲: 联盛德 HLK-W801的UART的使用

3.4 main函数

在这里插入图片描述
main函数调用的函数都有相应的注释,这里不再赘述,我们看一下main最后定义的线程函数,task_start如下:
在这里插入图片描述

最后进入了UserMain()函数。

4. UserMain函数实现自带demo的运行

请参考我的另一篇文章:那篇还未整理完

5. 用户添加程序(本人推荐的方式)

5.1 新建一个文件夹 user

在工程中右击添加一个新的文件夹,叫user。如下:
在这里插入图片描述

5.2 编写创建任务函数,在UserMain调用

按功能在sdk的app目录下创建.c和.h文件:
在这里插入图片描述

在工程user目录下添加这些.c.h文件,在文件内创建线程
在这里插入图片描述

在UserMain里调用线程创建函数,则这个新线程就可以正常工作了
在这里插入图片描述

版权声明:本文为CSDN博主「Little Grey Bear」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Zhichao_Zhang/article/details/122925727

联盛德 HLK-W801(二):SDK启动分析

声明:这是学习的时候记录的笔记,可能存在错误,另外我有一篇针对这个开发板打开串口复位问题进行了硬件修改,相关问题请看我的另一篇博客

1. 开发环境

  • 系统:win10
  • 开发版:联盛德 HLK-W801开发板
  • SDK版本:wm_sdk_w80x_20211115
  • IDE:cdk-windows-V2.12.1

2. SDK工程简述

对于软件安装,可以完全仿照网上关于W806教程,非常多。sdk下载网上也有教程,本文不赘述

感叹:明明是一个白盒的mcu,结果因为寄存器等资料不全,硬生生的要当黑盒来用,没办法成本限制不得不用,幸亏SDK上有些注释,希望SDK没有bug,否则直接挂逼

用cdk打开软件后,点击菜单的Project ->Open Multi-Project Workspace…,然后找到\tools\w800\projects\SDK_Project\project\CDK_WS\CDK_WS.cdkws文件,点击Open,就可以打开工程。

打开工程后目录如下(user 是我自己建的,不用管):

在这里插入图片描述

目录名 功能
demo sdk下的所有外设使用示例
include 所有能用到的头文件,包括底层源码,
ld 链接脚本文件,指导编译的
platform w801的底层源码
src 驱动框架库,是在底层源码之上的带有协议的开源库,包括rtos,lwip
user 工程里我自己建的文件夹(sdk里面不带),用户自己写的程序最好放在这里,避免污染sdk,第五节会说明这个文件夹

3. 从SDK上分析W801的启动过程

3.1 在汇编中启动

点开链接脚本gcc_csky.ld, 可以vectors在 .text 段开始地址,如下图:
在这里插入图片描述

点开startup.s,可以发现vectors指的是中断向量表,中断向量表最后有定义_start,如图:
在这里插入图片描述

当_start执行调用了函数Reset_Handler,Reset_Handler除了配置堆栈,初始化数据区,内存等外,主要执行了三个函数,其中前两个是条件编译的,如下图:
在这里插入图片描述

宏的定义决定了前两个函数是否执行,程序编译上可能用到的宏有五大类来源:系统宏,编程语言宏,IDE软件宏,工程项目定义宏,文件内部定义宏。观察可知__NO_SYSTEM_INIT,__NO_BOARD_INIT 这两个宏具有明显的SDK特色,所以只能是工程项目定义宏或文件内部定义宏。

在startup.s文件中引入了头文件csi_config.h,工程中找到这个文件,发现定义了很文件内部定义宏,如下:
在这里插入图片描述

然后右击本工程的工程名W800_SDK,选图标为魔术棒形状的Options for “W800_SDK”选项,在选择Compiler,查看工程配置的工程项目定义宏,如下图:
在这里插入图片描述

通过这些宏定义可以知道,没定义那两个宏,所以SystemInit,board_init, main三个函数要依次调用。

3.2 SystemInit函数

在这里插入图片描述

3.3 board_init函数

在这里插入图片描述
上图那个配置printf的方式可以看一下,因为这个和硬件无关,很容易看懂,可以学习一下它的思路。

至于w801如何初始化串口我会另写一篇来讲: 联盛德 HLK-W801的UART的使用

3.4 main函数

在这里插入图片描述
main函数调用的函数都有相应的注释,这里不再赘述,我们看一下main最后定义的线程函数,task_start如下:
在这里插入图片描述

最后进入了UserMain()函数。

4. UserMain函数实现自带demo的运行

请参考我的另一篇文章:那篇还未整理完

5. 用户添加程序(本人推荐的方式)

5.1 新建一个文件夹 user

在工程中右击添加一个新的文件夹,叫user。如下:
在这里插入图片描述

5.2 编写创建任务函数,在UserMain调用

按功能在sdk的app目录下创建.c和.h文件:
在这里插入图片描述

在工程user目录下添加这些.c.h文件,在文件内创建线程
在这里插入图片描述

在UserMain里调用线程创建函数,则这个新线程就可以正常工作了
在这里插入图片描述

版权声明:本文为CSDN博主「Little Grey Bear」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Zhichao_Zhang/article/details/122925727

生成海报
点赞 0

Little Grey Bear

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

基于8051单片机实现电子时钟+数字秒表设计

概述 电子时钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显 示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许

51小车(一)

1.准备: 借鉴: 详细介绍如何从零开始制作51单片机控制的智能小车(一)———让小车动起来_慕羽★的博客-CSDN博客_新手怎么制作单片机智能小车 2.已有模块 (1)  已有电机驱动 (2)

三相电机相电感,相电阻和极对数的测量

相电阻测量: 方法一:可使用万用表电阻档直接测量其中两端 方法二:可使用LCR数字电桥仪器测量 万用表操作: 将万用表旋转到电阻档的适当量程内 将万用表上的两表笔接触在电机的其中任意