Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 28.02.2016, 22:16  
Sergey_57
Вид на жительство
 
Регистрация: 12.12.2012
Сообщений: 365
Сказал спасибо: 31
Сказали Спасибо 204 раз(а) в 112 сообщении(ях)
Sergey_57 на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Здравствуйте, Знатоки! Хотел узнать о такой беде.

Цитата:
››› Warning 216 "E:\RusBITex\ISM-modem\Radio_Modem\$linker.c" Line 5(8,14): Interrupts disabled during call to prevent re-entrancy: (spi_Write_ISM)
››› Warning 216 "E:\RusBITex\ISM-modem\Radio_Modem\$linker.c" Line 5(8,14): Interrupts disabled during call to prevent re-entrancy: (spi_Read_IN_
Выключаются прерывания на время этих фунций. По коду смотрел
действительно так. Последствия этой беды минимизировал.
Они сами выполняются в прерыванииях.
Код:
void spi_Write_ISM(unsigned char buffer_VIV1,unsigned char buffer_VIV2 )
и 
unsigned char spi_Read_IN_8(void)
Связано со значениями передаваеммые в функцию и принимаемым из функции.

Это везде так? или я чегото не знаю?
Реклама:
Sergey_57 вне форума  
Непрочитано 29.02.2016, 04:20  
sedojkot
Частый гость
 
Регистрация: 08.11.2009
Сообщений: 18
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
sedojkot на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Сообщение от Old_Monster Посмотреть сообщение
Я пишу MPLABе, там же компилю, переключаюсь в протеус и запускаю отладку.. Вы по другому это делаете?
У меня Прот 7 был средством Debug в Mplab8 и запускался автоматически после компиляции, можно было проводить построчную отладку, просматривая результат в Проте. В МПлабX и Прот8 аналогично, но запуск надо делать командой Debug и отладка не лучше, с заморочками (возможно не всё знаю или настроил).
sedojkot вне форума  
Непрочитано 29.02.2016, 12:49  
sedojkot
Частый гость
 
Регистрация: 08.11.2009
Сообщений: 18
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
sedojkot на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Сообщение от Sergey_57 Посмотреть сообщение
Хотел узнать о такой беде.
Обработка прерывания не закончилась, но опять вызывается то же прерывание. Сократите время обработки прерывания, уберите из него всё, что можно убрать в основной цикл. Оставьте только необходимое. Вместо вызова функции в прерывании просто переключите флаг, а обработку флага - в основной цикл.
sedojkot вне форума  
Сказали "Спасибо" sedojkot
Sergey_57 (19.03.2016)
Непрочитано 29.02.2016, 17:46  
Sergey_57
Вид на жительство
 
Регистрация: 12.12.2012
Сообщений: 365
Сказал спасибо: 31
Сказали Спасибо 204 раз(а) в 112 сообщении(ях)
Sergey_57 на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Спасибо , Вы меня надоумили.
Никак не мог толком перевести фразу
Цитата:
prevent re-entrancy:

Компьютерная программа в целом или её отдельная процедура называется реентера́бельной (от англ. reentrant — повторно входимый), если она разработана таким образом, что одна и та же копия инструкций программы в памяти может быть совместно использована несколькими пользователями или процессами. При этом второй пользователь может вызвать реентерабельный код до того, как с ним завершит работу первый пользователь и это как минимум не должно привести к ошибке, а при корректной реализации не должно вызвать потери вычислений (то есть не должно появиться необходимости выполнять уже выполненные фрагменты кода).

Беду понял, но у меня так и было как вы описываете.
Но основное тело расползлось до 8к.А модем надо читать сразу.
Это приоритетная задача. Вот и пришлось в прерывании вставлять чтение.

Теперь осознал - но с другой стороны, я попал внутрь прерывания выполняю задачу , а запреты меня не беспокоят.
Буду думать, конечно.
Спасибо.
Sergey_57 вне форума  
Непрочитано 29.02.2016, 18:27  
sedojkot
Частый гость
 
Регистрация: 08.11.2009
Сообщений: 18
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
sedojkot на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Когда-то сталкивался с подобным. Если надо читать из прерывания, попробуйте читать один символ в буфер и сразу возвращаться, а после выхода из всех прерываний обрабатывать прочитанное, но в этом случае мы ограничены размером памяти для буфера и надо писать свой обработчик прерывания приёмника-геморрой. С многопользовательскими задачами не сталкивался. Возможно, поможет установка приоритета прерываний.
Сообщение от Sergey_57 Посмотреть сообщение
А модем надо читать сразу.
Это приоритетная задача. Вот и пришлось в прерывании вставлять чтение.
Может не надо вставлять чтение в прерывании, оно тоже выполняется через прерывание, может лучше контролировать принимаемые данные, а компилятор сам разберётся с приоритетом.
sedojkot вне форума  
Непрочитано 01.03.2016, 21:12  
Sergey_57
Вид на жительство
 
Регистрация: 12.12.2012
Сообщений: 365
Сказал спасибо: 31
Сказали Спасибо 204 раз(а) в 112 сообщении(ях)
Sergey_57 на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Всё , что Вы пишете имеет место.
Но вот незадача Еле уложил радиомодем в 4 мс пакет.
И ещё 9 абонентов на этой же частоте передают свои пакеты.
(Строго по времени через 5 мс каждый. №аб*5 мс)
И надо непрерывно контролировать поток , чтобы не пропустить синхропакет от центрального пульта.Пришёл к выводу читать придётся только в прерывании. Потому как это ещё завязано на высоко скоростную видео камеру.
Sergey_57 вне форума  
Непрочитано 02.03.2016, 02:39  
sedojkot
Частый гость
 
Регистрация: 08.11.2009
Сообщений: 18
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
sedojkot на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Серьёзная задача. Единственное что пришло по поводу - увеличить частоту процессора до максимума возможно поможет. Успехов.
sedojkot вне форума  
Непрочитано 02.03.2016, 21:38  
Sergey_57
Вид на жительство
 
Регистрация: 12.12.2012
Сообщений: 365
Сказал спасибо: 31
Сказали Спасибо 204 раз(а) в 112 сообщении(ях)
Sergey_57 на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Задача которая ставилась достаточно проста с виду.
Но когда влез просто ужаснулся. Деваться особенно было некуда ,
с Москвы выперли за несговорчивость(бесплатная работа).
Теперь всё позади. Прошёл 2 этапа сдачи.
В нескольких устройствах накатал на 25к.Работает как часы.
Заняты почти все прерывания по входу, все таймеры и последовательный порт. И всё равно не хватило, пришлось некоторые функции делать
вложенными в друг-друга. 18F2520. Согласен что нужно было
переходить на 33 или 24. Но был ряд условий и задача казалась не сложной.
Да и 16 разрядов и более высокое быстродействие упиралось в небольшую
скорость модема.20кбод и выше начинаются ошибки. Их исправлять нет физического времени.
Сроду столько не писал.
И в заключение Спасибо всем за советы
Именно потому CCS хорош, что можно прийти на форум после бессоной ночи и спросить. Это как попробовать забить гол последней надежды.

И чтобы не устраивать тайны Мадридского двора....
Это стрелковый тренажёр. В такт опроса подсвечвают ИК-лазером.
На экране сценарий. Видеокамера с фильтром 713нм и 200 кадров сек
видит в каждом кадре лазер только одного абонента.Даже если все выстрелят одновременно система всё распознает и определит с экстраполяцией координаты всех попаданий. Загрузка патронов и осечек при стрельбе производится руководителем с комп.
Вложения:
Тип файла: rar Радио-модем-2.rar (80.3 Кб, 107 просмотров)
Sergey_57 вне форума  
Непрочитано 12.03.2016, 13:33  
katalianin
Частый гость
 
Регистрация: 25.08.2006
Сообщений: 18
Сказал спасибо: 24
Сказали Спасибо 5 раз(а) в 3 сообщении(ях)
katalianin на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Нужен совет, появился у меня ультразвуковой датчик HC-SR04. Взял стандарный простой пример: http://www.ccsinfo.com/forum/viewtop...ghlight=hcsr04
Всё работает только подвисает часто.
Использовал более сложный пример с (INT_CCP1)
#include ‹hc-sr04.h›
#define HC_SR04_TRIGGER_PIN PIN_B1
#define HC_SR04_ECHO_PIN PIN_C2
#define FE 0
#define RE 1
unsigned int16 rise_cnt,fall_cnt,pulse_width_cnt,cm; //вырезал in
int8 ccp_mode;

#int_CCP1
void CCP1_isr(void)
{
if (ccp_mode==RE){
rise_cnt = CCP_1;
ccp_mode=FE;
setup_ccp1(CCP_CAPTURE_FE);

}
else {
fall_cnt = CCP_1;
if (fall_cnt›=rise_cnt) pulse_width_cnt = fall_cnt - rise_cnt;
else pulse_width_cnt = 65536+fall_cnt - rise_cnt;

ccp_mode=RE;
setup_ccp1(CCP_CAPTURE_RE);
}
}

unsigned int16 HC_SR04_RangeRaw()
{
unsigned int16 value;
value=0;
pulse_width_cnt=0;
output_low(HC_SR04_TRIGGER_PIN);
delay_us(10);
set_timer1(0);
ccp_mode=RE;
setup_ccp1(CCP_CAPTURE_RE);

//// trigger measurement
output_high(HC_SR04_TRIGGER_PIN);
delay_us(10);
output_low(HC_SR04_TRIGGER_PIN);

delay_ms(40); //// allow CCP interrupt to see both edges of max pulse=38ms
//// pulse_width_cnt is in 2us units

value=pulse_width_cnt;
return value;

}
int16 HC_SR04_RangeInches(unsigned int16 gRng_Raw)
{unsigned int16 inches;
inches=gRng_Raw/74;
return inches;
}

int16 Inches_To_cm(unsigned int16 gRng_Raw)
{unsigned int16 cmm;
cmm=(gRng_Raw*2.54)/74;
return cmm;
}
void serv()
{
unsigned int16 serva=((cm-*100)+800;
if(serva‹800) serva=800;
if(serva›2200 || cm‹=3 ) serva=2200;
for(int8 tmp=0; tmp‹20; ++tmp){
output_high(pin_B4);
delay_us(serva);
output_low(pin_B4);
delay_ms(20);
}

}


void HC_SR04_setup() {
setup_timer_1(T1_INTERNAL|T1_DIV_BY_;//start 2us per inc timer
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);
}
void main(){
HC_SR04_setup();
while(TRUE)
{
HC_SR04_RangeRaw();
//in= HC_SR04_RangeInches(pulse_width_cnt);//TODO: User Code
cm= Inches_To_cm(pulse_width_cnt);
serv();
delay_ms(250);
}
}
Подвисание реже происходит но убрать подвисание не смог, при работе НС-SR04 создаёт еле слышное пошёлкивание, при подвисании он молчит самое неприятное при остановки дебага рабочая точка на инициализации кварца стоит и не видно причин.
katalianin вне форума  
Непрочитано 12.03.2016, 15:16  
lisergin
Прописка
 
Регистрация: 29.01.2005
Адрес: Киев
Сообщений: 227
Сказал спасибо: 50
Сказали Спасибо 32 раз(а) в 24 сообщении(ях)
lisergin на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Конфиг камня покажите.
Сообщение от katalianin Посмотреть сообщение
при остановки дебага рабочая точка на инициализации кварца стоит и не видно причин.
WDT?
И юзайте тег "[CODE]", если, конечно, интересует результат.
__________________
Невежество всегда на что-нибудь испражняется.

Последний раз редактировалось lisergin; 12.03.2016 в 15:19. Причина: CODE
lisergin вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
i2c+ccs pic Gladkih Микроконтроллеры, АЦП, память и т.д 9 18.04.2016 22:17
PIC BASIC PRO Compiler 2.47 dosikus Proteus, KiCAD и другие ECAD 27 05.12.2009 05:48
изучение IAR AVR C compiler granel Микроконтроллеры, АЦП, память и т.д 0 10.10.2008 20:45
PIC C Compiler PCWH458 sergxxx Микроконтроллеры, АЦП, память и т.д 9 23.09.2008 18:25
Не включается дебаггер в CCS C Compiler BigMazzi Микроконтроллеры, АЦП, память и т.д 4 19.09.2008 13:34


Часовой пояс GMT +4, время: 06:52.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot