|
|
  |
while(!(UCSR0A & b01000000)); |
|
|
|
Jun 11 2010, 11:36
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 11-06-10
Пользователь №: 57 870

|
продолжу вопрос если можно: а строка Цитата while(!(UCSR0A & b01000000)); подразумевает использование прерывания чтобы установился этот самый флаг завершения передачи? И можно ли как-то без него обойтись....
Сообщение отредактировал SatMinistry - Jun 11 2010, 11:37
|
|
|
|
|
Jun 12 2010, 07:45
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 11-06-10
Пользователь №: 57 870

|
вопрос просто перенесли из другой ветки. там было про посылку символа в уарт....это строка ожидания пока не установится флаг завершения передачи....прерываний я уже понял что нет тут никаких...просто я не мог понять а что сбрасывает этот флаг....а сбрасывает его по видимому строка UCSR0A = b01000000 - вычитал что вот так странно сделано что надо записать 1 чтобы сбросить флаг. Верно?
|
|
|
|
|
Jun 16 2010, 17:36
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 11-06-10
Пользователь №: 57 870

|
Я с работы уже уходил не успевал скинуть. Завтра приведу в точности а памяти конструкция следующая:
char sbuf[100];
void func(char *format, ...) { va_list pa; va_start(format, pa); vsprintf(sbuf, pa, format ); va_end(format, pa); //и тут в цикле for этот самый sbuf через работающую ф-цию выводится в уарт через объявление указателя и его приращение... но железо перезапускается на строке vsprintf(sbuf, pa, format ); я так понимаю потому что т.к. функция вывода одного символа в компорт работает я понаставлял вывод символа после каждой строки и последним выводится символ перед этой строкой и заново выводится сначала вкруговую со старта программы откуда я сделал вывод что контроллер тупо ресетится... }
завтра приведу нормально текст и сам вызов чтобы можно было конкретно о чем-то говорить. PS А пока если можно ткните в какую сторону впринципе почитать про отладку программ в иар на нашенском если есть....
Сообщение отредактировал SatMinistry - Jun 16 2010, 17:37
|
|
|
|
|
Jun 17 2010, 07:30
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 11-06-10
Пользователь №: 57 870

|
вот как это выглядит на самом деле  : Код char s1buf[100];
void MYTX_printf(const char *format, ...) { DEBUG_TX('r'); va_list ap; DEBUG_TX('i'); va_start(ap, format); DEBUG_TX('t'); vsprintf(s1buf,format,ap); DEBUG_TX('e'); va_end(ap); DEBUG_TX('m'); for(char *uk = s1buf; *uk; uk++) { DEBUG_TX('y'); DEBUG_TX(*uk); DEBUG_TX('G'); } } Код void DEBUG_TX(unsigned char bt) { UCSR0A= (1<<6); //UCSR0A= b01000000; UDR0=bt; while(!(UCSR0A & (1<<6))); //while(!(UCSR0A & b01000000)); } И вызов этого дела происходит следующим образом: Код MYTX_printf((char *) "**** Software LAGs - OK\r\n"); ЗЫ Ситуация в общем такая что мне дали готовую плату устройства чтоб я с ней поковырялся и поучился....но что там на что может влиять я себе пока не представляю в общем-то...там и память внешняя навешана и много всякого разного....меня же пока интересует только запуск мк и его уарт. но что-либо проверяю физической прошивкой т.к. не знаю пока в чем это делать программно и при этом понятно начинающему....
Сообщение отредактировал rezident - Jun 18 2010, 02:41
Причина редактирования: Оформление цитат исходников.
|
|
|
|
|
Jun 17 2010, 13:04
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(SatMinistry @ Jun 17 2010, 10:30)  UCSR0A= (1<<6); //UCSR0A= b01000000;
чтоб я с ней поковырялся и поучился... Чтобы вы поучились, как не нужно писать программы. Сколько стека вы выделили программе? Зачем вы константную строку приводите к неконстантному char *? Тем самым вы разрешаете функции изменять (намеренно или случайно) эту строку. Но для константной строки это бессмысленно. Тем более что прототип функции указывает, что ожидается const char *. Зачем же здесь приведение? Также почитайте описание компилятора на предмет ключевого слова __flash и посмотрите в листинге, где расположена ваша строка "**** Software LAGs - OK\r\n" - в ОЗУ или во флешь. Тогда будем двигаться дальше.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 17 2010, 13:59
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 11-06-10
Пользователь №: 57 870

|
Вызов уже поменял на Цитата MYTX_printf("Software LAGs - OK\r\n"); с приведением то осталось с попыток использовать для задачи иаровскую заморочку _formatted_write_P. и там же использовалось флеш.....а тут я флеш нигде не пишу..... От убирания приведения правда ничего вообще не поменялось....замечание по поводу пинов я понял я просто пока хочу разобраться в примитивном виде с идеями и как они работают и исправил так как первое пришло в голову (в коде большого проекта который дали к плате было то что закомментено но оно не компилилось по понятным причинам в созданном новом проекте), а то что так писать не нужно понимаю... Стек в опциях проэкта посмотрел стоял 0х20 байт и 16 левелов. После увеличения значений все стало работать совершенно иначе. прога уже доходит до своего основного бесконечного цикла судя по диоду и крутится в нем, а в терминале посылаемая строка.  ЗЫ: я пробовал запускать дебаггер в ИАРе но при попытки просмотра какой-то страницы кроме СОDE он наглухо вис.... ЗЫ2: а что значит посмотреть в листинге куда строка пишется?
Сообщение отредактировал SatMinistry - Jun 17 2010, 14:05
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|