Доброе утро. Помогите с проблемой, которая, кажется, ставит меня в тупик. К МК подключен дисплей, для дисплея есть библиотека, функции которой работают со строками. Мне надо (для начала) вывести на дисппей показания с аналогового входа. На основе стандартной реализации функции из книги К&R написал следующий код: Код (C++): uint8_t buffer[12] = "Hello"; uint32_t num = 356; void reverse(uint8_t s[]) { uint8_t i; uint8_t j; uint8_t c; for (i = 0, j = 11; i < j; i++, j--) { c = s[i]; s[i] = s[j]; s[j] = c; } } void utoa(uint32_t n, uint8_t s[]) { uint8_t i = 0; do { s[i++] = n % 10 + '0'; } while ((n /= 10) > 0); s[i] = '\0'; reverse(s); } int main() { led1 = 1; lcd.SetFont(&Font12); lcd.Clear(LCD_COLOR_BLACK); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_GREEN); lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"Hello World!!!", CENTER_MODE); wait(1); while(1)a { if (button1) { lcd.Clear(LCD_COLOR_BLACK); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_GREEN); utoa(num, buffer); lcd.DisplayStringAt(0, LINE(5), buffer, CENTER_MODE); } else { lcd.Clear(LCD_COLOR_BLACK); } led1 = !led1; wait(0.2); } } Но почему то не работает функция reverse(). При нажатии на кнопку на дисплее отображается "653", причем если убрать функцию reverse() из функции utoa() то на результат это не влияет. Подскажите советом.
Вариант: Код (C++): void reverse(uint8_t s[]) { uint8_t i; uint8_t j; uint8_t c; for (i = 0, j = strlen(s); i < j; i++, j--) { c = s[i]; s[i] = s[j]; s[j] = c; } } Но лучше вместо "велосипедов" 'utoa' и 'reverse' воспользоваться: Код (C++): if (button1) { lcd.Clear(LCD_COLOR_BLACK); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_GREEN); snprintf(buffer, 12, "%u", num); // преобразование числа в строку lcd.DisplayStringAt(0, LINE(5), buffer, CENTER_MODE); } else { lcd.Clear(LCD_COLOR_BLACK); }
МБ функция reverse принимает в качестве аргумента копию строки s[], а на исходную строку не воздействует. Возможно стоит использовать ссылку reverse(uint8_t &s[]). Хотя не буду настаивать, т.к. не разу не видел такой передачи массива в качестве аргумента.