реклама на сайте
подробности

 
 
7 страниц V  « < 3 4 5 6 7 >  
Reply to this topicStart new topic
> WinAVR-20080610, делимся впечатлениями
haker_fox
сообщение Aug 1 2008, 03:13
Сообщение #61


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(mdmitry @ Jul 31 2008, 20:26) *
2 MrYuran и haker_fox
как я понимаю, студия именно смотрит наличие установленного winavr и цепляется к нему. Полностью согласен,что русские буквы и пробелы в именах путь к потенциальным (и не только) несовместимости и ошибкам.
Надежнее конечно руками все прописать, а еще надежнее самому сделать makefile. Я сам студио не использую, не нравится, когда за меня makefile автоматически делается и из кусков к тому же. У меня eclipse+winavr. Для симулирования иногда студия запускается на проект, собранный make.

Я тоже студию не использую для своих нужд. Работаю со связкой GCC (для разных арихтектур) + CodeBlocks. Makefile пишу сам по шаблонам. Отладка через консоль и подобные вещи.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
namelos
сообщение Aug 18 2008, 13:44
Сообщение #62


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Доброе время суток, уважаемые.
Возникла проблема при переходе с WinAVR-20070525 на WinAVR-20080512. При компиляции появляется предупреждение, что атрибут PROGMEM проигнорирован.
Цитата
../menu.h:17: warning: ignoring attributes applied to 'struct <anonymous>' after definition

на код
Код
typedef struct
{
  //const char* ptr_item;// pointer to item name
  const char item_name[20];// string
  ptr_function select_function; // function pointer at enter/escape
  uint8_t ent_f; // ID menu item to enter
  uint8_t esc_f; // ID menu item to escape
}Menu PROGMEM;

Из-за этого память данных раздувается с 50 байт то 850.
В чем может быть проблема?
Заранее спасибо
Go to the top of the page
 
+Quote Post
kurtis
сообщение Aug 18 2008, 14:27
Сообщение #63


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Попробуйте так
Код
typedef struct
{
  //const char* ptr_item;// pointer to item name
  const char item_name[20];// string
  ptr_function select_function; // function pointer at enter/escape
  uint8_t ent_f; // ID menu item to enter
  uint8_t esc_f; // ID menu item to escape
}Menu;

Menu Menu_Item PROGMEM;
Go to the top of the page
 
+Quote Post
namelos
сообщение Aug 18 2008, 14:36
Сообщение #64


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



kurtis, спасибо большое , помогло.
Go to the top of the page
 
+Quote Post
Tracer
сообщение Sep 11 2008, 19:04
Сообщение #65


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 31-10-05
Пользователь №: 10 350



Вот нарвался на странность
Прописываю свой тип данных - структуру. Об'являюуказатели на этот тип.
Код

typedef struct
    {
     uint8_t status;                //Status
     uint8_t R_index;                //Read index
     uint8_t W_index;                //Write index
     uint8_t buffer[MAXBUFFER];
    }RINGBUFFER;


volatile RINGBUFFER *Rx,*Tx;


Компилирую (без оптимизации)- все ОК, НО!!!!!!!! В Студии вижу полную "лажу" Мало того, что компилятор разместил экземпляры типа структуры в регистрах Так еще и они (эти два экземпляра) - одно и тоже - т.е при записи в Rx->buffer пишется также и в Tx->buffer - извечный вопрос. ЧТО ДЕЛАТЬ? :о)

PS Может тупо "дать по рукам" компилятору и поставить
Код
volatile RINGBUFFER *Rx,*Tx __attribute__ ((section (".data")));


?

Сообщение отредактировал Tracer - Sep 11 2008, 19:22
Go to the top of the page
 
+Quote Post
aesok
сообщение Sep 11 2008, 19:35
Сообщение #66


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(Tracer @ Sep 11 2008, 23:04) *
Вот нарвался на странность


Приведите больше кода, как вы работаете с указателемя, как выделяете память под структуры.

Анатолий.
Go to the top of the page
 
+Quote Post
Tracer
сообщение Sep 11 2008, 19:58
Сообщение #67


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 31-10-05
Пользователь №: 10 350



Цитата(aesok @ Sep 11 2008, 22:35) *
Приведите больше кода, как вы работаете с указателемя, как выделяете память под структуры.

Анатолий.


Спасибо, ЭТО Я ТУПЛЮ. Действительно объявил указатели и БОЛЬШЕ НИЧЕГО.
Пошел учить матчасть :о)


Все поправил
Объявляю теперь так
Код
volatile RINGBUFFER Rx,Tx;

Все встало на места и находится там где надо

Еще один вопрос
Есть функция
Код
void rb_flush(RINGBUFFER *rb)
{
cli();
rb->R_index=0;
rb->W_index=0;
rb->status=EMPTYBUFFER;
sei();
}


Вызываю ее так
Код
void main(void)
{
...
rb_flush(&Rx);
...
}


Компилятор ругается - но не сильно А всетаки, что ему не нравится?
Код
../rb.c:63: warning: passing argument 1 of 'rb_flush' discards qualifiers from pointer target type
../rb.c:64: warning: passing argument 1 of 'rb_flush' discards qualifiers from pointer target type
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 11 2008, 20:50
Сообщение #68


