mirror of
https://github.com/hathach/tinyusb.git
synced 2025-10-14 01:58:41 +08:00
3.3 KiB
3.3 KiB
TinyUSB Development Guide
Build Commands
CMake Build System (Preferred)
CMake with Ninja is the preferred build method for TinyUSB development.
- Build example with Ninja:
cd examples/device/cdc_msc mkdir build && cd build cmake -G Ninja -DBOARD=raspberry_pi_pico .. ninja
- Debug build:
cmake -G Ninja -DBOARD=raspberry_pi_pico -DCMAKE_BUILD_TYPE=Debug ..
- With logging:
cmake -G Ninja -DBOARD=raspberry_pi_pico -DLOG=2 ..
- With RTT logger:
cmake -G Ninja -DBOARD=raspberry_pi_pico -DLOG=2 -DLOGGER=rtt ..
- Flash with JLink:
ninja cdc_msc-jlink
- Flash with OpenOCD:
ninja cdc_msc-openocd
- Generate UF2:
ninja cdc_msc-uf2
- List all targets:
ninja -t targets
Make Build System (Alternative)
- Build example:
cd examples/device/cdc_msc && make BOARD=raspberry_pi_pico all
- For specific example:
cd examples/{device|host|dual}/{example_name} && make BOARD=raspberry_pi_pico all
- Flash with JLink:
make BOARD=raspberry_pi_pico flash-jlink
- Flash with OpenOCD:
make BOARD=raspberry_pi_pico flash-openocd
- Debug build:
make BOARD=raspberry_pi_pico DEBUG=1 all
- With logging:
make BOARD=raspberry_pi_pico LOG=2 all
- With RTT logger:
make BOARD=raspberry_pi_pico LOG=2 LOGGER=rtt all
- Generate UF2:
make BOARD=raspberry_pi_pico all uf2
Additional Options
- Select RootHub port:
RHPORT_DEVICE=1
(make) or-DRHPORT_DEVICE=1
(cmake) - Set port speed:
RHPORT_DEVICE_SPEED=OPT_MODE_FULL_SPEED
(make) or-DRHPORT_DEVICE_SPEED=OPT_MODE_FULL_SPEED
(cmake)
Dependencies
- Get dependencies:
python tools/get_deps.py rp2040
- Or from example:
cd examples/device/cdc_msc && make BOARD=raspberry_pi_pico get-deps
Testing
- Run unit tests:
cd test/unit-test && ceedling test:all
- Run specific test:
cd test/unit-test && ceedling test:test_fifo
Pre-commit Hooks
Before building, it's recommended to run pre-commit to ensure code quality:
- Run pre-commit on all files:
pre-commit run --all-files
- Run pre-commit on staged files:
pre-commit run
- Install pre-commit hook:
pre-commit install
Code Style Guidelines
- Use C99 standard
- Memory-safe: no dynamic allocation
- Thread-safe: defer all interrupt events to non-ISR task functions
- 2-space indentation, no tabs
- Use snake_case for variables/functions
- Use UPPER_CASE for macros and constants
- Follow existing variable naming patterns in files you're modifying
- Include proper header comments with MIT license
- Add descriptive comments for non-obvious functions
- When including headers, group in order: C stdlib, tusb common, drivers, classes
- Always check return values from functions that can fail
- Use TU_ASSERT() for error checking with return statements
Project Structure
- src/: Core TinyUSB stack code
- hw/: Board support packages and MCU drivers
- examples/: Reference examples for device/host/dual
- test/: Unit tests and hardware integration tests
Release Process
To prepare a new release:
- Update the
version
variable intools/make_release.py
to the new version number - Run the release script:
python tools/make_release.py
- This will update version numbers in
src/tusb_option.h
,repository.yml
, andlibrary.json
- It will also regenerate documentation
- This will update version numbers in
- Update
docs/info/changelog.rst
with release notes - Commit changes and create release tag