Я пытаюсь отправить данные printf на мое устройство uart
. Я правильно написал write_r() funciton.newlib printf ошибка функции
Проблемы, которые я имею,
- Когда я говорю
printf(" My name is sam \n I am fine ");
- и в следующий раз, когда я говорю
printf(" I am back ");
первая проблема: Я могу видеть только " Меня зовут Сэм ", затем курсор переходит к следующей строке и останавливается там.
вторая проблема: «Я вернулся» не получает напечатанный на всех.
Я попытался удалить \n
, но 2 printf
не распечатывается. Нет ничего плохого в игре uart
.
Похоже, что получено \
Указатель потерян.
Мой код
int write(int file, char *ptr, int len) {
#if !defined(OUT_8)
#define OUT_8(p,d) (*(volatile char *)(p) = (char)(d))
#endif
#if !defined(IN_8)
#define IN_8(p) ((*(volatile char *)(p)))
#endif
OUT_8(DUART1_UMCR1, 0x02); //Informs external modem or peripheral that the UART is ready for sending data
OUT_8(DUART1_ULCR1, 0x03);
OUT_8(DUART1_UIER1, 0x0f);
OUT_8(DUART1_UFCR1, 0x8f);
OUT_8(DUART1_UTHR, '\n');
OUT_8(DUART1_UTHR, '\r');
while (ptr!=NULL)
{
if (*ptr=='\n') // JUST A TRY to avoid \n bug
{
OUT_8(DUART1_UTHR, '\n');
wait();
*ptr++;
*ptr++;
OUT_8(DUART1_UTHR, *ptr++); // \n & \r when given through printf isNot working
wait();
}
OUT_8(DUART1_UTHR, *ptr++); // \n & \r when given through printf is not working
wait(); // TODO:
if(len==0)
break;
else
len--;
}
OUT_8(DUART1_UMCR1, 0x00); // say that modem is not not ready. Connection over
OUT_8(DUART1_UFCR1, 0x87);
OUT_8(DUART1_ULCR1, 0x00); // Clear all the interrupts ! virtually shut the UART port
errno = ENOSYS;
return -1;
}
Я думаю, когда вы даете printf («некоторый текст \ n другой текст»), * ptr никогда не получает '\ n', он получает '\' и 'n' отдельно, так как ввод представляет собой строку. Вам нужно обработать это исключительно чем-то вроде: if (* ptr == '\' && * (ptr + 1) == 'n') – Dipto
Весь 'if (* ptr == '\ n') {. ..}, конечно, не нужно. – chux
@ Dipto Да, я пробовал, его не работало. – Sumanth