Перейти к содержанию
    

Написать библиотеку для карты памяти micro Sd

25 минут назад, haker_fox сказал:

Жуть) У нас так в конторе тоже раньше писали) Лапша из разного кода

Значит, не умеете писать автоматы.

Код, в котором есть goto и, тем более, while - это г-код в стилистике ардуинщиков.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29 minutes ago, bzx said:

Значит, не умеете писать автоматы.

Значит, не умеете применять ОСРВ, если пишете автоматы.

29 minutes ago, bzx said:

Код, в котором есть goto и, тем более, while - это г-код в стилистике ардуинщиков.

Вы ничего не перепутали? Без goto иногда трудно обойтись, например в обработчике прерывания или просто в коде, который должен выполниться быстро. Вы мир ПК и встраиваемых систем не мешайте. А вы как без while пишете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

40 minutes ago, haker_fox said:

Значит, не умеете применять ОСРВ, если пишете автоматы.

Вы ничего не перепутали? Без goto иногда трудно обойтись, например в обработчике прерывания или просто в коде, который должен выполниться быстро. Вы мир ПК и встраиваемых систем не мешайте. А вы как без while пишете?

while без дополнительных конструкций, обеспечивающих таймаут подзволяет зависнуть на неопределенное время в цикле, если в условии стоит ожидание чего-то внешнего.
Конечно конструкции типа while(--i) вряд ли могут быть опасными, но я и их обычно пишу как for(;i;--i) 

goto годится как выход их вложенного for, все равно в ассемблере он таким и будет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, Lelikk said:

while без дополнительных конструкций, обеспечивающих таймаут подзволяет зависнуть на неопределенное время

Воот! И зачем все эти трудности, искуственно привносимые КА, если можно взять вытесняющую ОС (пусть даже и не РВ, хотя это относительно)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, smart_pic сказал:

Не мой целевой проц, поэтому не берусь. А так в ТЗ не вижу ничего не выполнимого.

Если не Ваш, то откуда у Вас исходники?  :wink2: 

Скрытый текст
Цитата


//*********************************************************************************
	while (1)
		{
		WDTCONSET = _WDTCON_WDTCLR_MASK; // Service the WDT

		Relay_Control();
		Test_Power();
		Test_Temperatura();
		Scenariy();
		Prioritet_Logic();
		PowerSceneAlgoritm();
		// мигание СД при выполнении сценария
		if ((is_scene ==1)||(PS_State!=PS_wait) && (ROM_ledset4=='1')) WR_ShiftReg(Panel_LEDS,'1');
      		else WR_ShiftReg(Panel_LEDS,'0');

		// выполняем программы ТСР стека
		ScanKeyboard();
		StackTask();
		HTTPServer();			//программы стека
		FTPServer();			// FTP сервер
		UDPPerformanceTask();	// UDP передача пакетов
		UDPRecvTask();			// UDP прием пакетов
		TCP_Control_Task();		// ТСР соединение для  управления 
		TCP_Cloud_Task();		// ТСР соединение с облаком 
		UART3B_Conyrol();
		PingProc();
		// Два раза в секунду обновляем индикатор
		if(TickGet() - t > TICK_SECOND/2 )
			{
			t = TickGet();
			if (ROM_ledset1=='1' ){LED_WORK^=1; LED_POWER=1;}
			else {LED_WORK=1; LED_POWER=0;}
			}
	
		// Один раз в секунду читаем часики
		if(TickGet() - Trtc > TICK_SECOND )
			{
			SystemReset();
			Trtc = TickGet();
			i2cReadTime();
			Raspisanie();
			Kalibrator();
			EnergyMeter();
			}
		}
	return 0;
}
// END MAIN  ****************************************

 

 

Внимание вопрос: Если в таком суперлупе например HTTP-серверу (или FTP или ещё кому) пришёл большой объект данных, который нужно обработать как единый объект (например: выполнить текстовый парсинг с разбором типа JSON-сообщения или выполнить его декодирование (AES, аппаратной криптографии в МК нет) или посчитать хеш или сделать упаковку/распаковку если сжато). А если и то и другое и третье подряд?

И при этом необходима быстрая реакция на какие-то короткие простые команды по другим интерфейсам: UART, UDP, да хотя-бы даже - клавиатура (например там у вас энкодер опрашивается), или скажем - необходимо быстро отреагировать на превышение какого-то порога по токовому датчику.

Как будете выкручиваться из такой ситуации? :umnik2:  А если ещё нужно на LCD-индикаторе большие картинки рисовать в это же время. :dash2:

 

Другой вопрос: Вот нужно например какому-то из этих процессов (HTTP, FTP и т.п.) выплюнуть в лог приличный объём данных, скажем - пришёл некий бинарный объект, размером с пару КБ, нужно его содержимое распечатать в текст (получится уже например около 10-20КБ) и выплюнуть в канал лога (UART). И опять-же - при этом не положить остальные процессы и не сожрать для одной этой элементарной операции >10КБ ОЗУ. Сам процесс при этом не очень интерактивный, юзеру не нужно получить результат за миллисекунды - может подождать.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

