Учитывая цену китайских ардуин, их можно лепить столько на сколько хватит фантазии.
Учитывая цену китайских ардуин, их можно лепить столько на сколько хватит фантазии.
вот помню давеча лепил на даче как раз такой модуль стробов и как раз для дачной АФАР - ну, сами понимаете, без АФАР на даче сущая беда! тут на форуме каждые 99 из 100 этим озабочены, а вообще в интернете - их миллиарды!VladislavS писал(а):к примеру, формирователь стробов для АФАР делаешь
я так понимаю, написать 100500 строк кода - это и есть оптимальность с вашей точки зрения? а с моей - чем меньше энергии затрачено, тем лучше. энергосбережение, блин - модный, кстати, трендVladislavS писал(а):Но если я знаю как одно и то же действие сделать оптимально и неоптимально, почему я должен выбирать второе?
смешное оправдание бессмысленной работы. почему-то СТАНДАРТ С++ обновляется чаще, чем успевают все ознакомиться с ним, а тут речь о библиотеке, которая пирамиды египетские переживетVladislavS писал(а):Это код библиотеки. Он пишется один раз. Его надо написать наилучшим способом.
это да. вот, к слову, жена меня так и пилит: когда АФАР сделаешь, когда АФАР сделаешь? сделал вот давеча - снова пилит: когда джиттер до наносекундного интервала доведешь, когда джиттер доведешь? все ей вынь да положь "вчера"VladislavS писал(а):Обычно срок стоит "вчера"
а еще модно мужикам в юбках и на шпильках ходить. вы ходите? ведущие дома моды рекомендуют - не отставайте от моды!VladislavS писал(а):А ведь сейчас даже ёлочными свистоперделками модно с мобильника управлять.
это все ровно до момента, когда встретится неподдерживаемый этой библиотекой чип - и тогда придется делать все то же самое, что и раньше. т.е. ничего не поменяется. но времени на эту сверхуниверсальную (на самом деле нет) либу вы потратили столько, что я успел бы спиться, если бы все это время в сутки по 1 бутылке пива выпивал бы. особенно если учесть, что для её написания надо освоить (и следить за обновлениями) С++... и ради чего?VladislavS писал(а):Вот она и скорость разработки и переносимость!
я понимаю и принимаю данный аргумент, когда применяю attiny13 с 512 словами программы и 64 байтами ОЗУ. я не понимаю и не принимаю этот аргумент, если взят МК, в котором от оптимальности кода судьба проекта практически не зависит.VladislavS писал(а):Если в результате получается более оптимальный код, чем от одной строки, то да.
ну да, главное - чтобы МК было легче, а себя жалеть зачем?VladislavS писал(а):А у меня другой подход
просто стало понятно, почему так следите за модойVladislavS писал(а):А даже если и хожу, это как к данной теме относится?
ладно, раз уж мы перешли на ты, скажу, что ты сам ничего не понял. в моем исходном посыле от "нижнего" уровня остались только макросы дряганья пинами, а все остальное - как раз и было "надстройкой верхнего уровня". ты благополучно прозевал этот момент. фишка в том, что ногами может дрыгать ЛЮБОЙ МК, а аппаратная поддержка есть не у любого, и тем более она не одинакова. по этой причине моя (на самом деле чужая) либа переживет твою, ибо в ней НИЧЕГО, кроме двух (ладно, четырех - еще настройка направления) макросов менять не придется НИКОГДА ДЛЯ ЛЮБОГО МК, которые будут выпущены в ближайшие 1000 лет. и чем тогда твоя либа лучше? тем, что вместо двух (ладно - четырех!) макросов тебе надо править 100500 шаблонов и т.п. классов?!VladislavS писал(а):Ну ты опять ничего не понял.
ты предлагаешь освоить профессиональный инструмент, чтобы потом кодить любительские поделки? уволь - я в своё время отказался от изучения С++ только за одно то, что это кошмар нерожденного. кстати, Java по той же причине меня не привлекла. паскаль ругают за многословность - но та многословность, что требует С++/Java и рядом не стояла с паскалевской! хаос из кнтекстно-зависимого нагромождения символов - это не любительский подход.VladislavS писал(а):Всё с точностью до наоборот.
так и я о том же - всему своё место. на симпозиуме гуру - место гурских либ, на форуме любителей - не местоVladislavS писал(а):Ну это просто от непонимания.
и что с того? если код размером в 100 байт уменьшить до 10 байт - много ли это принесет пользы при общем количестве этих самых доступных байт в 64000?VladislavS писал(а):А на форуме попадаются такие фрагменты кода, которые можно оптимизировать на порядок (да, да в 10 и более раз!!!)
неужели ты писатель, а не читатель? когда я беру в руки новый МК, я даже не читаю про его аппаратный модуль I2C - он не требуется мне для моей либыVladislavS писал(а):Зато когда ты видишь I2C в описании микросхемы тебя бросает в пот
я готов спорить, что это требует даже для такого профи, как ты, не менее часа на чтение документации и на выходе будет БОЛЬШЕ пары строк. вот сейчас могу взять твою либу из твоих примеров, открыть её, и там на работу с регистрами модуля I2C будет больше двух строк - я говорю это еще не видев твоего кода.VladislavS писал(а):я просто интересуюсь в какой регистр записать/считать данные и делаю это парой строк
для меня в случае с I2C только этим все и ограничивается. я так специально всё устроил в своей практикеVladislavS писал(а):Если бы всё ограничивалось дрыганьем ногами
в attiny13 тоже заработает?VladislavS писал(а):Я же показал тот же 24Сxx, которому по барабану где работать
ну и посмотри, во что превратился форум благодаря таким супербизонам...VladislavS писал(а):На этот форум заглядывают такие супербизоны, что я просто дошколёнком себя чувствую
я бы тоже - но много времени отнимает РАБОТА, поэтому для меня не все так плохоVladislavS писал(а): Я бы умер, если бы 20 лет занимался только AVR
Код: Выделить всё
#pragma once
namespace ADT7410
{
template<typename TI2C, uint32_t num>
class TADT7410
{
public:
TADT7410(){}
static _inline_ bool Read_1gradlsb(int8_t *data)
{
uint8_t tmp[2];
if( TI2C::ReadReg(hw_adr,(uint8_t)0x00, tmp, (uint8_t)2) )
{
*data = Convert2Grad((tmp[0]<<8) + tmp[1]);
return true;
}
else return false;
}
private:
//Преобразовать считанное значение в целые градусы
static _inline_ int8_t Convert2Grad(uint16_t x)
{
if(x&0x8000)
return ((x>>3)-8192)>>4; //Отрицательная температура
else
return x>>7; // Положительная температура
}
static_assert(num<4,"Only 0...3 ADT7410 numbers");
static constexpr uint8_t hw_adr = 0x90 + ((num&0x3)<<1);
};
} //namespace ADT7410
Код: Выделить всё
#include "i2c_F0.h"
#include "ADT7410.h"
I2C::TI2C<(uint32_t)I2C1,I2C::I2CTiming::SysCLK_100kHz>::Init();
I2C::TI2C<(uint32_t)I2C2,I2C::I2CTiming::SysCLK_100kHz>::Init();
using T0 = ADT7410::TADT7410<I2C::i2c1,0>;
using T1 = ADT7410::TADT7410<I2C::i2c1,1>;
using T2 = ADT7410::TADT7410<I2C::i2c1,2>;
using T3 = ADT7410::TADT7410<I2C::i2c1,3>;
using T4 = ADT7410::TADT7410<I2C::i2c2,0>;
using T5 = ADT7410::TADT7410<I2C::i2c2,1>;
using T6 = ADT7410::TADT7410<I2C::i2c2,2>;
using T7 = ADT7410::TADT7410<I2C::i2c2,3>;
int8_t T[8];
T0::Read_1gradlsb(&T[0]);
T1::Read_1gradlsb(&T[1]);
T2::Read_1gradlsb(&T[2]);
T3::Read_1gradlsb(&T[3]);
T4::Read_1gradlsb(&T[4]);
T5::Read_1gradlsb(&T[5]);
T6::Read_1gradlsb(&T[6]);
T7::Read_1gradlsb(&T[7]);а все почему? потому что в споре ты лукавишь, как наперсточникVladislavS писал(а):Всё быстрее, чем я тут на форуме спорю
и класс этот, чтобы понять, надо иметь уровень знания С++ ну хотя бы в половину твоего, что далеко не всем доступно. мне, например, потребуется немало времени, чтобы просто понять, что к чему. а уж чтобы свой вариант "быстренько набросать" - и подавноVladislavS писал(а):простенький класс на один экран кода.
я вот сколько ни пытался понять, так и не смог: почему USART в работе прост, а I2C - сложен? я как раз про аппаратную реализацию говорю. при том, что реализация без аппаратуры - примитивна до одури. думаю, в продвинутых МК типа ARM сложность аппаратной реализации еще выше...BOB51 писал(а):Аппаратные модули обычно оставляю на экстренные нужды.
[/uquote]Тупо считать регистр с температурой из одного датчика заняло бы действительно пару строк. Но я же забочусь о себе, мне потом с этими датчиками работать. Поэтому лучше сразу сделать по фэншую.VladislavS писал(а):простенький класс на один экран кода.
ну опять не лги уж... чтобы аппаратный модуль I2C заработал, тебе пары строк будет мало - если уж на чтение регистра надо двеVladislavS писал(а):Тупо считать регистр с температурой из одного датчика заняло бы действительно пару строк
с тинькой все так - речь о твоей либе на все случаи жизни и на все векаVladislavS писал(а):А что не так с тинькой?
ну что ты доказал? что умеешь делать классами то, что я делаю без оных? только классами получается в 2 раза длиннее и в 4 раза сложнее.VladislavS писал(а):Зато есть классы, которым благодаря определённому интерфейсу с нижним уровнем по барабану на каком контроллере работать.