J'ai une idée: écrire un firmware alternatif pour certains appareils ZigBee Xiaomi. Mais il y a un problème: je n'ai jamais travaillé avec les microcontrôleurs NXP JN5169 qui sont utilisés dans les appareils Xiaomi. NXP fournit un IDE, plusieurs milliers de pages de documentation, une carte de développement de 650 $ et plusieurs mégaoctets d'exemple de code alambiqué. Mais il n'y avait pas de didacticiel pas à pas clair sur Internet.
Dans cet article, nous allons combler le vide pédagogique et essayer d'écrire un petit Hello World pour le microcontrôleur NXP JN5169. Aller.
Motivation
Comme je l'ai dit, NXP fournit une plate-forme de développement prête à l'emploi pour ses appareils:
BeyondStudio IDE basé sur Eclipse, qui comprend plusieurs plugins JN5169 pour vous aider à développer des appareils ZigBee
SDK , ZigBee
, , API Reference, Application Notes
, . , SDK - BeyondStudio make, , , . , , . , , - .
. ZigBee , . , 2 , . Makefile’. MAC , , . , ( , JN-AN-1219-Zigbee-3-0-Controller-and-Switch)
, , . - . , , . - , . , , JN5169.
$650 , - . EBYTE E75-2G4M10S ( ). .
. GPIO . UART. SPI_MISO , 2 .
, .
Toolchain file
CMake. , . , , .
, BeyondStudio ( ). gcc .
SET(CMAKE_SYSTEM_NAME Generic)
IF(NOT TOOLCHAIN_PREFIX)
MESSAGE(STATUS "No TOOLCHAIN_PREFIX specified")
ENDIF()
IF (WIN32)
SET(TOOL_EXECUTABLE_SUFFIX ".exe")
ELSE()
SET(TOOL_EXECUTABLE_SUFFIX "")
ENDIF()
SET(TARGET_PREFIX "ba-elf")
SET(TOOLCHAIN_BIN_DIR ${TOOLCHAIN_PREFIX}/bin)
SET(TOOLCHAIN_INC_DIR ${TOOLCHAIN_PREFIX}/include)
SET(TOOLCHAIN_LIB_DIR ${TOOLCHAIN_PREFIX}/lib)
SET(CMAKE_C_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_PREFIX}-gcc${TOOL_EXECUTABLE_SUFFIX})
SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_PREFIX}-g++${TOOL_EXECUTABLE_SUFFIX})
SET(CMAKE_OBJCOPY ${TOOLCHAIN_BIN_DIR}/${TARGET_PREFIX}-objcopy${TOOL_EXECUTABLE_SUFFIX} CACHE INTERNAL "objcopy tool")
SET(CMAKE_OBJDUMP ${TOOLCHAIN_BIN_DIR}/${TARGET_PREFIX}-objdump${TOOL_EXECUTABLE_SUFFIX} CACHE INTERNAL "objdump tool")
SET(CMAKE_SIZE ${TOOLCHAIN_BIN_DIR}/${TARGET_PREFIX}-size${TOOL_EXECUTABLE_SUFFIX} CACHE INTERNAL "size tool")
SET(CMAKE_DEBUGER ${TOOLCHAIN_BIN_DIR}/${TARGET_PREFIX}-gdb${TOOL_EXECUTABLE_SUFFIX} CACHE INTERNAL "debuger")
SET(CMAKE_CPPFILT ${TOOLCHAIN_BIN_DIR}/${TARGET_PREFIX}-c++filt${TOOL_EXECUTABLE_SUFFIX} CACHE INTERNAL "C++filt")
SET(CMAKE_C_FLAGS_DEBUG "-Og -g" CACHE INTERNAL "c compiler flags debug")
SET(CMAKE_CXX_FLAGS_DEBUG "-Og -g" CACHE INTERNAL "cxx compiler flags debug")
SET(CMAKE_ASM_FLAGS_DEBUG "-g" CACHE INTERNAL "asm compiler flags debug")
SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "" CACHE INTERNAL "linker flags debug")
SET(CMAKE_C_FLAGS_RELEASE "-Os -g" CACHE INTERNAL "c compiler flags release")
SET(CMAKE_CXX_FLAGS_RELEASE "-Os -g" CACHE INTERNAL "cxx compiler flags release")
SET(CMAKE_ASM_FLAGS_RELEASE "-g" CACHE INTERNAL "asm compiler flags release")
SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "" CACHE INTERNAL "linker flags release")
SET(CMAKE_C_FLAGS "" CACHE INTERNAL "c compiler flags")
SET(CMAKE_CXX_FLAGS "" CACHE INTERNAL "cxx compiler flags")
SET(CMAKE_ASM_FLAGS "" CACHE INTERNAL "asm compiler flags")
SET(CMAKE_EXE_LINKER_FLAGS "" CACHE INTERNAL "executable linker flags")
SET(CMAKE_MODULE_LINKER_FLAGS "" CACHE INTERNAL "module linker flags")
SET(CMAKE_SHARED_LINKER_FLAGS "" CACHE INTERNAL "shared linker flags")
SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_PREFIX} ${EXTRA_FIND_PATH})
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
, . TOOLCHAIN_PREFIX ( C:/NXP/bstudio_nxp/sdk/Tools/ba-elf-ba2-r36379 - ), - , objdump, objcopy, GNU . ( - ).
SET(CMAKE_BUILD_TYPE Release)
SET(CMAKE_TOOLCHAIN_FILE JN5169.cmake)
PROJECT(GPSLogger)
CMAKE_MINIMUM_REQUIRED(VERSION 3.8)
ENABLE_LANGUAGE(CXX)
ADD_EXECUTABLE(Test Test.c)
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
return EXIT_SUCCESS;
}
,
D:\Projects\NXP\HelloJN5169World\build>cmake -G "MinGW Makefiles" -DTOOLCHAIN_PREFIX=C:/NXP/bstudio_nxp/sdk/Tools/ba-elf-ba2-r36379 ..
-- ======================
-- Toolchain paths
-- TOOLCHAIN_BIN_DIR = C:/NXP/bstudio_nxp/sdk/Tools/ba-elf-ba2-r36379/bin
-- TOOLCHAIN_INC_DIR = C:/NXP/bstudio_nxp/sdk/Tools/ba-elf-ba2-r36379/include
-- TOOLCHAIN_LIB_DIR = C:/NXP/bstudio_nxp/sdk/Tools/ba-elf-ba2-r36379/lib
-- CMAKE_C_COMPILER = C:/NXP/bstudio_nxp/sdk/Tools/ba-elf-ba2-r36379/bin/ba-elf-gcc.exe
-- CMAKE_CXX_COMPILER = C:/NXP/bstudio_nxp/sdk/Tools/ba-elf-ba2-r36379/bin/ba-elf-g++.exe
-- CMAKE_OBJCOPY = C:/NXP/bstudio_nxp/sdk/Tools/ba-elf-ba2-r36379/bin/ba-elf-objcopy.exe
-- CMAKE_OBJDUMP = C:/NXP/bstudio_nxp/sdk/Tools/ba-elf-ba2-r36379/bin/ba-elf-objdump.exe
-- CMAKE_SIZE = C:/NXP/bstudio_nxp/sdk/Tools/ba-elf-ba2-r36379/bin/ba-elf-size.exe
-- CMAKE_DEBUGER = C:/NXP/bstudio_nxp/sdk/Tools/ba-elf-ba2-r36379/bin/ba-elf-gdb.exe
-- CMAKE_CPPFILT = C:/NXP/bstudio_nxp/sdk/Tools/ba-elf-ba2-r36379/bin/ba-elf-c++filt.exe
-- ======================
-- Compiler flags
-- CMAKE_C_FLAGS =
-- CMAKE_CXX_FLAGS =
-- CMAKE_ASM_FLAGS =
-- CMAKE_EXE_LINKER_FLAGS =
-- CMAKE_MODULE_LINKER_FLAGS =
-- CMAKE_SHARED_LINKER_FLAGS =
-- CMAKE_C_FLAGS_DEBUG = -Og -g
-- CMAKE_CXX_FLAGS_DEBUG = -Og -g
-- CMAKE_ASM_FLAGS_DEBUG = -g
-- CMAKE_EXE_LINKER_FLAGS_DEBUG =
-- CMAKE_C_FLAGS_RELEASE = -Os -g
-- CMAKE_CXX_FLAGS_RELEASE = -Os -g
-- CMAKE_ASM_FLAGS_RELEASE = -g
-- CMAKE_EXE_LINKER_FLAGS_RELEASE =
-- Configuring done
-- Generating done
-- Build files have been written to: D:/Projects/NXP/HelloJN5169World/build
D:\Projects\NXP\HelloJN5169World\build>mingw32-make
[ 50%] Building C object CMakeFiles/Test.dir/Test.c.obj
[100%] Linking C executable Test
[100%] Built target Test
Hello World . №1
. .
GPIO ( ) SDK. NXP 416- , API (JN-UG-3087 JN516x Integrated Peripherals API User Guide).
. , DIO17.
#include <stdio.h>
#include <stdlib.h>
#include "AppHardwareApi.h"
#define BOARD_LED_BIT (17)
#define BOARD_LED_PIN (1UL << BOARD_LED_BIT)
#define BOARD_LED_CTRL_MASK (BOARD_LED_PIN)
int main(void)
{
// Initialize hardware
vAHI_DioSetDirection(0, BOARD_LED_CTRL_MASK);
vAHI_DioSetOutput(0, BOARD_LED_PIN);
return EXIT_SUCCESS;
}
API ,
IF(NOT SDK_PREFIX)
MESSAGE(FATAL_ERROR "No SDK_PREFIX specified")
ENDIF()
INCLUDE_DIRECTORIES(
${SDK_PREFIX}/Components/Common/Include
${SDK_PREFIX}/Components/HardwareAPI/Include
)
LINK_DIRECTORIES(
${SDK_PREFIX}/Components/Library
)
ADD_DEFINITIONS(
-DJENNIC_CHIP_NAME=_JN5169
-DJENNIC_CHIP_FAMILY_NAME=_JN516x
)
ADD_EXECUTABLE(HelloWorld HelloWorld.cpp)
TARGET_LINK_LIBRARIES(HelloWorld
HardwareApi_JN5169
)
, , Cmake - SDK_PREFIX, SDK.
elf , ,
FUNCTION(STM32_ADD_HEX_BIN_TARGETS TARGET)
IF(EXECUTABLE_OUTPUT_PATH)
SET(FILENAME "${EXECUTABLE_OUTPUT_PATH}/${TARGET}")
ELSE()
SET(FILENAME "${TARGET}")
ENDIF()
ADD_CUSTOM_TARGET(${TARGET}.hex DEPENDS ${TARGET} COMMAND ${CMAKE_OBJCOPY} -Oihex ${FILENAME} ${FILENAME}.hex)
ADD_CUSTOM_TARGET(${TARGET}.bin DEPENDS ${TARGET} COMMAND ${CMAKE_OBJCOPY} -Obinary ${FILENAME} ${FILENAME}.bin)
ENDFUNCTION()
. . , BeyondStudio. ( BOOT, RESET), Devices->Program Device. , -
Hello World . №2
BeyondStudio . . , .
BeyondStudio ( )
Compiling /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/BDB/Source/FindAndBind/bdb_fb_initiator.c ...
/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/Tools/ba-elf-ba2-r36379/bin/ba-elf-gcc -c -o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/bdb_fb_initiator.o -DCONFIG_MANUFACTURER_CODE=0x1037 -DCONFIG_APP_SW_VERSION=7 -DCONFIG_HW_VERSION=1 -DCONFIG_MANUFACTURER_NAME=\"NXP\" -DCONFIG_MODEL_ID=\"DIMMER_SW\" -DCONFIG_DATE_CODE=\"10-31-2014\" -DSINGLE_CHANNEL=0 -DKEEP_ALIVETIME=1 -DSLEEP_ENABLE -DDEEP_SLEEP_ENABLE -DDR1199 -DDimmerSwitch -DBUTTON_MAP_DR1199 -DSLEEPY_ZED -DEZ_MODE_INITIATOR -DEZ_ENABLE_GROUP -DDBG_ENABLE -DDEBUG_APP_BUTTON -DDEBUG_APP -DDEBUG_START_UP -DDEBUG_SWITCH_STATE -DDEBUG_SWITCH_TASK -DDEBUG_SWITCH_NODE -DDimmerSwitch -DPDM_USER_SUPPLIED_ID -DJN516x=5160 -DJN5169=5169 -DJENNIC_CHIP_NAME=_JN5169 -DJENNIC_CHIP_FAMILY_NAME=_JN516x -march=ba2 -mcpu=jn51xx -mredzone-size=4 -mbranch-cost=3 -fomit-frame-pointer -Os -fshort-enums -Wall -Wpacked -Wcast-align -fdata-sections -ffunction-sections -DWATCHDOG_ENABLED -DJENNIC_HW_BBC_RXINCCA=1 -DJENNIC_HW_BBC_DMA=1 -DJENNIC_HW_BBC_ISA=0 -DJENNIC_SW_EXTERNAL_FLASH=0 -DJN516X_DMA_UART_BACKWARDS_COMPATIBLE_API=1 -DUART_BACKWARDS_COMPATIBLE_API=1 -DRXPOWERADJUST_SUPPORT -DJENNIC_CHIP=JN5169 -DJENNIC_CHIP_JN5169 -DJENNIC_CHIP_FAMILY=JN516x -DJENNIC_CHIP_FAMILY_JN516x -DJENNIC_STACK_ZCL -DJENNIC_MAC_MiniMacShim -Wall -Wunreachable-code -DEMBEDDED -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Platform/Common/Include -DJENNIC_PCB=DEVKIT4 -DJENNIC_PCB_DEVKIT4 -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Platform/DK4/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/Common/Include -DPDM_USER_SUPPLIED_ID -DPDM_NO_RTOS -DPDM_EEPROM -DDBG_ENABLE -DZPS_APL_OPT_SINGLE_INSTANCE -DOTA_NO_CERTIFICATE -DPLME_SAP -DZBPRO_DEVICE_TYPE_ZED -DBDB_SUPPORT_NWK_STEERING -DBDB_SUPPORT_FIND_AND_BIND_INITIATOR -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/Common_Switch/Source -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/Common_Switch/Source/.. -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Source -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/Common/Source -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZigbeeCommon/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCIF/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/Xcv/Include/ -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/Recal/Include/ -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/MicroSpecific/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/HardwareAPI/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/AppApi/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/MAC/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/MiniMac/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/MMAC/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/HardwareAPI/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/Aes/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/DBG/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/Mac/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/MicroSpecific/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/MiniMAC/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/MMAC/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/TimerServer/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/Random/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZigbeeCommon/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZPSMAC_Mini_SOC/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/PWRM/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZPSTSV/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/AES_SW/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/PDUM/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZPSAPL/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/Random/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/PDM_EEPROM_NO_RTOS/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/DBG/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZPSNWK_ZED/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/PDM/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZPSMAC/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZPSNWK/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZigbeeCommon/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCIF/Source -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCIF/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Clusters/General/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Clusters/General/Source -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Clusters/MeasurementAndSensing/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Clusters/Lighting/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Clusters/HVAC/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Clusters/Closures/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Clusters/SecurityAndSafety/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Clusters/SmartEnergy/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Clusters/OTA/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Clusters/Commissioning/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Clusters/ApplianceManagement/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Clusters/GreenPower/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Clusters/Private/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Devices/ZHA/Generic/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/ZCL/Devices/ZLO/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/BDB/Include -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/BDB/Source/Common -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/BDB/Source/NwkSteering -I/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/BDB/Source/FindAndBind /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/BDB/Source/FindAndBind/bdb_fb_initiator.c -MD -MF /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/bdb_fb_initiator.d -MP
Linking /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/DimmerSwitch_JN5169_DR1199.elf ...
/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/Tools/ba-elf-ba2-r36379/bin/ba-elf-gcc -Wl,--gc-sections -Wl,-u_AppColdStart -Wl,-u_AppWarmStart -march=ba2 -mcpu=jn51xx -mredzone-size=4 -mbranch-cost=3 -fomit-frame-pointer -Os -fshort-enums -nostartfiles -L/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Chip/JN5169/Build -L/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Chip/JN5169/Library -L/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Platform/DK4/Library -L/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Components/Library -Wl,--gc-sections -L/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Stack/ZBPro/Build -Wl,--defsym=__stack_size=5000 -Wl,--defsym,__minimum_heap_size=2000 -TAppBuildZBPro.ld -L /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/JN-SW-4170/Stack/ZCL/Build/ -o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/DimmerSwitch_JN5169_DR1199.elf -Wl,--start-group /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/irq_JN516x.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/portasm_JN516x.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/port_JN516x.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/pdum_gen.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/pdum_apdu.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zps_gen.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/app_pdm.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/app_main.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/app_start_switch.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/App_DimmerSwitch.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/app_zlo_switch_node.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/app_zcl_switch_task.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/app_buttons.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/app_switch_state_machine.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/app_pdm_convert.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/ZQueue.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/ZTimer.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/app_zps_link_keys.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/Alarms.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/AlarmsClientCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/AlarmsCommandHandler.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/AlarmsServerCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/AlarmsTableManager.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/AnalogInputBasic.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/AnalogOutputBasic.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/Basic.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/BasicClientCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/BasicCommandHandler.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/BinaryInputBasic.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/BinaryOutputBasic.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/DeviceTemperatureConfiguration.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/Diagnostics.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/Groups.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/GroupsClientCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/GroupsCommandHandler.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/GroupsServerCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/GroupsTableManager.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/Identify.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/IdentifyClientCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/IdentifyCommandHandler.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/IdentifyServerCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/LevelControl.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/LevelControlClientCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/LevelControlCommandHandler.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/MultistateInputBasic.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/MultistateOutputBasic.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/OOSC.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/OnOff.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/OnOffCommandHandler.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/OnOffCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/PollControl.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/PollControlClientCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/PollControlCommandHandler.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/PollControlServerCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/PowerConfiguration.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/PowerProfile.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/PowerProfileClientCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/PowerProfileCommandHandler.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/PowerProfileServerCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/Scenes.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/ScenesClientCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/ScenesClusterManagement.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/ScenesCommandHandler.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/ScenesServerCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/ScenesTableManager.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/TC.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/Time.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/base_device.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/mains_power_outlet.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/on_off_output.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/plug_control.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/remote_control.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/simple_sensor.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/BallastConfiguration.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/ColourControl.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/ColourControlClientCommands.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/ColourControlCommandHandler.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/ColourControlConversions.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/colour_controller.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/colour_dimmable_light.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/colour_dimmer_switch.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/colour_scene_controller.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/colour_temperature_light.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/commission_endpoint.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/control_bridge.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/dimmable_ballast.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/dimmable_light.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/dimmable_plug.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/dimmer_switch.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/extended_colour_light.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/light_level_sensor.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/light_sensor.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/non_colour_controller.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/non_colour_scene_controller.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/occupancy_sensor.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/on_off_ballast.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/on_off_light.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/on_off_light_switch.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/on_off_plug.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/on_off_sensor.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/privateCluster.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/dlist.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_CustomCommandReceive.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_CustomCommandSend.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_PDUbufferReadWrite.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_PDUbufferReadWriteString.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_WriteAttributesRequestHandle.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_WriteAttributesRequestSend.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_WriteAttributesResponseHandle.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_attribute.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_buffer.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_clusterCommand.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_command.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_common.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_configureReportingCommandHandle.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_configureReportingCommandSend.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_configureReportingResponseHandle.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_defaultResponse.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_discoverAttributesExtendedRequestHandle.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_discoverAttributesExtendedRequestSend.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_discoverAttributesExtendedResponseHandle.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_discoverAttributesRequestHandle.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_discoverAttributesRequestSend.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_discoverAttributesResponseHandle.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_discoverCommandsRequestHandle.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_discoverCommandsRequestSend.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_discoverCommandsResponseHandle.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_event.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_heap.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_library_options.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_readAttributesRequestHandle.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_readAttributesRequestSend.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_readAttributesResponseHandle.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_readReportingConfigurationCommandHandle.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_readReportingConfigurationCommandSend.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_readReportingConfigurationResponseHandle.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_reportManager.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_reportMaths.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_reportScheduler.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_reportStringHandling.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_reportStructure.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_search.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_timer.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/zcl_transmit.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/bdb_fr.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/bdb_start.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/bdb_state_machine.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/appZpsBeaconHandler.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/appZdpExtraction.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/bdb_ns.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/bdb_fb_common.o /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/bdb_fb_initiator.o -lZPSMAC_Mini_SOC_JN516x -lPWRM_JN516x -lZPSTSV_JN516x -lAES_SW_JN516x -lPDUM_JN516x -lZPSAPL_JN516x -lRandom_JN516x -lPDM_EEPROM_NO_RTOS_JN516x -lDBG_JN516x -lZPSNWK_ZED_JN516x -lRecal_JN516x -lJPT_JN5169 -lMiniMac_JN5169 -lMiniMacShim_JN516x -lMMAC_JN5169 -lJPT_JN5169 -lAes_JN516x -lHardwareApi_JN5169 -lMicroSpecific_JN516x -lBoot_JN516x -lBoardLib_JN516x -lm -Wl,--end-group -Wl,-Map,/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/DimmerSwitch_JN5169_DR1199.map
/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/Tools/ba-elf-ba2-r36379/bin/ba-elf-size /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/DimmerSwitch_JN5169_DR1199.elf
text data bss dec hex filename
139470 1624 23149 164243 28193 d:/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/DimmerSwitch_JN5169_DR1199.elf
date +%c >> /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/Doc/size.txt
/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/Tools/ba-elf-ba2-r36379/bin/ba-elf-size /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/DimmerSwitch_JN5169_DR1199.elf >> /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/Doc/size.txt
Generating binary ...
/d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/sdk/Tools/ba-elf-ba2-r36379/bin/ba-elf-objcopy -j .version -j .bir -j .flashheader -j .vsr_table -j .vsr_handlers -j .rodata -j .text -j .data -j .bss -j .heap -j .stack -S -O binary /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/DimmerSwitch_JN5169_DR1199.elf /d/Projects/NXP/JN5169-for-xiaomi-wireless-switch/Application/JN-AN-1219-Zigbee-3-0-Controller-and-Switch/DimmerSwitch/Build/DimmerSwitch_JN5169_DR1199.bin
, ( ), , , , .
SET(CMAKE_C_FLAGS "-march=ba2 -mcpu=jn51xx -mredzone-size=4 -mbranch-cost=3 -fomit-frame-pointer -fshort-enums -Wall -Wpacked -Wcast-align -fdata-sections -ffunction-sections" CACHE INTERNAL "c compiler flags")
SET(CMAKE_CXX_FLAGS "-march=ba2 -mcpu=jn51xx -mredzone-size=4 -mbranch-cost=3 -fomit-frame-pointer -fshort-enums -Wall -Wpacked -Wcast-align -fdata-sections -ffunction-sections" CACHE INTERNAL "cxx compiler flags")
SET(CMAKE_ASM_FLAGS "-march=ba2 -mcpu=jn51xx -mredzone-size=4 -mbranch-cost=3 -fomit-frame-pointer -fshort-enums -Wall -Wpacked -Wcast-align -fdata-sections -ffunction-sections" CACHE INTERNAL "asm compiler flags")
SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--gc-sections -Wl,-u_AppColdStart -Wl,-u_AppWarmStart -march=ba2 -mcpu=jn51xx -mredzone-size=4 -mbranch-cost=3 -fomit-frame-pointer -Os -fshort-enums -nostartfiles -Wl,--gc-sections -Wl,--defsym=__stack_size=5000 -Wl,--defsym,__minimum_heap_size=2000 " CACHE INTERNAL "executable linker flags")
objcopy - ( , )
ADD_CUSTOM_TARGET(${TARGET}.bin DEPENDS ${TARGET} COMMAND ${CMAKE_OBJCOPY} -j .version -j .bir -j .flashheader -j .vsr_table -j .vsr_handlers -j .rodata -j .text -j .data -j .bss -j .heap -j .stack -S -O binary ${FILENAME} ${FILENAME}.bin)
. .
Hello World . №3
-TAppBuildZBPro.ld. , !
, , Hello World, . . - , . . , , , , , .
, , : , , . , , .
, -TAppBuildZBPro.ld CMAKE_EXE_LINKER_FLAGS
c:/nxp/bstudio_nxp/sdk/tools/ba-elf-ba2-r36379/bin/../lib/gcc/ba-elf/4.7.4/../../../../ba-elf/bin/ld.exe: invalid data statement
collect2.exe: error: ld returned 1 exit status
, , .
, . , . , , . , . .
. , main() - CPU, , . , _start() . NXP 2 AppColdStart AppWarmStart, libPWRM_JN516x.a ( SDK ).
pwrm_cold_start.c:(.text.AppColdStart+0xc): undefined reference to `vAppRegisterPWRMCallbacks'
pwrm_cold_start.c:(.text.AppColdStart+0xc): relocation truncated to fit: R_BA_18_PCREL against undefined symbol `vAppRegisterPWRMCallbacks'
pwrm_cold_start.c:(.text.AppColdStart+0x1b): undefined reference to `vAppMain'
pwrm_cold_start.c:(.text.AppColdStart+0x1b): relocation truncated to fit: R_BA_10_PCREL against undefined symbol `vAppMain'
JN-UG-3116 JN51xx Core Utilities User Guide. , libPWRM_JN516x.a , main() vAppMain(). .
PUBLIC void vAppMain(void)
{
int i;
// Initialize hardware
vAHI_DioSetDirection(0, BOARD_LED_CTRL_MASK);
while(1)
{
vAHI_DioSetOutput(0, BOARD_LED_PIN);
for(i=0; i<200000; i++)
vAHI_DioSetOutput(0, BOARD_LED_PIN);
vAHI_DioSetOutput(BOARD_LED_PIN, 0);
for(i=0; i<1000000; i++)
vAHI_DioSetOutput(BOARD_LED_PIN, 0);
}
}
vAppMain() . , vAHI_DioSetOutput() . for, , ( ) .
, vAHI_DioSetOutput , (, ) ( ). , ).
vAppRegisterPWRMCallbacks() - /. , .
, .
Hello Debug UART
, . , ? . UART . UART, . USB-UART .
UART0 115200 ( , - vAppMain ). DBG_vPrintf .
PUBLIC void vAppMain(void)
{
int i;
int iteration = 0;
// Initialize UART
DBG_vUartInit(DBG_E_UART_0, DBG_E_UART_BAUD_RATE_115200);
// Initialize hardware
vAHI_DioSetDirection(0, BOARD_LED_CTRL_MASK);
while(1)
{
DBG_vPrintf(TRUE, "Blink iteration %d\n", iteration++);
vAHI_DioSetOutput(0, BOARD_LED_PIN);
for(i=0; i<1000000; i++)
vAHI_DioSetOutput(0, BOARD_LED_PIN);
vAHI_DioSetOutput(BOARD_LED_PIN, 0);
for(i=0; i<1000000; i++)
vAHI_DioSetOutput(BOARD_LED_PIN, 0);
}
}
DBG_vPrintf / , . .
.... . dbg.h , DBG_ENABLE. , .
TARGET_LINK_LIBRARIES(HelloWorld
-Wl,--start-group
PWRM_JN516x
HardwareApi_JN5169
DBG_JN516x
Boot_JN516x
-Wl,--end-group
)
, . , , ( ). . DBG_JN516x UART HardwareApi_JN5169, , unresolved externals UART. -Wl,--start-group/-Wl,--end-group , , . .
, .
Hello Watchdog
, 7?
. 16 . vAHI_WatchdogRestart().
, bAHI_WatchdogResetEvent() - , - .
PUBLIC void vAppMain(void)
{
int i;
int iteration = 0;
int debugEnabled = 1;
// Initialize UART
DBG_vUartInit(DBG_E_UART_0, DBG_E_UART_BAUD_RATE_115200);
// Initialize hardware
vAHI_DioSetDirection(0, BOARD_LED_CTRL_MASK);
if (bAHI_WatchdogResetEvent())
{
DBG_vPrintf(TRUE, "APP: Watchdog timer has reset device!\n");
DBG_vDumpStack();
}
while(1)
{
DBG_vPrintf(debugEnabled, "Blink iteration %d\n", iteration++);
vAHI_DioSetOutput(0, BOARD_LED_PIN);
for(i=0; i<1000000; i++)
vAHI_DioSetOutput(0, BOARD_LED_PIN);
vAHI_DioSetOutput(BOARD_LED_PIN, 0);
for(i=0; i<1000000; i++)
vAHI_DioSetOutput(BOARD_LED_PIN, 0);
vAHI_WatchdogRestart();
}
}
Hello software timers
- , , SPI, , JN5169. . , NXP. .
ZigBee NXP, JN-UG-3113 ZigBee 3.0 Stack User Guide. .
ZTIMER_tsTimer timers[1];
uint8 blinkTimerHandle;
PUBLIC void vAppMain(void)
{
// Initialize UART
DBG_vUartInit(DBG_E_UART_0, DBG_E_UART_BAUD_RATE_115200);
// Initialize hardware
vAHI_DioSetDirection(0, BOARD_LED_CTRL_MASK);
// Init and start timers
ZTIMER_eInit(timers, sizeof(timers) / sizeof(ZTIMER_tsTimer));
ZTIMER_eOpen(&blinkTimerHandle, blinkFunc, NULL, ZTIMER_FLAG_PREVENT_SLEEP);
ZTIMER_eStart(blinkTimerHandle, ZTIMER_TIME_MSEC(1000));
while(1)
{
ZTIMER_vTask();
vAHI_WatchdogRestart();
}
}
vAppMain() , , . , timers. ZTIMER_vTask(), .
. , , .
PUBLIC void blinkFunc(void *pvParam)
{
static int iteration = 0;
DBG_vPrintf(TRUE, "Blink iteration %d\n", iteration++);
uint32 currentState = u32AHI_DioReadInput();
vAHI_DioSetOutput(currentState^BOARD_LED_PIN, currentState&BOARD_LED_PIN);
}
, , vAHI_DioSetOutput(), .
ZigBee , . CMakeLists.txt .
################################
# Common settings
ADD_DEFINITIONS(
-DJENNIC_CHIP_NAME=_JN5169
-DJENNIC_CHIP_FAMILY_NAME=_JN516x
-DJENNIC_CHIP_FAMILY_JN516x
-DJENNIC_CHIP_FAMILY=JN516x
-DJN516x=5160
-DDBG_ENABLE
-DEMBEDDED
)
################################
# Zigbee Library
SET(ZIGBEE_SRC
${SDK_PREFIX}/Components/ZigbeeCommon/Source/ZTimer.c
)
ADD_LIBRARY(ZigBee STATIC ${ZIGBEE_SRC})
TARGET_INCLUDE_DIRECTORIES(ZigBee PRIVATE
${SDK_PREFIX}/Components/PWRM/Include
)
, JN5169 - . , , .
, ... , . ( ), , tick timer’ ( JN5169). , - . .
, irq_JN516x.S, . ? , .
: , - PIC_ChannelPriorities, TARGET_INITIALISE(). , , vAppMain() . portasm_JN516x.S, TARGET_INITIALIZE() .
, vAppMain()
// Initialize the hardware
TARGET_INITIALISE();
SET_IPL(0);
portENABLE_INTERRUPTS();
, community.nxp.com irq_JN516x.S - - . . , JN5179. .
. . ? ZTIMER_vTask() , - , . , ZigBee , . .
PUBLIC void blinkFunc(void *pvParam)
{
static int iteration = 0;
DBG_vPrintf(TRUE, "Blink iteration %d\n", iteration++);
uint32 currentState = u32AHI_DioReadInput();
vAHI_DioSetOutput(currentState^BOARD_LED_PIN, currentState&BOARD_LED_PIN);
ZTIMER_eStart(blinkTimerHandle, ZTIMER_TIME_MSEC(1000));
}
Hello queues
( ) . . , , - / . .
2 - , - . vAppMain(). , pull-up , .
- . 3 .
// Initialize hardware
vAHI_DioSetDirection(BOARD_BTN_PIN, BOARD_LED_PIN);
vAHI_DioSetPullup(BOARD_BTN_PIN, 0);
// Init and start timers
ZTIMER_eInit(timers, sizeof(timers) / sizeof(ZTIMER_tsTimer));
ZTIMER_eOpen(&blinkTimerHandle, blinkFunc, NULL, ZTIMER_FLAG_PREVENT_SLEEP);
ZTIMER_eStart(blinkTimerHandle, ZTIMER_TIME_MSEC(1000));
ZTIMER_eOpen(&buttonScanTimerHandle, buttonScanFunc, NULL, ZTIMER_FLAG_PREVENT_SLEEP);
ZTIMER_eStart(buttonScanTimerHandle, ZTIMER_TIME_MSEC(10));
// Initialize queue
ZQ_vQueueCreate(&queueHandle, 3, sizeof(ButtonPressType), (uint8*)queue);
10, . ( 50) , . (>2c) , .
typedef enum
{
BUTTON_SHORT_PRESS,
BUTTON_LONG_PRESS
} ButtonPressType;
PUBLIC void buttonScanFunc(void *pvParam)
{
static int duration = 0;
uint32 input = u32AHI_DioReadInput();
bool btnState = (input & BOARD_BTN_PIN) == 0;
if(btnState)
{
duration++;
}
else
{
// detect long press
if(duration > 200)
{
DBG_vPrintf(TRUE, "Button released. Long press detected\n");
ButtonPressType value = BUTTON_LONG_PRESS;
ZQ_bQueueSend(&queueHandle, (uint8*)&value);
}
// detect short press
else if(duration > 5)
{
DBG_vPrintf(TRUE, "Button released. Short press detected\n");
ButtonPressType value = BUTTON_SHORT_PRESS;
ZQ_bQueueSend(&queueHandle, &value);
}
duration = 0;
}
ZTIMER_eStart(buttonScanTimerHandle, ZTIMER_TIME_MSEC(10));
}
. - /, /. , .
PUBLIC void blinkFunc(void *pvParam)
{
static uint8 fastBlink = TRUE;
static uint8 enabled = TRUE;
ButtonPressType value;
if(ZQ_bQueueReceive(&queueHandle, (uint8*)&value))
{
if(value == BUTTON_SHORT_PRESS)
fastBlink = fastBlink ? FALSE : TRUE;
if(value == BUTTON_LONG_PRESS)
enabled = enabled ? FALSE : TRUE;
}
if(enabled)
{
uint32 currentState = u32AHI_DioReadInput();
vAHI_DioSetOutput(currentState^BOARD_LED_PIN, currentState&BOARD_LED_PIN);
}
ZTIMER_eStart(blinkTimerHandle, fastBlink? ZTIMER_TIME_MSEC(200) : ZTIMER_TIME_MSEC(1000));
}
, .
Hello DIO Interrupts
, , , . . , .
.
// Initialize hardware
vAHI_DioSetDirection(BOARD_BTN_PIN, BOARD_LED_PIN);
vAHI_DioSetPullup(BOARD_BTN_PIN, 0);
vAHI_DioInterruptEdge(0, BOARD_BTN_PIN);
vAHI_DioInterruptEnable(BOARD_BTN_PIN, 0);
// Init and start timers
ZTIMER_eInit(timers, sizeof(timers) / sizeof(ZTIMER_tsTimer));
ZTIMER_eOpen(&blinkTimerHandle, blinkFunc, NULL, ZTIMER_FLAG_PREVENT_SLEEP);
ZTIMER_eStart(blinkTimerHandle, ZTIMER_TIME_MSEC(1000));
ZTIMER_eOpen(&buttonScanTimerHandle, buttonScanFunc, NULL, ZTIMER_FLAG_PREVENT_SLEEP);
//ZTIMER_eStart(buttonScanTimerHandle, ZTIMER_TIME_MSEC(10));
vAHI_DioInterruptEdge() vAHI_DioInterruptEnable(). , ( ZTIMER_eOpen() )
ATMega STM32, JN5169 - vISR_SystemController(). , , , , - . .
PUBLIC void vISR_SystemController(void)
{
DBG_vPrintf(TRUE, "In vISR_SystemController\n");
if(u32AHI_DioInterruptStatus() & BOARD_BTN_PIN)
{
DBG_vPrintf(TRUE, "Button interrupt\n");
ZTIMER_eStart(buttonScanTimerHandle, ZTIMER_TIME_MSEC(10));
}
}
DIO Interrupt. . , .
. , .
PUBLIC void buttonScanFunc(void *pvParam)
{
static int duration = 0;
uint32 input = u32AHI_DioReadInput();
bool btnState = (input & BOARD_BTN_PIN) == 0;
if(btnState)
{
duration++;
DBG_vPrintf(TRUE, "Button still pressed for %d ticks\n", duration);
ZTIMER_eStart(buttonScanTimerHandle, ZTIMER_TIME_MSEC(10));
}
else
{
// detect long press
if(duration > 200)
{
DBG_vPrintf(TRUE, "Button released. Long press detected\n");
ButtonPressType value = BUTTON_LONG_PRESS;
ZQ_bQueueSend(&queueHandle, (uint8*)&value);
}
// detect short press
else if(duration > 10)
{
DBG_vPrintf(TRUE, "Button released. Short press detected\n");
ButtonPressType value = BUTTON_SHORT_PRESS;
ZQ_bQueueSend(&queueHandle, &value);
}
duration = 0;
}
}
Tick Timer’, vISR_SystemController() irq_JN516x.S.
? , DIO Interrupt, - ( ) .
Hello sleep/wake
, . . , , . - :)
, / PWRM ( Power Management). 2 , , .
static PWRM_DECLARE_CALLBACK_DESCRIPTOR(PreSleep);
static PWRM_DECLARE_CALLBACK_DESCRIPTOR(Wakeup);
PWRM_CALLBACK(PreSleep)
{
DBG_vPrintf(TRUE, "Going to sleep..\n\n");
DBG_vUartFlush();
ZTIMER_vSleep();
// Disable UART (if enabled)
vAHI_UartDisable(E_AHI_UART_0);
// clear interrupts
u32AHI_DioWakeStatus();
// Set the wake condition on falling edge of the button pin
vAHI_DioWakeEdge(0, BOARD_BTN_PIN);
vAHI_DioWakeEnable(BOARD_BTN_PIN, 0);
}
PWRM_CALLBACK(Wakeup)
{
// Stabilise the oscillator
while (bAHI_GetClkSource() == TRUE);
// Now we are running on the XTAL, optimise the flash memory wait states
vAHI_OptimiseWaitStates();
// Re-initialize Debug UART
DBG_vUartInit(DBG_E_UART_0, DBG_E_UART_BAUD_RATE_115200);
DBG_vPrintf(TRUE, "\nWaking..\n");
DBG_vUartFlush();
// Re-initialize hardware and interrupts
TARGET_INITIALISE();
SET_IPL(0);
portENABLE_INTERRUPTS();
// Wake the timers
ZTIMER_vWake();
}
void vAppRegisterPWRMCallbacks(void)
{
PWRM_vRegisterPreSleepCallback(PreSleep);
PWRM_vRegisterWakeupCallback(Wakeup);
}
PreSleep() - , UART , , GPIO. , .
Wakeup() - , UART, , . vAppMain(), .
( ).
uint8 enabled = TRUE;
PUBLIC void blinkFunc(void *pvParam)
{
static uint8 fastBlink = TRUE;
ButtonPressType value;
if(ZQ_bQueueReceive(&queueHandle, (uint8*)&value))
{
DBG_vPrintf(TRUE, "Processing message in blink task\n");
if(value == BUTTON_SHORT_PRESS)
fastBlink = fastBlink ? FALSE : TRUE;
if(value == BUTTON_LONG_PRESS)
{
DBG_vPrintf(TRUE, "Stop Blinking\n");
vAHI_DioSetOutput(BOARD_LED_PIN, 0);
enabled = FALSE;
}
}
if(enabled)
{
uint32 currentState = u32AHI_DioReadInput();
vAHI_DioSetOutput(currentState^BOARD_LED_PIN, currentState&BOARD_LED_PIN);
}
ZTIMER_eStart(blinkTimerHandle, fastBlink? ZTIMER_TIME_MSEC(200) : ZTIMER_TIME_MSEC(1000));
}
enabled , .. . .
. , , , .
PUBLIC void buttonScanFunc(void *pvParam)
{
static int duration = 0;
uint32 input = u32AHI_DioReadInput();
bool btnState = (input & BOARD_BTN_PIN) == 0;
if(btnState)
{
duration++;
DBG_vPrintf(TRUE, "Button still pressed for %d ticks\n", duration);
}
else
{
// detect long press
if(duration > 200)
{
DBG_vPrintf(TRUE, "Button released. Long press detected\n");
ButtonPressType value = BUTTON_LONG_PRESS;
ZQ_bQueueSend(&queueHandle, (uint8*)&value);
}
// detect short press
else if(duration > 5)
{
DBG_vPrintf(TRUE, "Button released. Short press detected\n");
ButtonPressType value = BUTTON_SHORT_PRESS;
ZQ_bQueueSend(&queueHandle, &value);
}
duration = 0;
}
ZTIMER_eStart(buttonScanTimerHandle, ZTIMER_TIME_MSEC(10));
}
, , ? vAppMain(). , ALLOW_SLEEP. PREVENT_SLEEP, , , . . , . , , .
// Init and start timers
ZTIMER_eInit(timers, sizeof(timers) / sizeof(ZTIMER_tsTimer));
ZTIMER_eOpen(&blinkTimerHandle, blinkFunc, NULL, ZTIMER_FLAG_ALLOW_SLEEP);
ZTIMER_eStart(blinkTimerHandle, ZTIMER_TIME_MSEC(1000));
ZTIMER_eOpen(&buttonScanTimerHandle, buttonScanFunc, NULL, ZTIMER_FLAG_ALLOW_SLEEP);
ZTIMER_eStart(buttonScanTimerHandle, ZTIMER_TIME_MSEC(10));
PRIVATE uint8 keepAliveTime = 10;
PRIVATE pwrm_tsWakeTimerEvent wakeStruct;
PUBLIC void vAppMain(void)
{
...
// Let the device go to sleep if there is nothing to do
PWRM_vInit(E_AHI_SLEEP_OSCON_RAMON);
while(1)
{
ZTIMER_vTask();
vAHI_WatchdogRestart();
if(enabled == FALSE)
{
DBG_vPrintf(TRUE, "Scheduling wake task\n");
PWRM_eScheduleActivity(&wakeStruct, keepAliveTime * 32000, wakeCallBack);
}
PWRM_vManagePower();
}
( ) PWRM_vInit(). - E_AHI_SLEEP_OSCON_RAMON, wake up timer , . - enabled. , . wake up , , - , ZigBee.
PWRM_vManagePower(). . . . - ( PREVENT_SLEEP). - , PWRM_eScheduleActivity(), enabled.
, - ,
PUBLIC void vISR_SystemController(void)
{
// clear pending DIO changed bits by reading register
uint8 u8WakeInt = u8AHI_WakeTimerFiredStatus();
uint32 u32IOStatus = u32AHI_DioInterruptStatus();
DBG_vPrintf(TRUE, "In vISR_SystemController\n");
if(u32IOStatus & BOARD_BTN_PIN)
{
DBG_vPrintf(TRUE, "Button interrupt\n");
enabled = TRUE;
PWRM_vWakeInterruptCallback();
}
if(u8WakeInt & E_AHI_WAKE_TIMER_MASK_1)
{
/* wake timer interrupt got us here */
DBG_vPrintf(TRUE, "APP: Wake Timer 1 Interrupt\n");
PWRM_vWakeInterruptCallback();
}
}
2 , - , . enabled, . . PreSleep() Wakeup(), , PWRM_eScheduleActivity().
PUBLIC void wakeCallBack(void)
{
DBG_vPrintf(TRUE, "wakeCallBack()\n");
}
, , , , .
Hello Deep Sleep
- wake up , . , . .
PUBLIC void vAppMain(void)
{
...
// Let the device go to sleep if there is nothing to do
PWRM_vInit(E_AHI_SLEEP_DEEP);
while(1)
{
ZTIMER_vTask();
vAHI_WatchdogRestart();
if(enabled == FALSE)
{
DBG_vPrintf(TRUE, "Scheduling sleep\n");
PWRM_vManagePower();
}
}
}
wake up vISR_SystemController(), .
. , , . , ( ) - vAppMain() Wakeup(). , , . , .
EEPROM. 2
EEPROM - EEPROM
Persistent Data Manager (PDM) - key-value storage EEPROM
, .. ZigBee , PDM, .
. .
#define PDM_ID_BLINK_MODE 0x2
#define BLINK_MODE_SLOW 0
#define BLINK_MODE_FAST 1
uint8 blinkMode = BLINK_MODE_SLOW;
void storeBlinkMode(uint8 mode)
{
blinkMode = mode;
PDM_teStatus status = PDM_eSaveRecordData(PDM_ID_BLINK_MODE, &blinkMode, sizeof(blinkMode));
DBG_vPrintf(TRUE, "Storing blink mode. Status %d, value %d\n", status, blinkMode);
}
void restoreBlinkMode()
{
uint16 readBytes;
PDM_teStatus status = PDM_eReadDataFromRecord(PDM_ID_BLINK_MODE, &blinkMode, sizeof(blinkMode), &readBytes);
DBG_vPrintf(TRUE, "Reading blink mode. Status %d, size %d, value %d\n", status, readBytes, blinkMode);
}
blinkFunc(), ( , blinkFunc() ). vAppMain() - . , PDM .
PUBLIC void vAppMain(void)
{
...
// Restore blink mode from EEPROM
PDM_eInitialise(0);
restoreBlinkMode();
JN5169 , . , () .
HelloWorld - . ZigBee. , , .
, BeyondStudio. BeyondStudio. , Eclipse/BeyondStudio , CMake.
.
Documentation utilisée:
https://www.nxp.com/docs/en/user-guide/JN-UG-3113.pdf
https://www.nxp.com/docs/en/user-guide/JN-UG-3116.pdf
https://www.nxp.com/docs/en/user-guide/JN-UG-3087.pdf
https://www.rcscomponents.kiev.ua/datasheets/e75-2g4m10s_usermanual_en_v1_1.pdf