7.8 KiB
7.8 KiB
Precision Timing Tool - Project Structure
Directory Layout
precision-timing-tool/
├── CMakeLists.txt # Main build configuration
├── pico_sdk_import.cmake # Pico SDK integration
├── FreeRTOSConfig.h # FreeRTOS configuration
├── README.md # Project documentation
├── DEVELOPMENT_INSTRUCTIONS.md # Development guide
├── PROJECT_STRUCTURE.md # This file
│
├── src/ # Source code
│ ├── main.c # Application entry point
│ ├── config.h # System configuration
│ │
│ ├── freertos/ # FreeRTOS specific
│ │ ├── tasks.c # Task definitions
│ │ ├── tasks.h
│ │ └── hooks.c # FreeRTOS hooks
│ │
│ ├── drivers/ # Hardware drivers
│ │ ├── ch9120/ # Ethernet controller
│ │ │ ├── ch9120.c
│ │ │ ├── ch9120.h
│ │ │ └── ch9120_config.h
│ │ ├── gps/ # GPS receiver
│ │ │ ├── gps.c
│ │ │ ├── gps.h
│ │ │ └── nmea_parser.c
│ │ └── hardware/ # RP2040 hardware
│ │ ├── pps.c # PPS interrupt handler
│ │ ├── pps.h
│ │ ├── rtc.c # Real-time clock
│ │ └── rtc.h
│ │
│ ├── network/ # Network protocols
│ │ ├── ntp/ # NTP implementation
│ │ │ ├── ntp_client.c
│ │ │ ├── ntp_server.c
│ │ │ ├── ntp_common.h
│ │ │ └── ntp_packet.h
│ │ ├── ptp/ # PTP implementation
│ │ │ ├── ptp_clock.c
│ │ │ ├── ptp_messages.c
│ │ │ ├── ptp_common.h
│ │ │ └── ptp_types.h
│ │ └── network_stack.c # Common network functions
│ │
│ ├── timing/ # Timing core
│ │ ├── clock_discipline.c # Clock sync algorithms
│ │ ├── clock_discipline.h
│ │ ├── time_sources.c # Time source management
│ │ ├── time_sources.h
│ │ ├── timebase.c # System timebase
│ │ └── timebase.h
│ │
│ ├── protocols/ # Time code protocols
│ │ ├── irig/ # IRIG time codes
│ │ │ ├── irig_decoder.c
│ │ │ ├── irig_encoder.c
│ │ │ └── irig_common.h
│ │ └── timecode.h # Common time code interface
│ │
│ ├── utils/ # Utility functions
│ │ ├── circular_buffer.c
│ │ ├── circular_buffer.h
│ │ ├── statistics.c # Timing statistics
│ │ ├── statistics.h
│ │ └── debug.h # Debug macros
│ │
│ └── web/ # Web interface
│ ├── web_server.c
│ ├── web_server.h
│ ├── api_handlers.c # REST API
│ └── html_content.h # Embedded HTML
│
├── lib/ # External libraries
│ ├── FreeRTOS-Kernel/ # FreeRTOS submodule
│ └── pico-sdk/ # Pico SDK submodule
│
├── test/ # Unit tests
│ ├── test_ntp.c
│ ├── test_ptp.c
│ ├── test_clock.c
│ └── CMakeLists.txt
│
├── tools/ # Development tools
│ ├── deploy.sh # Deployment script
│ ├── monitor.py # Serial monitor
│ └── time_client.py # Test client
│
├── docs/ # Documentation (already created)
│ ├── hardware/
│ ├── software/
│ ├── examples/
│ ├── freertos/
│ └── timing/
│
└── build/ # Build output (generated)
└── timing_tool.uf2 # Firmware binary
Module Descriptions
Core Modules
Main Application (src/main.c)
- System initialization
- FreeRTOS scheduler start
- Hardware configuration
- Task creation
FreeRTOS Tasks (src/freertos/tasks.c)
// Task priorities (higher number = higher priority)
#define TASK_PRIORITY_TIMING (configMAX_PRIORITIES - 1) // Critical
#define TASK_PRIORITY_PPS (configMAX_PRIORITIES - 2) // High
#define TASK_PRIORITY_NETWORK (configMAX_PRIORITIES - 3) // High
#define TASK_PRIORITY_GPS (configMAX_PRIORITIES - 4) // Normal
#define TASK_PRIORITY_OUTPUT (configMAX_PRIORITIES - 5) // Normal
#define TASK_PRIORITY_WEB (configMAX_PRIORITIES - 6) // Low
#define TASK_PRIORITY_STATS (configMAX_PRIORITIES - 7) // Low
Hardware Drivers
CH9120 Ethernet (src/drivers/ch9120/)
- UART communication with CH9120
- Network configuration
- Packet transmission/reception
- TCP/UDP socket management
GPS Driver (src/drivers/gps/)
- NMEA sentence parsing
- Time extraction
- Position data (for fixed installations)
- PPS synchronization
Network Protocols
NTP Implementation (src/network/ntp/)
- Client: Time synchronization
- Server: Time distribution
- Stratum management
- Authentication support
PTP Implementation (src/network/ptp/)
- Best Master Clock Algorithm
- Sync message generation
- Delay measurement
- Hardware timestamping hooks
Timing Core
Clock Discipline (src/timing/clock_discipline.c)
- Phase-locked loop (PLL)
- Frequency-locked loop (FLL)
- Hybrid PLL/FLL algorithm
- Drift compensation
Time Sources (src/timing/time_sources.c)
- Source priority management
- Quality assessment
- Automatic failover
- Source statistics
Build System
CMake Configuration
# Feature flags
option(ENABLE_NTP "Enable NTP protocol" ON)
option(ENABLE_PTP "Enable PTP protocol" ON)
option(ENABLE_GPS "Enable GPS support" ON)
option(ENABLE_IRIG "Enable IRIG support" ON)
option(ENABLE_WEB "Enable web interface" ON)
option(DEBUG_OUTPUT "Enable debug output" OFF)
Memory Layout
RAM Usage (264KB total):
- FreeRTOS heap: 128KB
- Network buffers: 32KB
- Time data structures: 16KB
- Stack space: 32KB
- BSS/Data: ~56KB
Flash Usage (4MB total):
- Application code: ~256KB
- Web content: ~64KB
- Configuration: 4KB
- Reserved: ~3.7MB
Configuration Files
System Configuration (src/config.h)
// Network settings
#define DEFAULT_IP_ADDRESS "192.168.1.100"
#define DEFAULT_SUBNET_MASK "255.255.255.0"
#define DEFAULT_GATEWAY "192.168.1.1"
// Time source priorities (0 = highest)
#define PRIORITY_GPS 0
#define PRIORITY_PTP 1
#define PRIORITY_NTP 2
#define PRIORITY_IRIG 3
// Timing parameters
#define PLL_UPDATE_INTERVAL_MS 1000
#define DRIFT_COMP_WINDOW_S 3600
#define MAX_OFFSET_JUMP_MS 1000
Inter-Task Communication
Message Queues
- Time update queue
- Network packet queue
- Configuration queue
- Statistics queue
Semaphores/Mutexes
- Clock access mutex
- Network resource mutex
- Configuration mutex
- Statistics buffer mutex
Event Groups
- Time source events
- Network events
- System status events
Development Guidelines
-
Coding Standards
- MISRA-C 2012 compliance where practical
- Consistent naming convention
- Comprehensive error handling
-
Real-Time Considerations
- Minimize ISR execution time
- Avoid dynamic memory allocation
- Use fixed-priority preemptive scheduling
-
Testing Strategy
- Unit tests for algorithms
- Integration tests for protocols
- System tests with reference clocks
-
Documentation
- Doxygen comments for APIs
- Design documents for complex modules
- User manual for configuration