Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Модератор
Аватара пользователя
Сообщения: 19102
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

Мурик писал(а):пример с 8 уровнями приоритетов и это не придел.
ну, это точно не придел, так как ПРИДЕЛ находится в церкви.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

ARV писал(а):80% потребителей необходимы только 20% предлагаемых продавцом возможностей.
Только у каждого потребителя своя часть 20% хотелок (одному одно надо, другому другое), которая может и меняться, потому чем больше заложено в одном типе чипа возможностей, тем он востребованней, значит дешевле и т.д. Теперь осталось как-то это все притянуть к сабжу топика :).
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Чем больше заложено в чипе возможностей, тем больше еррата :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Плюсы без минусов не бывают в этом деле.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="ARV",url="/forum/viewtopic.php?p=3765923#p3765923"]Чем больше заложено в чипе возможностей, тем больше еррата :)[/uquote]
Далеко не всегда. Например, у самого первого и популярного STM32F1 errata на 48 страниц, а у относительного нового STM32F7 она всего 22 страницы, потому что периферия была обкатана на предыдущих сериях мк.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Я еще студентом помню, как из одной страницы текста сделать десять. Обратно проще :)))
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 104
Зарегистрирован: Пн ноя 04, 2019 09:58:29
Откуда: г. Нижний Тагил Свердл. обл.

Сообщение Эйлер Леонард »

Доброго времени суток уважаемые Коты. Поздравсяю всех с Новым годом.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

++
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Грызет канифоль
Аватара пользователя
Сообщения: 275
Зарегистрирован: Вс окт 20, 2019 13:03:56

Сообщение Shuspano »

Добрый день.
Пытаюсь переписать си-шную программу на ассемблере. Си не знаю и понимаю его очень плохо, объясните пожалуйста что значат эти строки

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
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Shuspano писал(а):if((Byte<<i)&0x80)
проверяется i-й бит в Byte на равенство 1. лично я бы за такое канделябром бы...
Shuspano писал(а):return SDA;
функция возвращает значение бита SDA. и за такое бы тоже, но можно не канделябром, а так, ссаной тряпкой...

будете переписывать - не делайте таких глупостей
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 275
Зарегистрирован: Вс окт 20, 2019 13:03:56

Сообщение Shuspano »

Спасибо. Но в чем собственно, глупость?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

глупость для анализа очередного бита каждый раз двигать один и тот же байт на разное число позиций - сильно сомневаюсь, что оптимизатор компилятора это сможет улучшить, а если не сможет - это будет вложенный цикл, абсолютно ненужный.

Добавлено after 33 seconds:
вторая глупость - возвращать нестандартный тип bit
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 275
Зарегистрирован: Вс окт 20, 2019 13:03:56

Сообщение Shuspano »

сделаю наверно так-же, сдвиг аккумулятора влево, и проверка бита переноса. а там - либо пишу палку в SDA, либо не пишу. Почему - на асме это очень просто, и займет десяток байт и пару регистров.
возвращать бит - их есть у меня - флаг в ССП и бит-адресуемая память.
Друг Кота
Аватара пользователя
Сообщения: 7083
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

кстати... не i_тый, а (7-i)_тый :)
глупость, как минимум в том, что это трудно понять... а если весь код так написан... сопьёшься пока разберёшься...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Ivanoff-iv писал(а):не i_тый, а (7-i)_тый
с языка сняли :)
на асме особой проблемы нет, там двигать в перенос можно легко.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 275
Зарегистрирован: Вс окт 20, 2019 13:03:56

Сообщение Shuspano »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3797743#p3797743"]... а если весь код так написан... сопьёшься пока разберёшься...[/uquote]
Ну, там даже для меня понятно, мне надо в основном, это. А весь остальной код меня мало интересует.
Если интересно
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Shuspano, а надо ли вам это "переносить"? Это ж софтовый I2C, одна из функций оного. Уж реализаций нормальных сразу на асме Soft I2C хватает вроде для AVR.
А вообще очень похоже на вот эту реализацию: http://extremeelectronics.co.in/avr-tut ... -avr-mcus/
Только там нормально байт данных просто на 1 влево в цикле каждый раз сдвигается и "выпуливаются" по старшему биту (& 0x80) данные, а не на i бит двигается каждый раз (что бред конечно).

Добавлено after 1 minute 39 seconds:
На всякий случай код аналогичной ф-ии из индусского примера:

Код: Выделить всё

uint8_t SoftI2CWriteByte(uint8_t data)
{
        uint8_t i;

        for(i=0;i<8;i++)
        {
                SOFT_I2C_SCL_LOW;
                Q_DEL;

                if(data & 0x80)
                    SOFT_I2C_SDA_HIGH;
                else
                    SOFT_I2C_SDA_LOW;

                H_DEL;

                SOFT_I2C_SCL_HIGH;
                H_DEL;

                while((SCLPIN & (1<<SCL))==0);

                data=data<<1;
        }

        //The 9th clock (ACK Phase)
        SOFT_I2C_SCL_LOW;
        Q_DEL;

        SOFT_I2C_SDA_HIGH;
        H_DEL;

        SOFT_I2C_SCL_HIGH;
        H_DEL;

        uint8_t ack=!(SDAPIN & (1<<SDA));

        SOFT_I2C_SCL_LOW;
        H_DEL;

        return ack;
}
Чуть лучше имхо будет )
Грызет канифоль
Аватара пользователя
Сообщения: 275
Зарегистрирован: Вс окт 20, 2019 13:03:56

Сообщение Shuspano »

[uquote="NStorm",url="/forum/viewtopic.php?p=3797756#p3797756"]Shuspano, а надо ли вам это "переносить"? Это ж софтовый I2C, одна из функций оного. Уж реализаций нормальных сразу на асме Soft I2C хватает вроде для AVR.
А вообще очень похоже на вот эту реализацию: http://extremeelectronics.co.in/avr-tut ... -avr-mcus/
Только там нормально байт данных просто на 1 влево в цикле каждый раз сдвигается и "выпуливаются" по старшему биту (& 0x80) данные, а не на i бит двигается каждый раз (что бред конечно).[/uquote]
Это не для AVR, это для 8051. У AVR аппаратный I2C есть. Софтовые реализации для 8051 непосредственно на астме - да, тоже есть, и я их уже попробовал. А [url="http://saeedsolutions.blogspot.com/2012 ... 7-rtc.html]этот[/url] пример пошел в протеусе, и есть надежда что получится лучше остальных
Последний раз редактировалось Shuspano Чт фев 27, 2020 11:21:20, всего редактировалось 1 раз.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

еще лучше делать цикл по маске, которую и использовать для выделения бита. отдельная переменная-счетчик в этом случае не нужна, количество телодвижений минимально:

Код: Выделить всё

for(uint8_t mask=0x80; mask; mask >>=1){
  if (Data & mask) ...
}
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

[uquote="Shuspano",url="/forum/viewtopic.php?p=3797760#p3797760"]Это не для AVR, это для 8051. У AVR аппаратный I2C есть.[/uquote]
Не у всех AVR есть. Да и реализация выше в общем-то особо к платформе не привязана.
Ответить

Вернуться в «Разные вопросы по МК»