Вопросы по С/С++ (СИ)
Re: Вопросы по С/С++ (СИ)
Разрешение прерываний внутри прерывания наверное только в древних МК. Нормальный МК должен иметь контроллер прерываний поддерживающий вложенные прерывания и иметь возможность назначать приоритет вложенности. Тогда все действия производятся аппаратно и можно выбрать какие прерывания могут прервать выполняемые на данный момент, а какие будут ожидать своей очереди. Это позволит точно быть уверенным в работе устройства.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
например, любой из семейства MCS51, включая древность типа КР1816ВЕ31Мурик писал(а):Нормальный МК должен иметь контроллер прерываний поддерживающий вложенные прерывания и иметь возможность назначать приоритет вложенности
функционально разрешение прерываний внутри прерывания решает все ничуть не хуже, чем аппаратный контроллер, разве что на нескоько тактов дольше это длится.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Вопросы по С/С++ (СИ)
С ними не работал. Даташит или другую документацию где есть описание контроллера прерываний по быстрому найти не удалось. Так что не могу не подтвердить и не опровергнуть.ARV писал(а):например, любой из семейства MCS51, включая древность типа КР1816ВЕ31
Я не конкретизировал модель МК. У многих имеется подобный контроллер прерываний. Он точно есть в МК с ядром ARM (контроллер встроен в ядро).
У PIC (10, 12, 16) и AVR (тини, меги) вложенные прерывания не поддерживаются.
Во первых, при неправильно расчете прерывания могут выполнятся рекурсивно, что приведет к сбоям. Во вторых, разрешаются все прерывания, а если нужно разрешить только некоторые? Причем не программно выставляя флаги прерываний, а аппаратно выставляя приоритеты вложенности прерываний.ARV писал(а):функционально разрешение прерываний внутри прерывания решает все ничуть не хуже
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
это потому что очень древние МКМурик писал(а):Даташит или другую документацию где есть описание контроллера прерываний по быстрому найти не удалось
2 уровня приоритетов, независимые маски.Мурик писал(а):только в древних МК
если аппаратный контроллер не примет прерывание "при неправильном расчете, сбоев, разумеется не будетМурик писал(а):прерывания могут выполнятся рекурсивно, что приведет к сбоям
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Вопросы по С/С++ (СИ)
Предположим имеются 8 источников прерываний (в реальном проекте их может быть гораздо больше).
Если же нет поддержки вложенных приоритетов прерываний и разрешать другие прерывания при входе в прерывание, может произойти более низкоприоритетное, которое не должно обрабатываться пока выполняется код высокроприоритетного. Контроль придется осуществлять программно, из-за чего усложнится код, увеличится время перехода в высокопроиоритетное прерывание и если произойдет низкоприоритетное, нужно будет думать как вернутся назад в вывокоприоритетное, а после его обработки перейти в низкоприоритетное. Когда таких прерываний десяток другой, разрулить будет не просто.
- 1 - внешнее прерывание, по которому нужно все отключить. Задержка недопустима, иначе электроника потеряет "белый дымок" и это в лучшем случае.
- 2 - внешнее прерывание которое нужно обработать с минимальной задержкой.
- 3 - прерывание от USART. Задержка не должна превышать времени поступления нового байта.
- 4 - прерывание от USB. Некоторая задержка допустима, но она приведет к снижению скрости обмена.
- 5 - прерывание от DMA. Некоторая задержка допустима.
- 6 - внешнее прерывание. Допустима задержка 1 мс.
- 7 - прерывание от таймера. Задержка допустима.
- 8 - прерывание от встроенного RTC. Допустима задержка до 1 секунды.
Если же нет поддержки вложенных приоритетов прерываний и разрешать другие прерывания при входе в прерывание, может произойти более низкоприоритетное, которое не должно обрабатываться пока выполняется код высокроприоритетного. Контроль придется осуществлять программно, из-за чего усложнится код, увеличится время перехода в высокопроиоритетное прерывание и если произойдет низкоприоритетное, нужно будет думать как вернутся назад в вывокоприоритетное, а после его обработки перейти в низкоприоритетное. Когда таких прерываний десяток другой, разрулить будет не просто.
- Starichok51
- Модератор
- Сообщения: 19045
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Вопросы по С/С++ (СИ)
ну, а кто тебе мешает в обработчике высокоприоритетного прерывания не ставить разрешение прерываний? не ставь - и оно не прервется.
ставь только в низкоприоритетном - и пусть оно прерывается другим прерыванием.
ставь только в низкоприоритетном - и пусть оно прерывается другим прерыванием.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: Вопросы по С/С++ (СИ)
А если больше одного приоритета? Выше пример с 8 уровнями приоритетов и это не придел. Может быть больше.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
"Может быть" не равно "обязательно потребуется". Изобилие хорошо, но не самоцель. Случаи, когда это изобилие действительно необходимо, пожалуй, единичны, а когда оно вообще не востребовано, имхо, подавляющи.
Все это неоднократно было сказано во множестве тем: 80% потребителей необходимы только 20% предлагаемых продавцом возможностей.
Все это неоднократно было сказано во множестве тем: 80% потребителей необходимы только 20% предлагаемых продавцом возможностей.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Starichok51
- Модератор
- Сообщения: 19045
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Вопросы по С/С++ (СИ)
ну, это точно не придел, так как ПРИДЕЛ находится в церкви.Мурик писал(а):пример с 8 уровнями приоритетов и это не придел.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Вопросы по С/С++ (СИ)
Только у каждого потребителя своя часть 20% хотелок (одному одно надо, другому другое), которая может и меняться, потому чем больше заложено в одном типе чипа возможностей, тем он востребованней, значит дешевле и т.д. Теперь осталось как-то это все притянуть к сабжу топикаARV писал(а):80% потребителей необходимы только 20% предлагаемых продавцом возможностей.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Чем больше заложено в чипе возможностей, тем больше еррата 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Вопросы по С/С++ (СИ)
Плюсы без минусов не бывают в этом деле.
Re: Вопросы по С/С++ (СИ)
[uquote="ARV",url="/forum/viewtopic.php?p=3765923#p3765923"]Чем больше заложено в чипе возможностей, тем больше еррата
[/uquote]
Далеко не всегда. Например, у самого первого и популярного STM32F1 errata на 48 страниц, а у относительного нового STM32F7 она всего 22 страницы, потому что периферия была обкатана на предыдущих сериях мк.
Далеко не всегда. Например, у самого первого и популярного STM32F1 errata на 48 страниц, а у относительного нового STM32F7 она всего 22 страницы, потому что периферия была обкатана на предыдущих сериях мк.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Вопросы по С/С++ (СИ)
Я еще студентом помню, как из одной страницы текста сделать десять. Обратно проще 
- Эйлер Леонард
- Встал на лапы
- Сообщения: 104
- Зарегистрирован: Пн ноя 04, 2019 09:58:29
- Откуда: г. Нижний Тагил Свердл. обл.
Re: Вопросы по С/С++ (СИ)
Доброго времени суток уважаемые Коты. Поздравсяю всех с Новым годом.
Re: Вопросы по С/С++ (СИ)
Добрый день.
Пытаюсь переписать си-шную программу на ассемблере. Си не знаю и понимаю его очень плохо, объясните пожалуйста что значат эти строки
1. if((Byte<<i)&0x80)
2. return SDA;
в этой функции:
Пытаюсь переписать си-шную программу на ассемблере. Си не знаю и понимаю его очень плохо, объясните пожалуйста что значат эти строки
1. if((Byte<<i)&0x80)
2. return SDA;
в этой функции:
Код: Выделить всё
bit I2C_Write_Byte(unsigned char Byte)
{
unsigned char i; // Variable to be used in for loop
for(i=0;i<8;i++) // Repeat for every bit
{
Set_SCK_Low; // Make SCK pin low
__delay_us(HalfBitDelay/2); // Data pin should change it's value,
// when it is confirm that SCK is low
if((Byte<<i)&0x80) // Place data bit value on SDA pin
Set_SDA_High; // If bit is high, make SDA high
else // Data is transferred MSB first
Set_SDA_Low; // If bit is low, make SDA low
__delay_us(HalfBitDelay/2); // Toggle SCK pin
Set_SCK_High; // So that slave can
__delay_us(HalfBitDelay); // latch data bit
}
// Get ACK from slave
Set_SCK_Low;
Set_SDA_High;
__delay_us(HalfBitDelay);
Set_SCK_High;
__delay_us(HalfBitDelay);
return SDA;
}- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
проверяется i-й бит в Byte на равенство 1. лично я бы за такое канделябром бы...Shuspano писал(а):if((Byte<<i)&0x80)
функция возвращает значение бита SDA. и за такое бы тоже, но можно не канделябром, а так, ссаной тряпкой...Shuspano писал(а):return SDA;
будете переписывать - не делайте таких глупостей
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Вопросы по С/С++ (СИ)
Спасибо. Но в чем собственно, глупость?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
глупость для анализа очередного бита каждый раз двигать один и тот же байт на разное число позиций - сильно сомневаюсь, что оптимизатор компилятора это сможет улучшить, а если не сможет - это будет вложенный цикл, абсолютно ненужный.
Добавлено after 33 seconds:
вторая глупость - возвращать нестандартный тип bit
Добавлено after 33 seconds:
вторая глупость - возвращать нестандартный тип bit
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
