/* * Print.c * * Created on: Aug 19, 2024 * Author: DashyFox */ #include "Print.h" void print(char *str) { unsigned int size = 0; while (str[size] != '\0') { size++; } CDC_Transmit_FS((unsigned char*) str, size); } void int_to_str(int number, char *str, int base) { static const char digits[] = "0123456789ABCDEF"; char buffer[32]; char *ptr = buffer + sizeof(buffer) - 1; int is_negative = 0; if (number < 0 && base == 10) { is_negative = 1; number = -number; } *ptr = '\0'; do { *--ptr = digits[number % base]; number /= base; } while (number); if (is_negative) { *--ptr = '-'; } // Дополнение ведущим нулем для шестнадцатеричных чисел if (base == 16 && (buffer + sizeof(buffer) - 1 - ptr) == 1) { *--ptr = '0'; } strcpy(str, ptr); } void printNumber(long int number) { char buffer[BUFFER_SIZE]; // Преобразование числа в строку int_to_str(number, buffer, 10); // 10 — это основание системы счисления (десятичная система) // strcat(buffer, "\r\n"); // Добавление новой строки // Отправка строки через USB CDC CDC_Transmit_FS((uint8_t*) buffer, strlen(buffer)); } void printHexBuffer(uint8_t *buffer, uint16_t size) { char hex_str[3 * size + 3]; // Строка для хранения шестнадцатеричных значений (2 символа на байт, пробелы и переносы строк) int index = 0; for (uint16_t i = 0; i < size; i++) { // Преобразуем каждый байт в шестнадцатеричный формат index += sprintf(&hex_str[index], "%02X ", buffer[i]); // Добавляем перенос строки после каждых 8 байт if ((i + 1) % 32 == 0) { hex_str[index++] = '\n'; } else if ((i + 1) % 8 == 0) { hex_str[index++] = ' '; } } // Добавляем два переноса строки в конце hex_str[index++] = '\n'; hex_str[index++] = '\n'; hex_str[index] = '\0'; // Завершаем строку символом конца строки // Отправляем строку через UART (CDC) CDC_Transmit_FS((uint8_t*) hex_str, strlen(hex_str)); }