Гуру
******

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



Цитата(Tracer @ Sep 11 2008, 22:58) *
Компилятор ругается - но не сильно А всетаки, что ему не нравится?
void rb_flush(volatile RINGBUFFER *rb)
Но вы хорошенько подумайте, нужен ли вам volatile для всего буфера? Возможно, достаточно объявить с volatile только индексы и статус?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Tracer
сообщение Sep 11 2008, 21:12
Сообщение #69


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 31-10-05
Пользователь №: 10 350



Цитата(Сергей Борщ @ Sep 11 2008, 23:50) *
void rb_flush(volatile RINGBUFFER *rb)
Но вы хорошенько подумайте, нужен ли вам volatile для всего буфера? Возможно, достаточно объявить с volatile только индексы и статус?

1. БОЛЬШОЕ спасибо.
2. Подумаю, Но без volatile в дизасемблере просто "окровения от GCC". Я такой код хрен бы писал какой он генерит. Но может я еще не достиг нужных высот для понимания Великой идеи :0)

Сообщение отредактировал Tracer - Sep 11 2008, 21:13
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Sep 12 2008, 04:13
Сообщение #70


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(Tracer @ Sep 12 2008, 01:12) *
2. Подумаю, Но без volatile в дизасемблере просто "окровения от GCC". Я такой код хрен бы писал какой он генерит. Но может я еще не достиг нужных высот для понимания Великой идеи :0)

Вы хотите сказать, что корректный С-код компилируется в неверную программу? Можете привести полный пример?
Go to the top of the page
 
+Quote Post
Tracer
сообщение Sep 12 2008, 19:01
Сообщение #71


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 31-10-05
Пользователь №: 10 350



Цитата(Непомнящий Евгений @ Sep 12 2008, 07:13) *
Вы хотите сказать, что корректный С-код компилируется в неверную программу? Можете привести полный пример?

Проверил В этой версии все ОК.

В версии WinAVR 20071221 переменная ms_delay хранилась в регистре при прервании пушалась - изменялась-попалась - т.е ничего не менялось. Вот в этом примере.
Код
#include <stdint.h>
#include <avr/interrupt.h>

uint16_t ms_delay=0;

ISR(TIMER0_OVF_vect)
{
    if(ms_delay)ms_delay--;

}

void my_delay(uint16_t msd)
{
    ms_delay=msd;
    while(ms_delay){}
}

void main(void)
{
    cli();
    TCCR0=0x03;
    TCNT0=0x83;
    TIMSK=0x01;
    sei();
    DDRB =0xff;
    while(1)
               {
     PORTB=0xff;
     my_delay(1000);
     PORTB=0x00;
     my_delay(1000);
    }


При объявлении ее volatile все заработало.
Я с тех пор глобальные переменные - объявляю типа volatile.

Сообщение отредактировал Tracer - Sep 12 2008, 19:04
Go to the top of the page
 
+Quote Post
aesok
сообщение Sep 12 2008, 19:08
Сообщение #72


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(Tracer @ Sep 12 2008, 23:01) *
Я с тех пор глобальные переменные - объявляю типа volatile.


avr-libc-user-manual FAQ#1

Анатолий.
Go to the top of the page
 
+Quote Post
Tracer
сообщение Sep 12 2008, 19:27
Сообщение #73


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 31-10-05
Пользователь №: 10 350



Цитата(aesok @ Sep 12 2008, 22:08) *
avr-libc-user-manual FAQ#1

Анатолий.

Да да именно мой случай.
Ну кто же читет Факи в доках, пока не поморочит себе изрядно голову :о))
Теперь то я уже ЭТО знаю.
Go to the top of the page
 
+Quote Post
timex
сообщение Sep 25 2008, 10:44
Сообщение #74


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 27-04-05
Из: Воронеж
Пользователь №: 4 541



Добрый день!

У меня WinAVR 20080512 + AVR Studio 4.14 выдаёт предупреждение

Код
../main.c:890: warning: passing argument 2 of 'eeprom_write_block' makes pointer from integer without a cast


на последнюю строку в этом примере:
Код
#define EEPROM_SENSOR2_ADR  0x078 // адрес хранения номера датчика
unsigned char current_sensor_code[8];    //текущий код датчика

...

eeprom_busy_wait();
eeprom_write_block (current_sensor_code, EEPROM_SENSOR2_ADR, 8);


(функции - из eeprom.h того же WinAVR'a)

т.е. ему не нравится то, что указатель на адрес записан в явном виде (конктетный адрес в EEPROM), хотя всё работает.

как мне можно записать указатель на адрес ЕЕПРОМ чтобы компилятор не выдавал предупреждение? Можно ли при этом не расходовать RAM для хранения указателя?
Или может существует какой-нибудь ключ для отмены выдачи предупреждения такой записи указателя?
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Sep 25 2008, 10:56
Сообщение #75


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



ну напишите руками приведение к тому типу, который ожидает eeprom_write_block - примерно так:
eeprom_write_block (current_sensor_code, EEPROM_SENSOR2_ADR, (char*)8);
Go to the top of the page
 
+Quote Post

7 страниц V  « < 3 4 5 6 7 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 01:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01512 секунд с 7
ELECTRONIX ©2004-2016