ESP8266_NONOS_SDK3.0.6自己创建文件及头文件问题

1、开发环境:

Windows 10 专业版,AiThinkerIDE_V1.5.2,ESP8266_NONOS_SDK_master,从串口打印信息获知是SDK3.0.6版本,最近(2022.10份)从github上获得。AiThinkerIDE_V1.5.2中导入ESP8266_NONOS_SDK_master,右键—>Properties
在这里插入图片描述
修改build command 为make COMPILE=gcc BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=4
在这里插入图片描述

2、在创建driver中创建一个delay.c文件,在include/driver中创建delay.h文件

/*
 * delay.c
 *
 *  Created on: 2022年10月13日
 *      Author: Administrator
 */
#include "driver/delay.h"

void DelayUs(uint16 us)
{
	uint16 i,j,k;
	for(i=us;i>0;i--)
	{
		for(j=26;j>0;j--)
		{
			k++;
		}
	}
}

void DelayMs(uint16 ms)
{
	uint16 i,j;
	for(i=ms;i>0;i--)
	{
		for(j=1000;j>0;j--)
		{
			DelayUs(1);
		}
	}
}

void os_DelayMs(uint32 ms)
{
	uint32 i,j;
	for(i=ms;i>0;i--)
	{
		for(j=1000;j>0;j--)
		{
			os_delay_us(1);
		}
	}
}

在这里插入图片描述

/*
 * delay.h
 *
 *  Created on: 2022年10月13日
 *      Author: Administrator
 */
#ifndef DRIVER_LIB_INCLUDE_DELAY_H_
#define DRIVER_LIB_INCLUDE_DELAY_H_
#include "ets_sys.h"
#include "osapi.h"

void DelayUs(uint16 );
void DelayMs(uint16 );
void os_DelayMs(uint32 );

#endif /* DRIVER_LIB_INCLUDE_DELAY_H_ */

在这里插入图片描述

3、user_main.c 中添加如下内容,编译后出现 undefined reference to `os_DelayMs’错误

/******************************************************************************
 * FunctionName : user_init
 * Description  : entry of user application, init user function here
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_init(void)
{
    partition_item_t partition_item;
    os_printf("SDK version:%s\n", system_get_sdk_version());
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U,FUNC_GPIO2);
    GPIO_OUTPUT_SET(GPIO_ID_PIN(2),1);
    while(1)
    {
    	system_soft_wdt_feed();
    	 GPIO_OUTPUT_SET(GPIO_ID_PIN(2),1);
    	 os_printf("led_on\n");
    	 os_DelayMs(500);
    	 GPIO_OUTPUT_SET(GPIO_ID_PIN(2),0);
    	 os_DelayMs(500);
    	 os_printf("led_off\n");
    }
}

在这里插入图片描述
在文件的上面,明明添加了#include “driver/delay.h”,为什么会出现undefined reference to 这个错误呢?这个问题是因为项目Makefile文件没有添加driver与include路径造成的。打开makefile文件,找到: SUBDIRS= \ 与COMPONENTS_eagle.app.v6 = \

SUBDIRS=    \
    user    \
    driver

endif # } PDIR

APPDIR = .
LDDIR = ../ld

CCFLAGS += -Os

TARGET_LDFLAGS =        \
    -nostdlib        \
    -Wl,-EL \
    --longcalls \
    --text-section-literals

ifeq ($(FLAVOR),debug)
    TARGET_LDFLAGS += -g -O2
endif

ifeq ($(FLAVOR),release)
    TARGET_LDFLAGS += -g -O0
endif

COMPONENTS_eagle.app.v6 = \
    user/libuser.a \
    driver/libdriver.a

添加如下内容: driver,driver/libdriver.a,不要忘了前面的斜杠“\”,点击保存,然后再clean Project与Build Project,编译成功,好像这个叫注册目录吧。
在这里插入图片描述

4、还有一个问题,自己写的delay函数,延时不靠谱,不知道为什么

在delay.c中,自己编写了两个延时函数,一个延时us,一个延时ms,根据esp8266的晶体频率,应该没有问题,但是,不管写多大的参数,几乎就不能延时。以下函数,延时没有效果。

void DelayUs(uint16 us)
{
	uint16 i,j,k;
	for(i=us;i>0;i--)
	{
		for(j=26;j>0;j--)
		{
			k++;
		}
	}
}

void DelayMs(uint16 ms)
{
	uint16 i,j;
	for(i=ms;i>0;i--)
	{
		for(j=1000;j>0;j--)
		{
			DelayUs(1);
		}
	}
}

只能用系统自带的延时函数os_delay_us(),以及用这个函数构建的ms延时函数

void os_DelayMs(uint32 ms)
{
	uint32 i,j;
	for(i=ms;i>0;i--)
	{
		for(j=1000;j>0;j--)
		{
			os_delay_us(1);
		}
	}
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sdd934

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值