如何利用官方SDK文件来辅助开发?
如何利用官方SDK文件来辅助开发
1.首先要先知道什么是SDK?
SDK或者SDK包指的是,半导体厂商针对自己研发的芯片,同步推出的一个软件开发工具包。
它可以简单的为某个程序设计语言提供应用程序接口API的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。
SDK还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档。
我是这样理解的,SDK就像是这个芯片的使用说明书:告诉你有哪些按钮,这些按钮分别控制着什么功能。
2.如何使用?
首先要从官网上下载下来,然后安装下来,会看到这个包里有很多的文件。
这次重点放在寄存器的相关文件中。
1)cc.h数据类型头文件
#ifndef __CC_H
#define __CC_H/** 自定义一些数据类型供库文件使用*/
#define __I volatile
#define __O volatile
#define __IO volatiletypedef signed char int8_t;
typedef signed short int int16_t;
typedef signed int int32_t;
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
typedef signed char s8;
typedef signed short int s16;
typedef signed int s32;
typedef signed long long int s64;
typedef unsigned char u8;
typedef unsigned short int u16;
typedef unsigned int u32;
typedef unsigned long long int u64;#endif
大家看着很定很熟悉,没错,以前玩单片机的时候,出现的像什么u32,u64都是一开始定义好的数据类型,放在了头文件里,细心的朋友一定有印象。
这里再说个基础知识:
头文件里为什么要像下面表达呢?
#ifndef __CC_H
#define __CC_H#endif
这就牵涉到头文件的引用的问题了。
#ifndef __CC_H意思是"if not define __CC_H"
#define __CC_H 就引入__CC_H
#endif 否则不需要引入
主要作用是:防止该头文件被重复引用。
这里的重复引用指的不是说不同的两个文件引用了同一个头文件,而是同一个文件多次引用了一个头文件。
什么会这样?
因为头函数之间的嵌套,比如说a.c里面引用了b.h,b.h里引用了c.h,这个时候就不能再用a.c引用c.h了。
如果重复引用了会有什么后果?
- 增加编译量,编译效率低;
- 变量的重复定义
但也不是所有的头文件都要用这个格式,但这是一个良好的习惯,应该保持。
2)main.c
#include "fsl_common.h"#include "fsl_iomuxc.h"#include "MCIMX6Y2.h"/** @description : 使能I.MX6U所有外设时钟* @param : 无* @return : 无*/void clk_enable(void){CCM->CCGR0 = 0XFFFFFFFF;CCM->CCGR1 = 0XFFFFFFFF;CCM->CCGR2 = 0XFFFFFFFF;CCM->CCGR3 = 0XFFFFFFFF;CCM->CCGR4 = 0XFFFFFFFF;CCM->CCGR5 = 0XFFFFFFFF;CCM->CCGR6 = 0XFFFFFFFF;
}/** @description : 初始化LED对应的GPIO* @param : 无* @return : 无*/void led_init(void){/* 1、初始化IO复用 */IOMUXC_SetPinMux(IOMUXC_GPIO1_IO03_GPIO1_IO03,0); /* 复用为GPIO1_IO0 *//* 2、、配置GPIO1_IO03的IO属性 *bit 16:0 HYS关闭*bit [15:14]: 00 默认下拉*bit [13]: 0 kepper功能*bit [12]: 1 pull/keeper使能*bit [11]: 0 关闭开路输出*bit [7:6]: 10 速度100Mhz*bit [5:3]: 110 R0/6驱动能力*bit [0]: 0 低转换率*/IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO03_GPIO1_IO03,0X10B0);/* 3、初始化GPIO,设置GPIO1_IO03设置为输出 */GPIO1->GDIR |= (1 << 3); /* 4、设置GPIO1_IO03输出低电平,打开LED0 */GPIO1->DR &= ~(1 << 3);
}/** @description : 打开LED灯* @param : 无* @return : 无*/void led_on(void){/* 将GPIO1_DR的bit3清零 */GPIO1->DR &= ~(1<<3);
}/** @description : 关闭LED灯* @param : 无* @return : 无*/void led_off(void){/* 将GPIO1_DR的bit3置1 */GPIO1->DR |= (1<<3);
}/** @description : 短时间延时函数* @param - n : 要延时循环次数(空操作循环次数,模式延时)* @return : 无*/void delay_short(volatile unsigned int n)
{while(n--){}
}/** @description : 延时函数,在396Mhz的主频下* 延时时间大约为1ms* @param - n : 要延时的ms数* @return : 无*/void delay(volatile unsigned int n)
{while(n--){delay_short(0x7ff);}
}/** @description : mian函数* @param : 无* @return : 无*/int main(void)
{clk_enable(); /* 使能所有的时钟 */led_init(); /* 初始化led */while(1) /* 死循环 */{ led_off(); /* 关闭LED */delay(500); /* 延时500ms */led_on(); /* 打开LED */delay(500); /* 延时500ms */}return 0;
}
这段程与前面那个推文相似,只不过有些许变化。比如使用了下面这种方式:
CCM->CCGR0 = 0XFFFFFFFF;GPIO1->GDIR |= (1 << 3);
这个->符号就是结构体中常见的结构体指针运算符,是用来访问结构体内部成员的。
3)makefile文件
CROSS_COMPILE ?= arm-linux-gnueabihf-NAME ?= ledcCC := $(CROSS_COMPILE)gccLD := $(CROSS_COMPILE)ldOBJCOPY := $(CROSS_COMPILE)objcopyOBJDUMP := $(CROSS_COMPILE)objdumpOBJS := start.o main.o$(NAME).bin:$(OBJS)$(LD) -Timx6ul.lds -o $(NAME).elf $^$(OBJCOPY) -O binary -S $(NAME).elf $@$(OBJDUMP) -D -m arm $(NAME).elf > $(NAME).dis
%.o:%.s$(CC) -Wall -nostdlib -c -O2 -o $@ $<
%.o:%.S$(CC) -Wall -nostdlib -c -O2 -o $@ $<%.o:%.c$(CC) -Wall -nostdlib -c -O2 -o $@ $<
clean:rm -rf *.o $(NAME).bin $(NAME).elf $(NAME).dis
注意一下变量的使用就行。
下面这三个头文件,就是来自于SDK的移植。
- fsl_common.h
- fsl_iomuxc.h
- MCIMX6Y2.h
当然移植之前是要进行简单的剪裁的,因为代码过长,大多是重复性的,这里就不附了。
如何利用官方SDK文件来辅助开发?相关推荐
- springboot利用官方SDK(wechatpay-apache-httpclient)接入微信支付V3
利用微信官方提供的SDK wechatpay-apache-httpclient 实现.以微信小程序支付为例,其他支付也是一样的,就是参数和接口地址不同. 微信支付V3文档 首先要在微信商户平台设置好 ...
- PHP微信支付V3利用官方SDK从申请到代码完成保姆级教程
申请流程及配置 申请以及配置流程参考官方:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_6_1.shtml 根据官方的指导,我们 ...
- 嵌入式学习:裸机开发_L4_官方SDK开发LED实验
裸机开发_L4_官方SDK开发LED实验 1. 硬件层电路 1.1 正点原子 i.MX6ULL ALPHA V2.2 开发板 1.2 飞凌i.MX6UL-C开发板 2. 软件编写 2.1. 正点原子 ...
- iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件)
layout: post #iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件) title: iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件) #时间配置 d ...
- Hi3531DV100开发环境的搭建(含交叉编译器的安装及官方SDK安装)
(一)交叉编译环境的安装(hisiv500) 海思3531d采用arm-hisiv500-linux作为交叉编译工具,首先将arm-hisiv500-linux.tgz拷贝到共享目录,然后通过cp命令 ...
- BSN-DDC 基础网络关键知识点(五)跨链机制、官方 SDK 说明、开发资料汇总
id:BSN_2021 公众号:BSN研习社 2022年1月25日,区块链服务网络发展联盟(简称"BSN联盟")上线推出了"BSN-DDC基础网络"并进入试商用 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明
这里所说的高级接口是指面向通过认证的服务号开通的高级功能. 高级功能大致可以分类为: 用户接口 分组接口 客服接口(有别于之前介绍的多客服) 群发接口 多媒体接口 二维码接口 模板消息接口(不是所有账 ...
- 谷歌的android下拉刷新页面,Android SwipeRefreshLayout:谷歌官方SDK包中的下拉刷新
<Android SwipeRefreshLayout:谷歌官方SDK包中的下拉刷新> 下拉刷新在如今移动开发中应用如此广泛和普遍,以至于谷歌干脆在SDK中给予支持.在android ...
- 微软推出VS Code新特性,为TypeScript和JavaScript用户提供AI辅助开发功能
除了开发人员非常喜欢的IntelliSense和代码完成之外,今年早些时候,微软还发布了IntelliCode,提供了一组AI辅助开发功能.VS Code团队现在宣布了一项新的实验性扩展,将Intel ...
- 修改串口设备名ttymxc1_ESP8266接入阿里云——基于官方SDK接入阿里云串口获取云下发数据...
作者:电子快递哥 日期:于2020年3月18日 有态度,有温度,欢迎关注电子快递哥,转载请注明出处, ESP8266接入阿里云 --之一基于官方SDK接入阿里云串口获取云下发数据 一.获取阿里云IoT ...
最新文章
- Educational Codeforces Round 54
- 【 FPGA 】FIR 滤波器之多相插值器(Polyphase Interpolator)
- 附加没有日志文件的数据库方法
- python详细教程-python入门(非常详细的教程)
- docker多主机网络方案
- php swiper 下拉刷新,SwipeRefreshLayout的使用(下拉刷新)
- Redis之intset(整数集合)
- perl 远程 mysql_写的一个perl脚本,用于发送远程MySQL命令
- 机器学习从理论到工程的第二步-开发环境与工具篇(下)
- C/C++程序从源代码到可执行程序的流程
- 知道路程时间求加速度_凸轮分割器的出力轴加速度是怎么算的
- flink java旁路输出(Side Output),对原始流进行分流、复制
- Okhttp之CallServerInterceptor简单分析
- php引物,做PCR,如何选取引物?请大家指导
- 相位误差对SAR图像的影响
- 博后招募 | 浙江大学陈华钧教授招聘知识图谱等方向博后及算法工程师
- Windows家庭版如何打开本地组策略编辑器
- redis+lua脚本
- redis五种类型的经典使用场景
- 找不到 Microsoft Excel Driver ODBC 驱动程序的安装例程 解决方案