49 minutes ago, haker_fox said:

...если можно взять вытесняющую ОС...

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

 

(круглый)
ЗЫ
И гототу в сях - это нонсенс :) (имхо конечно же)

Изменено пользователем kolobok0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, jcxz said:

Если не Ваш, то откуда у Вас исходники?  :wink2: 

  Reveal hidden contents

 

Как будете выкручиваться из такой ситуации? :umnik2:  А если ещё нужно на LCD-индикаторе большие картинки рисовать в это же время. :dash2:

 

А мозги на что?

Не мой целевой проц, поэтому не берусь. А так в ТЗ не вижу ничего не выполнимого. === В смысле я пишу под PIC32, а ТС нужен другой проц.

Эта линейка http://cvg.ru/tovar_list/diga/

на PIC32 реализована. Поэтому знаю все вдоль и поперек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, haker_fox сказал:

Вы ничего не перепутали? Без goto иногда трудно обойтись, например в обработчике прерывания или просто в коде, который должен выполниться быстро. Вы мир ПК и встраиваемых систем не мешайте. А вы как без while пишете?

За ~20 лет профессионального писания на си как для embedded, так и для ПК, я не написал ни одного(!) goto.  :wink2:

6 минут назад, smart_pic сказал:

А мозги на что?

Ну так примените. Коли есть. И объясните. :wink2:

6 минут назад, smart_pic сказал:

на PIC32 реализована. Поэтому знаю все вдоль и поперек.

Так расскажите нам - КАК? Раз "реализована".

И какая разница - какое ядро? Или PIC умеет на аппаратном уровне организовывать несколько вычислительных потоков? :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, jcxz said:

я не написал ни одного(!) goto

Сомнительное достижение. И как рекомендуете действовать в ситуации (C):

int func()
{
  int err = 0;
  <нагребли ресурсов>
  <100500 строк>
  if(обосрались)
  {
    err = <код ашипки>;
    goto exit_err;
  }
  <тут еще 100500 строк>
exit_err:
  <освободили ресурсы>
  return err;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 минут назад, aaarrr сказал:

Сомнительное достижение. И как рекомендуете действовать в ситуации (C):

int err;
while (1) {
  занятие_ресурсов
  err = код_ошибки1;
  break;
  ...
  err = код_ошибки2;
  break;
  ...
}    
обработка_ошибки:
освобождение_ресурсов

PS: Я никого не призываю так делать и не агитирую. Просто отметил, что так тоже бывает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

56 minutes ago, kolobok0 said:

Если для задачи не требуется развитие, кол-во конкурирующих событий не так велико

Читайте внимательно, что я писал) Именно это! Но я также не понимаю этих пустых заявлений от некоторых некомпетентных "ось жрёт время", "ось тормозит процессы", "ось не учит использовать железо на 100%". По мне так хоть линейно одной функцией пишут. Но это всё-таки форум, и здесь происходит обмен знаниями. Считаю, что вправе высказать свою точку зрения. А я начинал в далёком 2003 году на pic16f84 думаете с оси?))))

58 minutes ago, kolobok0 said:

И гототу в сях - это нонсенс :) (имхо конечно же)

goto есть в языке? Есть! Использовать можно? Можно! С умом (как и любые другие операторы)? Да. С умом и используем)

57 minutes ago, smart_pic said:

А мозги на что?

На то, чтобы отказаться от извращений (если не мазохист), и взять нормальный инструмент, который сделает вам то, что нужно.

59 minutes ago, smart_pic said:

Эта линейка http://cvg.ru/tovar_list/diga/

на PIC32 реализована. Поэтому знаю все вдоль и поперек.

Теперь вы дали АНТИРЕКЛАМУ целому ряду продуктов)

57 minutes ago, jcxz said:

За ~20 лет профессионального писания на си как для embedded, так и для ПК, я не написал ни одного(!) goto.  :wink2:

Я написал, не более двух за всю свою деятельность) Конечно же давно ознакомлен с тем, что применять его, мягко говоря, следует редко.

47 minutes ago, aaarrr said:

И как рекомендуете действовать в ситуации (C):

Если можно использовать Си++, то можно применить класс, а в деструкторе освобождать все ресурсы. При этом выйти из функции можно в любом месте. Но иногда не очень удобно заводить класс для каждого чиха.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

haker_fox

Поздравляем с 5000 записью.

Пусть их будет меньше , но лучше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, smart_pic said:

Пусть их будет меньше , но лучше.

Это вы себе желайте с вашим-то рейтингом и историей на форуме. А я о своём количестве позабочусь сам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, jcxz said:

PS: Я никого не призываю так делать и не агитирую

Чудовищно. Ну хоть бы do {} while(0);

 

54 minutes ago, haker_fox said:

Если можно использовать Си++,

Вот нельзя. Специально написал из вредности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...