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

 
 
> I2C LPC2xxx
GetSmart
сообщение Sep 25 2009, 16:51
Сообщение #1


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Есть исходник, работающий через I2C с термометром. Тестирую его без FreeRTOS - работает стабильно и долго. Запускаю Ось - глючит сильно, и иногда работает. I2C работает через прерывание. Компилятор CW. Под Осью оно описано так:
Код
void vI2C_ISR_Wrapper( void )
{
    /* Save the context of the interrupted task. */
    portSAVE_CONTEXT();

    /* Call the handler.  This must be a separate function from the wrapper
    to ensure the correct stack frame is set up. */
    vI2C_ISR_Handler();

    /* Restore the context of whichever task is going to run next. */
    portRESTORE_CONTEXT();
}

без оси так:
Код
void vI2C_ISR_Handler( void )
{
    asm("STMDB    SP!,{R0-R12,LR}");        // пролог для IRQ
...
    VICVectAddr = 0;        /* Acknowledge Interrupt */
    asm(    "LDMIA    SP!,{R0-R12,LR}    \n"    // эпиолог для IRQ
        "SUBS    PC,LR,#4    ");
}

Прерывания в обоих случаях внутри обработчиков запрещены. Начинка прерывания была взята из примеров с сайта NXP, хотя немного переделана. Параллельно с работой I2C прерывания работает FIQ с частотой 8 КГц. FIQ работает стабильно под осью и без оси, и на глюки в обоих вариантах (с осью/без) не влияет.

Вопрос: куда копать? Может кто описать особенности "написания программы" под FreeRTOS ? В том смысле, что вот этого например делать нельзя, или на вот это нужно обратить особое внимание, или ещё что-нить. Проект большой, так что выложить бОльшие куски кода пока не могу.

Сообщение отредактировал GetSmart - Sep 25 2009, 17:02


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Sep 25 2009, 23:14
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Грёбаный компилятор CW. Я щас с ума сойду от таких ошибок. Оптимизация = level1

Упс. Там мой косяк. Написал ненароком if (WrIndex >= I2CWriteLength) tmp | 0x01;
А компилер даже не заругался.

Сообщение отредактировал GetSmart - Sep 25 2009, 23:23
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 25 2009, 23:23
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(GetSmart @ Sep 26 2009, 03:14) *
Грёбаный компилятор CW. Я щас с ума сойду от таких ошибок.

Может, сменить/починить инструмент, коли все так запущено?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Sep 25 2009, 23:35
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(aaarrr @ Sep 26 2009, 05:23) *
Может, сменить/починить инструмент, коли все так запущено?

А на что его сменить? Студия-то неплохая, компилятор (внешний, GNU) - ховно.

Цитата(zltigo @ Sep 26 2009, 05:02) *
Да, лабораторная работа, так сказать. Реальный отличается, но не принципиально.

У Вас там не всё гладко. Не формируется NACK на последнем принимаемом байте, из-за этого статуса 0x58 никогда не будет. А если (гипотетически) туда залетит прога, то зачем-то снова START формируется.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 25 2009, 23:40
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(GetSmart @ Sep 26 2009, 03:35) *
А на что его сменить?

На что-нибудь коммерческое. Или нельзя?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Sep 25 2009, 23:44
Сообщение #6


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(aaarrr @ Sep 26 2009, 05:40) *
На что-нибудь коммерческое. Или нельзя?

А есть коммерческий под CW ? Саму студию пока низзя менять.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- GetSmart   I2C LPC2xxx   Sep 25 2009, 16:51
- - HARMHARM   Посмотрите как сделано в примерах, идущих с FreeRT...   Sep 25 2009, 19:50
- - zltigo   Цитата(GetSmart @ Sep 25 2009, 18:51) глю...   Sep 25 2009, 20:01
|- - GetSmart   Цитата(zltigo @ Sep 26 2009, 02:01) Исчер...   Sep 25 2009, 21:28
|- - aaarrr   Цитата(GetSmart @ Sep 26 2009, 01:28) То ...   Sep 25 2009, 21:44
|- - zltigo   Цитата(GetSmart @ Sep 25 2009, 23:28) То ...   Sep 25 2009, 21:55
|- - GetSmart   Цитата(zltigo @ Sep 26 2009, 03:55) Увлеч...   Sep 25 2009, 22:33
|- - zltigo   Цитата(GetSmart @ Sep 26 2009, 00:33) На ...   Sep 25 2009, 23:02
|- - zltigo   Цитата(GetSmart @ Sep 26 2009, 01:35) У В...   Sep 26 2009, 09:25
- - aaarrr   Хм. А в CW есть что-то уникальное?   Sep 25 2009, 23:54
|- - GetSmart   Цитата(aaarrr @ Sep 26 2009, 05:54) Хм. А...   Sep 25 2009, 23:59
- - GetSmart   Спешу обрадовать (ся?) всех. Переписал это левой н...   Sep 26 2009, 05:11
|- - IgorKossak   Цитата(GetSmart @ Sep 26 2009, 08:11) Есл...   Sep 26 2009, 09:39
- - GetSmart   Выкладываю. Причесал его как следует. По объёму те...   Sep 26 2009, 17:11
- - GetSmart   Ещё немного отшлифовал и улучшил. Работает прекрас...   Sep 26 2009, 21:53
- - GetSmart   Много думал... До сих пор непонятно, нужно ли при ...   Sep 27 2009, 21:45
|- - aaarrr   Цитата(GetSmart @ Sep 28 2009, 01:45) До ...   Sep 27 2009, 21:57
- - Qwertty   Из за отсутствия NAK имел проблемы с ds1307 при чт...   Sep 28 2009, 15:53
- - GetSmart   Если кто уже успел опробовать исходники - поделите...   Oct 6 2009, 07:11


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

 


RSS Текстовая версия Сейчас: 21st June 2025 - 20:46
Рейтинг@Mail.ru


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