如何利用官方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了。

如果重复引用了会有什么后果?

  1. 增加编译量,编译效率低;
  2. 变量的重复定义

但也不是所有的头文件都要用这个格式,但这是一个良好的习惯,应该保持。

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的移植。

  1. fsl_common.h
  2. fsl_iomuxc.h
  3. MCIMX6Y2.h

当然移植之前是要进行简单的剪裁的,因为代码过长,大多是重复性的,这里就不附了。

如何利用官方SDK文件来辅助开发?相关推荐

  1. springboot利用官方SDK(wechatpay-apache-httpclient)接入微信支付V3

    利用微信官方提供的SDK wechatpay-apache-httpclient 实现.以微信小程序支付为例,其他支付也是一样的,就是参数和接口地址不同. 微信支付V3文档 首先要在微信商户平台设置好 ...

  2. PHP微信支付V3利用官方SDK从申请到代码完成保姆级教程

    申请流程及配置 申请以及配置流程参考官方:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_6_1.shtml 根据官方的指导,我们 ...

  3. 嵌入式学习:裸机开发_L4_官方SDK开发LED实验

    裸机开发_L4_官方SDK开发LED实验 1. 硬件层电路 1.1 正点原子 i.MX6ULL ALPHA V2.2 开发板 1.2 飞凌i.MX6UL-C开发板 2. 软件编写 2.1. 正点原子 ...

  4. iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件)

    layout: post #iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件) title: iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件) #时间配置 d ...

  5. Hi3531DV100开发环境的搭建(含交叉编译器的安装及官方SDK安装)

    (一)交叉编译环境的安装(hisiv500) 海思3531d采用arm-hisiv500-linux作为交叉编译工具,首先将arm-hisiv500-linux.tgz拷贝到共享目录,然后通过cp命令 ...

  6. BSN-DDC 基础网络关键知识点(五)跨链机制、官方 SDK 说明、开发资料汇总

    id:BSN_2021 公众号:BSN研习社 2022年1月25日,区块链服务网络发展联盟(简称"BSN联盟")上线推出了"BSN-DDC基础网络"并进入试商用 ...

  7. Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明

    这里所说的高级接口是指面向通过认证的服务号开通的高级功能. 高级功能大致可以分类为: 用户接口 分组接口 客服接口(有别于之前介绍的多客服) 群发接口 多媒体接口 二维码接口 模板消息接口(不是所有账 ...

  8. 谷歌的android下拉刷新页面,Android SwipeRefreshLayout:谷歌官方SDK包中的下拉刷新

     <Android SwipeRefreshLayout:谷歌官方SDK包中的下拉刷新> 下拉刷新在如今移动开发中应用如此广泛和普遍,以至于谷歌干脆在SDK中给予支持.在android ...

  9. 微软推出VS Code新特性,为TypeScript和JavaScript用户提供AI辅助开发功能

    除了开发人员非常喜欢的IntelliSense和代码完成之外,今年早些时候,微软还发布了IntelliCode,提供了一组AI辅助开发功能.VS Code团队现在宣布了一项新的实验性扩展,将Intel ...

  10. 修改串口设备名ttymxc1_ESP8266接入阿里云——基于官方SDK接入阿里云串口获取云下发数据...

    作者:电子快递哥 日期:于2020年3月18日 有态度,有温度,欢迎关注电子快递哥,转载请注明出处, ESP8266接入阿里云 --之一基于官方SDK接入阿里云串口获取云下发数据 一.获取阿里云IoT ...

最新文章

  1. Educational Codeforces Round 54
  2. 【 FPGA 】FIR 滤波器之多相插值器(Polyphase Interpolator)
  3. 附加没有日志文件的数据库方法
  4. python详细教程-python入门(非常详细的教程)
  5. docker多主机网络方案
  6. php swiper 下拉刷新,SwipeRefreshLayout的使用(下拉刷新)
  7. Redis之intset(整数集合)
  8. perl 远程 mysql_写的一个perl脚本,用于发送远程MySQL命令
  9. 机器学习从理论到工程的第二步-开发环境与工具篇(下)
  10. C/C++程序从源代码到可执行程序的流程
  11. 知道路程时间求加速度_凸轮分割器的出力轴加速度是怎么算的
  12. flink java旁路输出(Side Output),对原始流进行分流、复制
  13. Okhttp之CallServerInterceptor简单分析
  14. php引物,做PCR,如何选取引物?请大家指导
  15. 相位误差对SAR图像的影响
  16. 博后招募 | 浙江大学陈华钧教授招聘知识图谱等方向博后及算法工程师
  17. Windows家庭版如何打开本地组策略编辑器
  18. redis+lua脚本
  19. redis五种类型的经典使用场景
  20. 找不到 Microsoft Excel Driver ODBC 驱动程序的安装例程 解决方案

热门文章

  1. matlab随机函数
  2. 平均增长率不用计算机,【程阳解答】如何用计算器或Excel计算年均增长率?
  3. matlab中count()怎么用,count(1)这里面的1是什么意思
  4. 计算机操作系统软件序列号,怎么找我电脑操作系统的序列号?
  5. 数据分析面试【统计学】-----假设检验知识点归纳
  6. Apache Doris ODBC mysql外表注意事项
  7. QQ美女找茬辅助器制作
  8. php中开通短信验证码,php利用云片网实现短信验证码功能的示例代码
  9. 苹果app开发流程详解
  10. 这样做,你的面试成功率将达到 90%