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…,然后找到toolsw800projectsSDK_ProjectprojectCDK_WSCDK_WS.cdkws文件,点击Open,就可以打开工程。
打开工程后目录如下(user 是我自己建的,不用管):
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里调用线程创建函数,则这个新线程就可以正常工作了
关键字:联盛德 SDK 启动分析
引用地址:
联盛德 HLK-W801(二):SDK启动分析
推荐阅读最新更新时间:2024-11-10 04:53
腾讯发布VR SDK 推出虚拟现实开发者扶持计划
新浪科技讯 12月21日晚间消息,今日腾讯公布了Tencent VR项目进展,包括公布SDK和开发者扶持计划。
腾讯 VR SDK 框架简介 Tencent VR方面表示将在开发者版本阶段开发一款集成传感器和专用屏幕的头戴现实设备(HMD),通过HDMI和USB接口与PC平台链接,配合腾讯的第一代miniStation微游戏作为VR的开发平台提供给开发者。
腾讯还将在技术成熟的时候,开发配合手机使用的移动方案,以及带有电池的便携主机的消费者CV版本,并配合体感手柄提供完整体验的虚拟现实方案。
腾讯本次公布VR SDK 1.0版本由5个功能组件部分所组成:头部姿态定位以及图像输出的渲染组件;多
[手机便携]
ARM-Linux移植之(一)——内核启动流程分析
内核版本:2.6.22 为什么要采用这样一个较低的版本进行移植了,因为韦东山大牛说了,低版本的才能学到东西,越是高版本需要移植时做的工作量越少,学的东西越少。 内核启动分为三个阶段,第一是运行head.S文件和head-common.S,第三个阶段是允许第二是运行main.c文件 对于ARM的处理器,内核第一个启动的文件是arc/arm/kernel下面的head.S文件。当然arc/arm/boot/compress下面也有这个文件,这个文件和上面的文件略有不同,当要生成压缩的内核时zImage时,启动的是后者,后者与前者不同的时,它前面的代码是做自解压的,后面的代码都相同。我们这里这分析arc/arm
[单片机]
arm启动代码详细分析
arm启动代码详细分析 所谓启动代码,就是处理器在启动的时候执行的一段代码,主要任务是初始化处理器模式,设置堆栈,初始化变量等等.由于以上的操作均与处理器体系结构和系统配置密切相关,所以一般由汇编来编写. 具体到S64,启动代码分成两部分,一是与ARM7TDMI内核相关的部分,包括处理器各异常向量的配置,各处理器模式的堆栈设置,如有必要,复制向量到RAM,以便remap之后处理器正确处理异常,初始化数据(包括RW与ZI),最后跳转到Main.二是与处理器外部设备相关的部分,这和厂商的联系比较大.虽然都采用了ARM7TDMI的内核,但是不同的厂家整合了不同的片上外设,需要不同的初始化,其中比较重要的是初始化WDT,初始化各子
[单片机]
ARM9代码分析启动MAIN.C
1 #define GLOBAL_CLK 1 2 3 #include stdlib.h 4 #include string.h 5 #include “def.h” 6 #include “option.h” 7 #include “2440addr.h” 8 #include “2440lib.h” 9 #include “2440slib.h” 10 #include “mmu.h” 11 #include “profile.h” 12 #include “memtest.h” 13 14 //extern置于变量或函数之前,以标示变量或函数的定义在别的文件中 15 extern
[单片机]
BootLoader启动引导方式分析(sd卡引导)
引言 BootLoader通常称为“系统的引导加载程序”,是系统加电或复位后执行的第一段程序代码 。这段程序的主要任务是,实现硬件设备初 始化并建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。通 常,BootLoader包含两种不同的加载和启动引导方式,即启动加载方式和下载方式。 ① 启动加载(boot loading)方式。这种引导方式也称为“自主(autonomous)引导方式”,也即BootLoader从目标机的某个固态存储设备上将操作系统 加载到RAM中并引导运行,整个过程并没有用户的介入。这种引导方式是BootLoader的正常工作模式下普
[单片机]
STM32的完整启动流程分析
关于STM32的启动流程,网上有的资料在讨论几种boot模式,有的在回答启动文件的内容,在查阅了很多资料后,本文给出一个比较全面的总结和回答。 1. 根据boot引脚决定三种启动模式 复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值。BOOT0 为专用引脚,而 BOOT1 则与 GPIO 引脚共用。一旦完成对 BOOT1 的采样,相应 GPIO 引脚即进入空闲状态,可用于其它用途。BOOT0与BOOT1引脚的不同值指向了三种启动方式: 1)从主Flash启动。主Flash指的是STM32的内置Flash。选择该启动模式后,内置Flash的起始地址将被重映射到0x00000000地址,代码将在该处开始执行。一般我
[单片机]
【联盛德W806上手笔记】五、TIM定时器
Windows 10 20H2 HLK-W806-V1.0-KIT WM_SDK_W806_v0.6.0 摘自《W806 芯片设计指导书 V1.0》、《W806 MCU 芯片规格书 V2.0》 定时器 微秒与毫秒计时(据时钟频率配置计数个数),实现六个可配置的 32 位计数器,当相应计算器配置的计数完成时,产生相应中断。 库函数 函数 打开wm_tim.h,有如下的函数声明: HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim); //初始化所用的定时器及其节拍所用时间单位和计数值等基本参数配置 HAL_StatusTypeD
[单片机]
LPC2114启动代码分析
LPC2114启动代码的编写主要包括: 1.异常向量表的建立 2.MCU各种模式堆栈的初始化 3.系统基本的初始化工作 下面分别进行介绍. (一)ARM相关指令及伪指令 LDR PC,ResetAddr 将ResetAddr标号地址所指的内容传送给PC寄存器 LDR PC,=ResetAddr 将ResetAddr标号地址传送给PC寄存器 ResetAddr DCD ResetInit 为ResetAddr分配一个字的地址空间,以ResetInit初始化,即ResetAddr地址所指的内容为ResetInit标号地址 SvcStackSpace Space SVC_S
[单片机]