kopia lustrzana https://github.com/stlink-org/stlink
Adding framework for st-trace.
rodzic
8560f931d4
commit
27d3144fce
|
@ -4,3 +4,4 @@ build-mingw
|
|||
obj-*
|
||||
*.user*
|
||||
.cmake/
|
||||
*.swp
|
||||
|
|
|
@ -231,6 +231,7 @@ install(TARGETS ${STLINK_LIB_STATIC} ARCHIVE DESTINATION ${STLINK_LIBRARY_PATH})
|
|||
set(ST-FLASH_SOURCES src/st-flash/flash.c src/st-flash/flash_opts.c)
|
||||
set(ST-INFO_SOURCES src/st-info/info.c)
|
||||
set(ST-UTIL_SOURCES src/st-util/gdb-remote.c src/st-util/gdb-server.c src/st-util/semihosting.c)
|
||||
set(ST-TRACE_SOURCES src/st-trace/trace.c)
|
||||
|
||||
if (MSVC)
|
||||
# Add getopt to sources
|
||||
|
@ -241,20 +242,24 @@ endif ()
|
|||
add_executable(st-flash ${ST-FLASH_SOURCES})
|
||||
add_executable(st-info ${ST-INFO_SOURCES})
|
||||
add_executable(st-util ${ST-UTIL_SOURCES})
|
||||
add_executable(st-trace ${ST-TRACE_SOURCES})
|
||||
|
||||
if (WIN32 OR APPLE)
|
||||
target_link_libraries(st-flash ${STLINK_LIB_STATIC} ${SSP_LIB})
|
||||
target_link_libraries(st-info ${STLINK_LIB_STATIC} ${SSP_LIB})
|
||||
target_link_libraries(st-util ${STLINK_LIB_STATIC} ${SSP_LIB})
|
||||
target_link_libraries(st-trace ${STLINK_LIB_STATIC} ${SSP_LIB})
|
||||
else ()
|
||||
target_link_libraries(st-flash ${STLINK_LIB_SHARED} ${SSP_LIB})
|
||||
target_link_libraries(st-info ${STLINK_LIB_SHARED} ${SSP_LIB})
|
||||
target_link_libraries(st-util ${STLINK_LIB_SHARED} ${SSP_LIB})
|
||||
target_link_libraries(st-trace ${STLINK_LIB_SHARED} ${SSP_LIB})
|
||||
endif ()
|
||||
|
||||
install(TARGETS st-flash DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
install(TARGETS st-info DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
install(TARGETS st-util DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
install(TARGETS st-trace DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
|
||||
|
||||
###
|
||||
|
|
|
@ -0,0 +1,143 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <stdbool.h>
|
||||
#include <getopt.h>
|
||||
|
||||
#include <stlink.h>
|
||||
#include <logging.h>
|
||||
|
||||
|
||||
#define DEFAULT_LOGGING_LEVEL 50
|
||||
#define DEBUG_LOGGING_LEVEL 100
|
||||
|
||||
#define APP_RESULT_SUCCESS 0
|
||||
#define APP_RESULT_INVALID_PARAMS 1
|
||||
|
||||
|
||||
struct _st_settings_t
|
||||
{
|
||||
bool show_help;
|
||||
bool show_version;
|
||||
int logging_level;
|
||||
int core_frequency_mhz;
|
||||
bool reset_board;
|
||||
char* serial_number;
|
||||
bool wait_sync;
|
||||
};
|
||||
typedef struct _st_settings_t st_settings_t;
|
||||
|
||||
|
||||
static void usage(void) {
|
||||
puts("st-trace - usage:");
|
||||
puts(" -h, --help Print this help");
|
||||
puts(" -V, --version Print this version");
|
||||
puts(" -vXX, --verbose=XX Specify a specific verbosity level (0..99)");
|
||||
puts(" -v, --verbose Specify a generally verbose logging");
|
||||
puts(" -cXX, --clock=XX Specify the core frequency in MHz");
|
||||
puts(" -n, --no-reset Do not reset board on connection");
|
||||
puts(" -sXX, --serial=XX Use a specific serial number");
|
||||
puts(" -a, --no-sync Do not wait for a sync packet");
|
||||
}
|
||||
|
||||
bool parse_options(int argc, char** argv, st_settings_t *settings) {
|
||||
|
||||
static struct option long_options[] = {
|
||||
{"help", no_argument, NULL, 'h'},
|
||||
{"version", no_argument, NULL, 'V'},
|
||||
{"verbose", optional_argument, NULL, 'v'},
|
||||
{"clock", required_argument, NULL, 'c'},
|
||||
{"no-reset", no_argument, NULL, 'n'},
|
||||
{"serial", required_argument, NULL, 's'},
|
||||
{"no-sync", no_argument, NULL, 'a'},
|
||||
{0, 0, 0, 0},
|
||||
};
|
||||
int option_index = 0;
|
||||
int c;
|
||||
|
||||
settings->show_help = false;
|
||||
settings->show_version = false;
|
||||
settings->logging_level = DEFAULT_LOGGING_LEVEL;
|
||||
settings->core_frequency_mhz = 0;
|
||||
settings->reset_board = true;
|
||||
settings->serial_number = NULL;
|
||||
settings->wait_sync = true;
|
||||
|
||||
while ((c = getopt_long(argc, argv, "hVv::c:ns:a", long_options, &option_index)) != -1) {
|
||||
switch (c) {
|
||||
case 'h':
|
||||
settings->show_help = true;
|
||||
break;
|
||||
case 'V':
|
||||
settings->show_version = true;
|
||||
break;
|
||||
case 'v':
|
||||
if (optarg) {
|
||||
settings->logging_level = atoi(optarg);
|
||||
} else {
|
||||
settings->logging_level = DEBUG_LOGGING_LEVEL;
|
||||
}
|
||||
break;
|
||||
case 'c':
|
||||
settings->core_frequency_mhz = atoi(optarg);
|
||||
break;
|
||||
case 'n':
|
||||
settings->reset_board = false;
|
||||
break;
|
||||
case 's':
|
||||
settings->serial_number = optarg;
|
||||
break;
|
||||
case 'a':
|
||||
settings->wait_sync = false;
|
||||
break;
|
||||
case '?':
|
||||
return false;
|
||||
break;
|
||||
default:
|
||||
printf("ERROR: Unknown command line option: '%c' (0x%02x)\n", c, c);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (optind < argc) {
|
||||
while (optind < argc) {
|
||||
printf("ERROR: Unknown command line argument: '%s'\n", argv[optind++]);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
st_settings_t settings;
|
||||
|
||||
if (!parse_options(argc, argv, &settings)) {
|
||||
usage();
|
||||
return APP_RESULT_INVALID_PARAMS;
|
||||
}
|
||||
|
||||
/* if (settings.logging_level >= UDEBUG) */
|
||||
printf("show_help = %s\n", settings.show_help ? "true" : "false");
|
||||
printf("show_version = %s\n", settings.show_version ? "true" : "false");
|
||||
printf("logging_level = %d\n", settings.logging_level);
|
||||
printf("core_frequency = %d MHz\n", settings.core_frequency_mhz);
|
||||
printf("reset_board = %s\n", settings.reset_board ? "true" : "false");
|
||||
printf("serial_number = %s\n", settings.serial_number ? settings.serial_number : "any");
|
||||
printf("wait_sync = %s\n", settings.wait_sync ? "true" : "false");
|
||||
|
||||
if (settings.show_help) {
|
||||
usage();
|
||||
return APP_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
if (settings.show_version) {
|
||||
printf("v%s\n", STLINK_VERSION);
|
||||
return APP_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
return APP_RESULT_SUCCESS;
|
||||
}
|
||||
|
Ładowanie…
Reference in New Issue