Compare commits

...

5 Commits

Author SHA1 Message Date
f405181219 2022-04-19T19:58:40 2022-04-19 19:58:41 +09:00
25752057b1 2021-09-09T12:07:07 2021-09-09 12:07:08 +09:00
af48e325c6 Merge branch 'main' of https://github.com/elex-project/pico-examples into main 2021-09-09 10:31:56 +09:00
627b35692f 2021-09-09T10:31:18 2021-09-09 10:31:18 +09:00
Elex
a56e31423d Create LICENSE 2021-08-22 17:00:28 +09:00
45 changed files with 1090 additions and 31 deletions

1
.gitignore vendored
View File

@@ -1,2 +1,3 @@
/pico-sdk /pico-sdk
/pico-examples /pico-examples
/**/build/

1
01_blink/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build

18
01_blink/.vscode/c_cpp_properties.json vendored Normal file
View File

@@ -0,0 +1,18 @@
{
"configurations": [
{
"name": "Linux GCC ARM",
"includePath": [
"${workspaceFolder}/**",
"${env:PICO_SDK_PATH}/src/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode":"linux-gcc-arm",
"configurationProvider": "ms-vscode.cmake-tools"
}
],
"version": 4
}

21
01_blink/CMakeLists.txt Normal file
View File

@@ -0,0 +1,21 @@
cmake_minimum_required(VERSION 3.13)
include(pico_sdk_import.cmake)
project(blink C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
pico_sdk_init()
add_executable(blink
src/blink.c
)
pico_set_program_name(blink "Blink")
pico_set_program_version(blink "0.1.0")
pico_enable_stdio_usb(blink 1)
pico_enable_stdio_uart(blink 0)
pico_add_extra_outputs(blink)
target_link_libraries(blink pico_stdlib)

43
01_blink/run Executable file
View File

@@ -0,0 +1,43 @@
#!/usr/bin/bash
export PICO_SDK_PATH="/media/elex/UltraFit/pico-sdk"
function fn_clean {
if [ -d ./build ]
then
rm -r ./build
fi
mkdir build
}
function fn_cmake {
cd build
cmake ..
cd ..
}
function fn_make {
cd build
make
cd ..
}
if [ -z $1 ]
then
fn_clean
fn_cmake
fn_make
elif [ $1 == 'clean' ]
then
echo 'Cleaning build dir.'
fn_clean
elif [ $1 == 'cmake' ]
then
echo 'Exec cmake'
fn_cmake
elif [ $1 == 'make' ]
then
echo 'Exec make'
fn_make
else
echo 'What do you want???'
fi

25
01_blink/src/blink.c Normal file
View File

@@ -0,0 +1,25 @@
#include <stdlib.h>
#include "pico/stdlib.h"
#include "pico/binary_info.h"
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
int main()
{
bi_decl(bi_program_description("Blink"));
bi_decl(bi_1pin_with_name(LED_PIN, "On-board LED"));
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
while (true)
{
gpio_put(LED_PIN, true);
sleep_ms(750);
gpio_put(LED_PIN, false);
sleep_ms(250);
gpio_put(LED_PIN, true);
sleep_ms(250);
gpio_put(LED_PIN, false);
sleep_ms(250);
}
}

View File

@@ -1,2 +0,0 @@
/build
/.vscode

View File

@@ -1,26 +0,0 @@
#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include "pico/binary_info.h"
const uint LED_PIN = 25;
int main()
{
//bi_decl(bi_program_description("This is a test binary."));
//(bi_1pin_with_name(LED_PIN, "On-board LED"));
stdio_init_all();
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
while (true)
{
gpio_put(LED_PIN, 0);
sleep_ms(250);
gpio_put(LED_PIN, 1);
puts("Hello World~~!\n");
sleep_ms(1000);
}
}

1
02_hello_serial/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build

View File

@@ -0,0 +1,18 @@
{
"configurations": [
{
"name": "Linux GCC ARM",
"includePath": [
"${workspaceFolder}/**",
"${env:PICO_SDK_PATH}/src/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "linux-gcc-arm",
"configurationProvider": "ms-vscode.cmake-tools"
}
],
"version": 4
}

View File

@@ -11,8 +11,11 @@ add_executable(hello
src/hello.c src/hello.c
) )
pico_enable_stdio_usb(hello 1) pico_set_program_name(hello "Hello Serial")
pico_enable_stdio_uart(hello 1) pico_set_program_version(hello "0.1.0")
pico_enable_stdio_usb(hello 1) # USB
pico_enable_stdio_uart(hello 0) # UART, .
pico_add_extra_outputs(hello) pico_add_extra_outputs(hello)

View File

@@ -0,0 +1,62 @@
# This is a copy of <PICO_SDK_PATH>/external/pico_sdk_import.cmake
# This can be dropped into an external project to help locate this SDK
# It should be include()ed prior to project()
if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
endif ()
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
endif ()
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
endif ()
set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
if (NOT PICO_SDK_PATH)
if (PICO_SDK_FETCH_FROM_GIT)
include(FetchContent)
set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
if (PICO_SDK_FETCH_FROM_GIT_PATH)
get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
endif ()
FetchContent_Declare(
pico_sdk
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
GIT_TAG master
)
if (NOT pico_sdk)
message("Downloading Raspberry Pi Pico SDK")
FetchContent_Populate(pico_sdk)
set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
endif ()
set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
else ()
message(FATAL_ERROR
"SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
)
endif ()
endif ()
get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
if (NOT EXISTS ${PICO_SDK_PATH})
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
endif ()
set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
endif ()
set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
include(${PICO_SDK_INIT_CMAKE_FILE})

View File

@@ -1,4 +1,5 @@
#!/usr/bin/bash #!/usr/bin/bash
export PICO_SDK_PATH="/media/elex/UltraFit/pico-sdk"
function fn_clean { function fn_clean {
if [ -d ./build ] if [ -d ./build ]

View File

@@ -0,0 +1,29 @@
#include <stdio.h>
#include <string.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include "pico/binary_info.h"
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
int main()
{
bi_decl(bi_program_description("Hello Serial via USB."));
bi_decl(bi_1pin_with_name(LED_PIN, "On-board LED"));
stdio_init_all();
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
char *str = "Hello World!";
while (true)
{
gpio_put(LED_PIN, false);
sleep_ms(250);
gpio_put(LED_PIN, true);
puts(str);
sleep_ms(1000);
}
}

1
03_data_types/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build

View File

@@ -0,0 +1,18 @@
{
"configurations": [
{
"name": "Linux GCC ARM",
"includePath": [
"${workspaceFolder}/**",
"${env:PICO_SDK_PATH}/src/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "linux-gcc-arm",
"configurationProvider": "ms-vscode.cmake-tools"
}
],
"version": 4
}

View File

@@ -0,0 +1,22 @@
cmake_minimum_required(VERSION 3.13)
include(pico_sdk_import.cmake)
project(datatypes C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
pico_sdk_init()
add_executable(datatypes
src/datatypes.c
)
pico_set_program_name(datatypes "Data Types")
pico_set_program_version(datatypes "0.1.0")
pico_enable_stdio_usb(datatypes 1) # 표준 출력을 USB로
pico_enable_stdio_uart(datatypes 0) # 표준 출력을 UART로, 안함.
pico_add_extra_outputs(datatypes)
target_link_libraries(datatypes pico_stdlib)

View File

@@ -0,0 +1,62 @@
# This is a copy of <PICO_SDK_PATH>/external/pico_sdk_import.cmake
# This can be dropped into an external project to help locate this SDK
# It should be include()ed prior to project()
if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
endif ()
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
endif ()
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
endif ()
set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
if (NOT PICO_SDK_PATH)
if (PICO_SDK_FETCH_FROM_GIT)
include(FetchContent)
set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
if (PICO_SDK_FETCH_FROM_GIT_PATH)
get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
endif ()
FetchContent_Declare(
pico_sdk
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
GIT_TAG master
)
if (NOT pico_sdk)
message("Downloading Raspberry Pi Pico SDK")
FetchContent_Populate(pico_sdk)
set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
endif ()
set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
else ()
message(FATAL_ERROR
"SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
)
endif ()
endif ()
get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
if (NOT EXISTS ${PICO_SDK_PATH})
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
endif ()
set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
endif ()
set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
include(${PICO_SDK_INIT_CMAKE_FILE})

7
03_data_types/result.txt Normal file
View File

@@ -0,0 +1,7 @@
char 23 : size=1
short 23 : size=2
int 23 : size=4
long 23 : size=4
long long 23 : size=8
float 3.140000 : size=4
double 3.140000 : size=8

43
03_data_types/run Executable file
View File

@@ -0,0 +1,43 @@
#!/usr/bin/bash
export PICO_SDK_PATH="/media/elex/UltraFit/pico-sdk"
function fn_clean {
if [ -d ./build ]
then
rm -r ./build
fi
mkdir build
}
function fn_cmake {
cd build
cmake ..
cd ..
}
function fn_make {
cd build
make
cd ..
}
if [ -z $1 ]
then
fn_clean
fn_cmake
fn_make
elif [ $1 == 'clean' ]
then
echo 'Cleaning build dir.'
fn_clean
elif [ $1 == 'cmake' ]
then
echo 'Exec cmake'
fn_cmake
elif [ $1 == 'make' ]
then
echo 'Exec make'
fn_make
else
echo 'What do you want???'
fi

View File

@@ -0,0 +1,51 @@
#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include "pico/binary_info.h"
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
void print_data_types()
{
char c = 23;
printf("char %d : size=%lu\n", c, sizeof(char)); // 1 byte
short s = 23;
printf("short %d : size=%lu\n", s, sizeof(short)); // 2 byte
int i = 23;
printf("int %d : size=%lu\n", i, sizeof(int)); // 4 byte
long l = 23L;
printf("long %ld : size=%lu\n", l, sizeof(long)); // 4 byte
long long ll = 23LL;
printf("long long %lld : size=%lu\n", ll, sizeof(long long)); // 8 byte
float f = 3.14F;
printf("float %f : size=%lu\n", f, sizeof(float)); // 4 byte
double d = 3.14;
printf("double %f : size=%lu\n", d, sizeof(double)); // 8 byte
}
int main()
{
bi_decl(bi_program_description("Data types"));
bi_decl(bi_1pin_with_name(LED_PIN, "On-board LED"));
stdio_init_all();
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
while (true)
{
gpio_put(LED_PIN, true);
print_data_types();
sleep_ms(250);
gpio_put(LED_PIN, false);
sleep_ms(2000);
}
}

1
04_watchdog/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build

View File

@@ -0,0 +1,18 @@
{
"configurations": [
{
"name": "Linux GCC ARM",
"includePath": [
"${workspaceFolder}/**",
"${env:PICO_SDK_PATH}/src/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "linux-gcc-arm",
"configurationProvider": "ms-vscode.cmake-tools"
}
],
"version": 4
}

View File

@@ -0,0 +1,22 @@
cmake_minimum_required(VERSION 3.13)
include(pico_sdk_import.cmake)
project(watchdog C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
pico_sdk_init()
add_executable(watchdog
src/watchdog.c
)
pico_set_program_name(watchdog "Watch Dog")
pico_set_program_version(watchdog "0.1.0")
pico_enable_stdio_usb(watchdog 1) # 표준 출력을 USB로
pico_enable_stdio_uart(watchdog 0) # 표준 출력을 UART로, 안함.
pico_add_extra_outputs(watchdog)
target_link_libraries(watchdog pico_stdlib)

View File

@@ -0,0 +1,62 @@
# This is a copy of <PICO_SDK_PATH>/external/pico_sdk_import.cmake
# This can be dropped into an external project to help locate this SDK
# It should be include()ed prior to project()
if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
endif ()
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
endif ()
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
endif ()
set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
if (NOT PICO_SDK_PATH)
if (PICO_SDK_FETCH_FROM_GIT)
include(FetchContent)
set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
if (PICO_SDK_FETCH_FROM_GIT_PATH)
get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
endif ()
FetchContent_Declare(
pico_sdk
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
GIT_TAG master
)
if (NOT pico_sdk)
message("Downloading Raspberry Pi Pico SDK")
FetchContent_Populate(pico_sdk)
set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
endif ()
set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
else ()
message(FATAL_ERROR
"SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
)
endif ()
endif ()
get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
if (NOT EXISTS ${PICO_SDK_PATH})
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
endif ()
set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
endif ()
set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
include(${PICO_SDK_INIT_CMAKE_FILE})

43
04_watchdog/run Executable file
View File

@@ -0,0 +1,43 @@
#!/usr/bin/bash
export PICO_SDK_PATH="/media/elex/UltraFit/pico-sdk"
function fn_clean {
if [ -d ./build ]
then
rm -r ./build
fi
mkdir build
}
function fn_cmake {
cd build
cmake ..
cd ..
}
function fn_make {
cd build
make
cd ..
}
if [ -z $1 ]
then
fn_clean
fn_cmake
fn_make
elif [ $1 == 'clean' ]
then
echo 'Cleaning build dir.'
fn_clean
elif [ $1 == 'cmake' ]
then
echo 'Exec cmake'
fn_cmake
elif [ $1 == 'make' ]
then
echo 'Exec make'
fn_make
else
echo 'What do you want???'
fi

View File

@@ -0,0 +1,50 @@
#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/watchdog.h"
#include "hardware/gpio.h"
#include "pico/binary_info.h"
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
int main()
{
bi_decl(bi_program_description("Watchdog Test"));
bi_decl(bi_1pin_with_name(LED_PIN, "On-board LED"));
stdio_init_all();
if (watchdog_caused_reboot())
{
puts("Rebooted by Watchdog");
}
else
{
puts("Clean boot");
}
// 3초 이상 반응이 없으면 리부트.
watchdog_enable(3000, false);
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
while (true)
{
// 루프가 한 번 돌 때마다 워치독을 업데이트한다.
watchdog_update();
printf("Currently, %u\n", time_us_32());
gpio_put(LED_PIN, true);
sleep_ms(250);
gpio_put(LED_PIN, false);
sleep_ms(1000);
if (time_us_32() > 15000000)
{
// 테스트를 위해서 5초가 소요되는 작업을 한다.
// 워치독에 의해서 리부트될 것이다.
sleep_ms(5000);
}
}
}

1
05_time/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build

18
05_time/.vscode/c_cpp_properties.json vendored Normal file
View File

@@ -0,0 +1,18 @@
{
"configurations": [
{
"name": "Linux GCC ARM",
"includePath": [
"${workspaceFolder}/**",
"${env:PICO_SDK_PATH}/src/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "linux-gcc-arm",
"configurationProvider": "ms-vscode.cmake-tools"
}
],
"version": 4
}

5
05_time/.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,5 @@
{
"files.associations": {
"gpio.h": "c"
}
}

22
05_time/CMakeLists.txt Normal file
View File

@@ -0,0 +1,22 @@
cmake_minimum_required(VERSION 3.13)
include(pico_sdk_import.cmake)
project(time C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
pico_sdk_init()
add_executable(time
src/time.c
)
pico_set_program_name(time "Time")
pico_set_program_version(time "0.1.0")
pico_enable_stdio_usb(time 1) # 표준 출력을 USB로
pico_enable_stdio_uart(time 0) # 표준 출력을 UART로, 안함.
pico_add_extra_outputs(time)
target_link_libraries(time pico_stdlib)

54
05_time/README.md Normal file
View File

@@ -0,0 +1,54 @@
# pico/time.h
## 시간
### 현재 시간
현재 시간을 가져옵니다.
- `static absolute_time_t get_absolute_time (void)`
### 특정 시간
절대 시간의 값을 부팅 이후 경과된 시간에 해당하는 시간 값으로 지정합니다.
- `static void update_us_since_boot (absolute_time_t *t, uint64_t us_since_boot)`
### 변환
절대 시간을 마이크로 초 또는 밀리토 단위로 변환합니다.
- `static uint64_t to_us_since_boot (absolute_time_t t)`
- `static uint32_t to_ms_since_boot (absolute_time_t t)`
### 연산
절대 시간에 마이크로 초 또는 밀리 초 값을 더합니다.
- `static absolute_time_t delayed_by_us (const absolute_time_t t, uint64_t us)`
- `static absolute_time_t delayed_by_ms (const absolute_time_t t, uint32_t ms)`
- `static absolute_time_t make_timeout_time_us (uint64_t us)`
- `static absolute_time_t make_timeout_time_ms (uint32_t ms)`
### 시간 차
두 절대 시간 사이의 간격을 마이크로 초 단위로 반환합니다.
- `static int64_t absolute_time_diff_us (absolute_time_t from, absolute_time_t to)`
### 널
시간 값이 널인지 여부를 확인합니다.
- `static bool is_nil_time (absolute_time_t t)`
# hardware/timer.h
## 현재 시간
부팅 이후 경과된 시간 값을 마이크로 초 단위로 반환합니다.
- `static uint32_t time_us_32 (void)`
1시간 11분 정도 이후에 0으로 돌아옵니다.
- `uint64_t time_us_64 (void)`
58만년 이상 계속해서 증가합니다.

View File

@@ -0,0 +1,62 @@
# This is a copy of <PICO_SDK_PATH>/external/pico_sdk_import.cmake
# This can be dropped into an external project to help locate this SDK
# It should be include()ed prior to project()
if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
endif ()
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
endif ()
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
endif ()
set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
if (NOT PICO_SDK_PATH)
if (PICO_SDK_FETCH_FROM_GIT)
include(FetchContent)
set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
if (PICO_SDK_FETCH_FROM_GIT_PATH)
get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
endif ()
FetchContent_Declare(
pico_sdk
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
GIT_TAG master
)
if (NOT pico_sdk)
message("Downloading Raspberry Pi Pico SDK")
FetchContent_Populate(pico_sdk)
set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
endif ()
set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
else ()
message(FATAL_ERROR
"SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
)
endif ()
endif ()
get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
if (NOT EXISTS ${PICO_SDK_PATH})
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
endif ()
set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
endif ()
set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
include(${PICO_SDK_INIT_CMAKE_FILE})

43
05_time/run Executable file
View File

@@ -0,0 +1,43 @@
#!/usr/bin/bash
export PICO_SDK_PATH="/media/elex/UltraFit/pico-sdk"
function fn_clean {
if [ -d ./build ]
then
rm -r ./build
fi
mkdir build
}
function fn_cmake {
cd build
cmake ..
cd ..
}
function fn_make {
cd build
make
cd ..
}
if [ -z $1 ]
then
fn_clean
fn_cmake
fn_make
elif [ $1 == 'clean' ]
then
echo 'Cleaning build dir.'
fn_clean
elif [ $1 == 'cmake' ]
then
echo 'Exec cmake'
fn_cmake
elif [ $1 == 'make' ]
then
echo 'Exec make'
fn_make
else
echo 'What do you want???'
fi

30
05_time/src/time.c Normal file
View File

@@ -0,0 +1,30 @@
#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/time.h"
#include "hardware/timer.h"
#include "hardware/gpio.h"
#include "pico/binary_info.h"
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
int main()
{
bi_decl(bi_program_description("Time"));
bi_decl(bi_1pin_with_name(LED_PIN, "On-board LED"));
stdio_init_all();
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
while (true)
{
printf("%u %u\n", to_us_since_boot(get_absolute_time()), time_us_32());
gpio_put(LED_PIN, true);
sleep_ms(250);
gpio_put(LED_PIN, false);
sleep_ms(2000);
}
}

1
06_timer/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build

18
06_timer/.vscode/c_cpp_properties.json vendored Normal file
View File

@@ -0,0 +1,18 @@
{
"configurations": [
{
"name": "Linux GCC ARM",
"includePath": [
"${workspaceFolder}/**",
"${env:PICO_SDK_PATH}/src/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "linux-gcc-arm",
"configurationProvider": "ms-vscode.cmake-tools"
}
],
"version": 4
}

5
06_timer/.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,5 @@
{
"files.associations": {
"gpio.h": "c"
}
}

22
06_timer/CMakeLists.txt Normal file
View File

@@ -0,0 +1,22 @@
cmake_minimum_required(VERSION 3.13)
include(pico_sdk_import.cmake)
project(timer C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
pico_sdk_init()
add_executable(timer
src/timer.c
)
pico_set_program_name(timer "Timer")
pico_set_program_version(timer "0.1.0")
pico_enable_stdio_usb(timer 1) # 표준 출력을 USB로
pico_enable_stdio_uart(timer 0) # 표준 출력을 UART로, 안함.
pico_add_extra_outputs(timer)
target_link_libraries(timer pico_stdlib)

View File

@@ -0,0 +1,62 @@
# This is a copy of <PICO_SDK_PATH>/external/pico_sdk_import.cmake
# This can be dropped into an external project to help locate this SDK
# It should be include()ed prior to project()
if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
endif ()
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
endif ()
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
endif ()
set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
if (NOT PICO_SDK_PATH)
if (PICO_SDK_FETCH_FROM_GIT)
include(FetchContent)
set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
if (PICO_SDK_FETCH_FROM_GIT_PATH)
get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
endif ()
FetchContent_Declare(
pico_sdk
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
GIT_TAG master
)
if (NOT pico_sdk)
message("Downloading Raspberry Pi Pico SDK")
FetchContent_Populate(pico_sdk)
set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
endif ()
set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
else ()
message(FATAL_ERROR
"SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
)
endif ()
endif ()
get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
if (NOT EXISTS ${PICO_SDK_PATH})
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
endif ()
set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
endif ()
set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
include(${PICO_SDK_INIT_CMAKE_FILE})

43
06_timer/run Executable file
View File

@@ -0,0 +1,43 @@
#!/usr/bin/bash
export PICO_SDK_PATH="/media/elex/UltraFit/pico-sdk"
function fn_clean {
if [ -d ./build ]
then
rm -r ./build
fi
mkdir build
}
function fn_cmake {
cd build
cmake ..
cd ..
}
function fn_make {
cd build
make
cd ..
}
if [ -z $1 ]
then
fn_clean
fn_cmake
fn_make
elif [ $1 == 'clean' ]
then
echo 'Cleaning build dir.'
fn_clean
elif [ $1 == 'cmake' ]
then
echo 'Exec cmake'
fn_cmake
elif [ $1 == 'make' ]
then
echo 'Exec make'
fn_make
else
echo 'What do you want???'
fi

40
06_timer/src/timer.c Normal file
View File

@@ -0,0 +1,40 @@
#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/time.h"
#include "hardware/timer.h"
#include "pico/binary_info.h"
// 알람 고유 번호와 사용자 데이터를 매개 변수로 전달 받습니다.
int64_t alarm_callback(alarm_id_t id, void *user_data)
{
printf("Timer %d fired!\n", (int)id);
// 반환값으로 마이크로 초 단위의 값을 사용해서 경과 시간 후 다시 실행되도록 지정할 수 있습니다.
return 0;
}
bool repeating_timer_callback(struct repeating_timer *t)
{
printf("Repeat at %lld\n", time_us_64());
// false를 반환하면 반복이 중단됩니다.
return true;
}
int main()
{
bi_decl(bi_program_description("Timer"));
stdio_init_all();
alarm_pool_init_default();
alarm_id_t alarmId = add_alarm_in_ms(10000, alarm_callback, NULL, false);
struct repeating_timer timer;
add_repeating_timer_ms(1500, repeating_timer_callback, NULL, &timer);
while (true)
{
printf("Currently, %u", time_us_32());
sleep_ms(1000);
}
}

29
LICENSE Normal file
View File

@@ -0,0 +1,29 @@
BSD 3-Clause License
Copyright (c) 2021, Elex
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

9
README.md Normal file
View File

@@ -0,0 +1,9 @@
# Raspberry PI Pico
Examples
------
developed by Elex
https://www.elex-project.com/