Herz 5 14 января, 2012 Опубликовано 14 января, 2012 · Жалоба Да это я Вас запутал, извините. Всё правильно там со сдвигом. Только при работе с портом надо учитывать особенность операций чтение-модификация-запись, а то иногда могут быть сюрпризы, связанные с чтением из порта не того, что туда записано. А Вы не допускаете, что всё зависит от задачи? У ТС, например, совершенно правильно использован оператор присваивания =, а не |=, чтобы "горящий" светодиод двигался по линейке. И, например, для портов AT91SAM7S Ваша запись совершенно бессмысленная, ибо выполняет лишнюю работу по чтению порта :) А для АВРок при настройке оборудования я пользуюсь именно простым присваиванием, чтобы быть уверенным, что в порт попадёт нужное мне значение, а не значение OR неизвестно_что ;) Да, верно, уже сам заметил. :rolleyes: Думал о другом и утратил внимательность... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergey529 0 14 января, 2012 Опубликовано 14 января, 2012 · Жалоба Вроде разобрались :rolleyes: И все-таки, что делать с предупреждением компилятора? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 14 января, 2012 Опубликовано 14 января, 2012 · Жалоба unsigned char array[10]; Компилятор выдает предупреждение pointer targets in passing argument 1 of 'sprintf' differ in signedness. 'может он хочет чтоб был просто char array[10]; ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASDFG123 0 10 мая, 2016 Опубликовано 10 мая, 2016 · Жалоба Подскажите пожалуйста как правильно отображать переменные на lcd типа 1602. Конкретно надо данные с АЦП. Вот примерный урок тут printf и uart, но все равно не понятно как работает. Не понимаю как отображать переменные на экране, вроде как делить по разрядам 1000 100 10 1 (также как на 7сегментниках) затем прибавить 0х30 чтобы превратить в коды. Но чет на практике затык. Также кусок кода из библиотеки которую приделал для вывода на lcd. void lcd_out(char * txt) { while(*txt) { lcd_send(*txt,DATA); txt++; } //////// lcd_out("Hello world"); //////// Контроллер STM32F100RB, coocox ide. Спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 11 мая, 2016 Опубликовано 11 мая, 2016 · Жалоба Если вам понятен пример, который вы привели, тогда как функция printf знает в какой uart выводить символы? Как перенаправить ее вывод на другой uart? Напишите сами свои функции вывода типа как у Чана http://elm-chan.org/fsw/strf/xprintf.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASDFG123 0 16 мая, 2016 Опубликовано 16 мая, 2016 · Жалоба Вообщем частично разобрался. Функция sprintf(buf, "%d", value); вывод на дисплей переменной buf работает. Также работает функция snprintf(buf, buf_size, "%d", value); hd44780_write_string(&lcd, buf); взял из готовой библиотеки для hd44780. но ни то ни то не работает вместе с ADC зависает отладчик на выполнение строчки snprintf именно тогда когда АЦП вместе с ДМА, когда просто readADC1(u8 channel) { ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_1Cycles5); // Start the conversion ADC_SoftwareStartConvCmd(ADC1, ENABLE); // Wait until conversion completion while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); // Get the conversion value return ADC_GetConversionValue(ADC1); } то все показывает как надо. (но при этом в коде с ДМА данные в буфер АЦП записываются корректно и отладчик не виснет) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться