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

 
 
> Проблемы с оптимизацией в WinAVR
Skaf
сообщение Nov 1 2009, 09:46
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Всем привет.

С тех пор как мои проекты стали немного сложнее Hello World испытываю проблемы с программированием на WinAVR.

Из-за его оптимизатора программа изменяется на столько, что часто просто не работает. Я слышал про такие тонкости, что если подпрограмма не возвращает значения (если она void) то она может и выкинуться из выполнения вообще. Вот хотелось бы узнать про все такие тонкости, чтобы иметь возможность писать программы нормально. Или придется уходить на ассемблер. Никто не знает где почитать про это дело?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Skaf
сообщение Nov 1 2009, 10:02
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Код
struct StatusStruct {
    volatile unsigned char RXbusy;
    volatile unsigned char TXbusy;
    unsigned char RXbuffer[15];
    unsigned char TXbuffer[15];
    unsigned char DataForSend[15];
    unsigned char RXdataSize;
    unsigned char TXdataSize;
    unsigned char RXcurrentByte;
    unsigned char TXcurrentByte;

    unsigned char ADCrawData[20];

    unsigned char ConversionChannel;
    unsigned char ConversionType; // 1 - All; 2 - One

    unsigned char DataForSendSize;
    unsigned char DataCurrentSendByte;

} Status;

......
.....

ISR(USART_RXC_vect){

    unsigned char Rbyte, ByteCount;

    volatile unsigned char  a;

    Rbyte = UDR;
    
    if (Status.RXcurrentByte < 15){
        Status.RXbuffer[Status.RXcurrentByte] = Rbyte;
        Status.RXcurrentByte++;

        a = Status.RXbuffer[Status.RXcurrentByte-2];

        if ((Rbyte == 0xBC) && (a==0xBB)){
            ByteCount = Status.RXcurrentByte-1;
            Status.RXcurrentByte = 0;
            DecodeFrame(ByteCount);
        }
    } else {
        Status.RXcurrentByte = 0;
    }
    
}


Во-первых в Wach про переменную a сказано Location not valid. Пока она не была volatile при отладке он просто перескакивал через строку

a = Status.RXbuffer[Status.RXcurrentByte-1];
А сейчас не перескакивает, но толку мало. в а все равно ничего не появляется и

if ((Rbyte == 0xBC) && (a==0xBB)){

всегда дает ложь. Причем реально данные в

Status.RXbuffer[Status.RXcurrentByte] = Rbyte;

записываются. Это видно в окошке Memory (Data) данные там действительно появляются.

структура Status объявлена глобально.

Сообщение отредактировал Skaf - Nov 1 2009, 10:02
Go to the top of the page
 
+Quote Post
xemul
сообщение Nov 1 2009, 14:35
Сообщение #3



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(Skaf @ Nov 1 2009, 13:02) *
...

Не изобретайте велосипед - на прием/передачу заведите кольцевые буферы.
В прерывании по RX, имхо, кроме записи принятого байта в буфер, модификации указателя головы буфера и, может быть, взведения флажка приёма новых данных ничего делать не стОит.
Цитата
структура Status

похожа на сборную солянку.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Skaf   Проблемы с оптимизацией в WinAVR   Nov 1 2009, 09:46
- - AHTOXA   Для начала пройдитесь поиском по форуму по ключево...   Nov 1 2009, 09:52
- - Огурцов   Цитата(Skaf @ Nov 1 2009, 09:46) С тех по...   Nov 1 2009, 09:54
|- - AHTOXA   Цитата(Skaf @ Nov 1 2009, 15:02) Во-первы...   Nov 1 2009, 10:29
- - Skaf   ЦитатаПравильно сказано. Изначально Status.RXcurre...   Nov 1 2009, 10:46
|- - AHTOXA   Цитата(Skaf @ Nov 1 2009, 15:46) Это на п...   Nov 1 2009, 11:17
- - baralgin   Skaf Как уже сказали необходимо исключить ситуации...   Nov 1 2009, 12:39
- - Skaf   Убрал пока эту конструкцию. Но в Watch и переменн...   Nov 1 2009, 13:54
|- - _Pasha   Цитата(Skaf @ Nov 1 2009, 17:54) Но в Wat...   Nov 1 2009, 15:40
- - sigmaN   Кстати, да. Watch будет показывать всё и вся тольк...   Nov 1 2009, 23:06
- - Skaf   ЦитатаНо практика показала, что Эта привычка с Per...   Nov 2 2009, 07:13
- - XVR   Отключите оптимизации и включите отладочнцю информ...   Nov 2 2009, 09:40
|- - _Pasha   Цитата(XVR @ Nov 2 2009, 12:40) Отключите...   Nov 2 2009, 09:53
- - sigmaN   Да да. Шагать ТОЛЬКО при выключенной оптимизации. ...   Nov 2 2009, 13:35


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 11:36
Рейтинг@Mail.ru


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