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

Jozef

На чем писать  

595 проголосовавших

  1. 1. Что чаще используете в разработках?

    • Assembler
      165
    • C
      303
    • Что-то еще
      66


Рекомендуемые сообщения

Фигня это все. Для написания на любом языке нужен алгоритм как вводная задания, а не готовый текст. Тут сначала надо разобраться в пляске мысли, а на это уйдет времени больше, чем на создание сего чуда. Можно сыграть в обратную сторону. Выложить текст на Ассме и предложить повторить его на Си. Причем эта процедура будет иметь еще меньше шансов на успех... А вы все спорите, что лучше? :)

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

Хорошо, в программе реализовано следующее:

Используется ATtiny2313.

На входы компаратора подаётся входное напряжение и опорное напряжение.

Два вывода используются как дискретные входы для задания режимов подачей 0 или 1 с помощью перемычек.

Один вывод выход для управления светодиодом, включение нулём.

Алгоритм работы:

Если вх.напряжение превышает опорное, то ничего не делаем.

Если входное напряжение ниже опорного, то начинаем отсчитывать 1 минуту.

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

Если досчитали до 1-й минуты, то начинаем мигать светодиодом 2 раза в секунду.

Если после этого напряжение станет выше опорного, то мигать не прекращаем, а просто ведём отсчёт в обратную сторону и прекращаем мигать только после достижения нуля.

То есть направление отсчёта времени зависит от состояния компаратора, а переключения мигает/немигает осуществляется в крайних положениях.

состояния перемычек

1, 1 выдержка 1 минута

1,0 выдержка 30 секунд

0,х выдержки нет, реакция мгновенная.

Пока ты жив, надежда есть.

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

А разве кто взялся этим заниматься? У меня своих забот выше крыши (никак не могу взяться за "для души"). Могу сказать вот что. Подготовка периферии в ручную займет времени больше, чем написание алгоритма. Ну нет у меня Attiny, все больше Atmega. Заниматься только ради спора - нужно иметь время свободное.

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

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

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Это называется недостаточная мотивация. Вот студенты какие-нибудь, с радостью подхватили бы кость...

Учение - изучение правил. Опыт - изучение исключений.

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Спор изначально глупый! Во-первых, лучший инструмент тот, которым

хорошо владеешь. Во-вторых, для разных работ нужен и разный инструмент!

Можно и сапкой вскопать 10га, но тех трактористов (с плугом), которые

на этом сильно настаивают, отправляют в дурку! Как и наоборот - прореживать

грядки плугом несколько неудобно. Ассемблерщикам могу сказать так:

- типично, ассемблерщики, например, IARа, получше Вас будут и потому

их оптимизация (вместе с различными методами, которые реализует ЭВМ и тяжело

сделать вручную - например, сквозной на всю программу указатель на все

переменные) дает результат_С_компиляции почти не хуже, а часто и лучше!

- можно за неделю написать пару килобайт, а за пару лет, например стек

TCP/IP, но Ваша семья будет сильно голодная и потомки Вашего подвига

не поймут!

А знать Асм, конечно НУЖНО, как и железо до последнего регистра - и от

этого незнания страдают многие крутые Сишники++++! Но у них свои задачи и,

типично, за них больше платят!

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

Да кто спорит-то?

Пишущие на АСМе бьют себя пяткой в грудь, что лучше ничего и придумать нельзя. Когда я предложил реализовать простенький алгоритм, мною реализованный на Си за очень короткое время, то все крутые писатели на АСМе "сдулись". У них очень много работы, да и вообще, неинтересно.

Интересно сидеть на форуме и строчить посты о крутизне программирования на АСМе.

Ну а по поводу Си-шников, я скажу так, многие из них АСМ знают (потому, что приходится отлаживать программы), но пишут всё равно на Си, потому, что удобнее и быстрее.

Пока ты жив, надежда есть.

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

Незнаю не знаю, я как-то перед новым годом быстренько написал на ассемблере программу "мигалку" на 4 канала с ШИМ и сохраненным паттерном в EEPROMe. По сложности - аналогична предложенной для переделки. Врятли возможно было бы написать аналогичную на Си, которая влезла бы в старичка AT90S1200

Учение - изучение правил. Опыт - изучение исключений.

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

Есть Си для таких "мелких" контроллеров называется ICCtiny, для TinyAVR-ок.

Всячески рекомендую. Ваша задача на нём была бы реализована в течение десяти минут.

Пока ты жив, надежда есть.

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

mazzi, да успокойся ты! :) Нечего доказывать. Никто не спорит, что на Си писАть быстрее (вот только скорость, как говорится, требуется в трех случаях... :D ). Это можно сравнить как панельное домостроение со стандартными проектами и индивидуальное строительство дизайнерского плана. Что под чем, думаю понятно. Стоит отойти от стандартных библиотек и интерфейсов и тыц в проблему. Скорость падает до минимума. Начинается лихорадочный поиск новых библиотек в Нете (запойная зависимость). А как быть с проектом, когда МК занимает 5% от всей схемы и требуется ввести(изменить) несколько узлов, добавить(убрать) несколько микросхем? Изменяется интерфейс управления схемой, при неизменной логике работы в целом. Как реализуются изменения в Си, когда требуется добавить в общий алгоритм несколько бит (и не всегда кратных байту) или линий интерфейса для управления этими изменениями? Быстро? Как пример, взгрустнулось мне задействовать дисплей от Nokia 1100. Библиотек нет, инфы в Нете нет. Пришлось позаниматься с низкоуровневым "подглядыванием" методом посадки на интерфейс МК с последующим отчетом. Теперь есть наработки для этого дисплея. Думаю на Си такого было сделать невозможно. Спор реально беспредметный. На вкус и цвет товарищей нет. :)

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Во развели холи вар ... Мужики вы что ?))) все языки для своих нужд и не надо их пытаться применить во всем, только потому что Я ИХ ЗНАЮ, есть же функциональные языки Prolog, Haskell, Irlang Никто же не предлагает с ними в микропроцессоры лезть. Есть языки для работ внутри системы, я под Linux'om, в Perl Python C C++ Java пишу, под Виндой Python Java Ruby C# Basic.

Абсолютно ясно что для электроники есть Ассемблер и ВСЕ, все остальное НЕ НУЖНОЕ упрощение жизни от нежелания работать и усложнять себе жизнь, технологии скакнут вверх вообще дельфю сделают нахрен для микросхем...

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

...Стоит отойти от стандартных библиотек и интерфейсов и тыц в проблему... ...Начинается лихорадочный поиск новых библиотек в Нете (запойная зависимость)...

А как данная проблема решается на АСМе?

...Как реализуются изменения в Си, когда требуется добавить в общий алгоритм несколько бит (и не всегда кратных байту)...

Шутите?

...Думаю на Си такого было сделать невозможно...

:lol:

Пока ты жив, надежда есть.

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

Шутите?

Нет. Если учесть, что тактовая частота интерфейса всего в 4 раза ниже тактовой МК. А требовалось изучить не только передаваемые данные, но и ряд электрических параметров сигнала (разрядность, задержки, фазы). Не верится, что неуклюжесть Си позволила бы успеть все это обработать.

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

Неуклюжесть Си? А вам не приходила мысль взять контроллер побыстрее? И о какой обработке за 4 такта может идти речь?

Очень хочу глянуть на фрагмент программы успевающей совершить некую сложную обработку данных за 4-е такта.

Пока ты жив, надежда есть.

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

Маленький кусочек:

in temp,port(X)

st Z+,temp :)

Вот видишь, mazzi, ты и мыслишь по Си-шному (взять контроллер побыстрее, а нет его). Главное не обработать, а схватить. Обработка делается потом, при выводе. Предвижу вопрос "куда все схватить, если места в МК маловато?". Приходилось выкручиваться нестандартными решениями - смещать точку синхронизации записи по счетчику входных операций и делать выборку кусками. Видишь, тут приходилось слегка "извращаться" с алгоритмом (который никто не написАл, как готовую библиотеку), но цель достигнута (а это главное) малыми мощностями (Мега8).

Си - классный инструмент для "математики", Ассм - для интефейсов.Мир, дружба, братство. :)

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Один из моих проектов на Си состоит из 40 файлов исходных текстов общим объёмом 432 килобайта. Всё это компилируется в 54 килобайта бинарника.

В этом проекте используется масса интерфейсов и протоколов. Кроме того, ведётся база данных на внешних EEPROM. Система многоканальна и многозадачна. Одна из задач клиент для внешнего канала, другая сервер для нескольких каналов.

Всё это создавалось и развивалось в течение 2-х лет.

Я думаю, что на АСМе такое сделать за обозримое время невозможно.

Со мной работал один программист пишущий на АСМе, но после того, как его исходник перевалил за 16килобайт он просто не мог отладить свою программу, хотя парень отнюдь не глупый. После перехода на Си, он больше к АСМу по большому счёту не обращался.

На АСМе можно писать более-менее большие программы только при наличии хороших библиотек с реализацией функций арифметических, ввода-вывода, преобразования и т.д. Иначе кроме простеньких программ ничего у вас не получится.

Если глянуть на историю развития программирования в общем, то были следующие этапы(могу ошибаться в числах, привожу по памяти):

  • писали на машинном языке совсем небольшие программы
  • писали на ассемблере в один файл - до 500 строк
  • использование макроассемблера и процедур - функций 1000 строк
  • используя правила структурирования на языках ВУ до 10000 строк
  • модульное программирование (не помню)
  • используя объектно ориентированную методику - предел пока не достигнут. По крайней мере рубеж в миллион строк уже преодолён.

Выбор делайте сами. Серьёзные вещи нужно делать серьёзными средствами. Хотя, конечно, ассемблер нужно знать.

Пока ты жив, надежда есть.

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

 Сильно. Что и подтверждает - для достижения совершенства программирования МК оба языка нужны.

...А мой первый опыт встречи с Ассмом - дизассемблирование бинарника чуть выше 16кБ (до этого момента я его не понимал вообще) и переделка под свои нужды на Ассме. В результате - проект получился в 4 раза короче (по размеру кода около 4,6кБ) и в несколько раз функциональней. Чем мне Ассм и понравился. Насчет 54 кБ исходника ничего не скажу, но стараюсь более четко структурировать программы, чтобы потом не "пыхтеть" вспоминая "тему". А самые удачные решения "складываю" в "библиотечку подпрограмм" для последующих применений. 

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Вот и праздничные дни. Всех с наступающим Новым Годом! Вот что у меня получилось сегодня (по просьбе mazzi). Не скажу, что уложился в 30мин. (несколько нагоняев от жены за отлынивание от подготовки к празднику, визит внучки со всеми вытекающими..., поход в гараж... и в итоге результат на ваше рассмотрение :) ) , зато в 2,5 раза короче и некоторые поправки в виде динамического отклика на изменение конфигурации перемычек.


; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************

.include "C:\VMLAB\include\2313def.inc"

.def  temp  =r16
.def	blink	= r18
.def	tick	= r19      
.def	sc	= r20		
.def	strt	= r21	

reset:
  rjmp start
  reti      ; Addr $01
  reti      ; Addr $02
  reti      ; Addr $03
  reti      ; Addr $04
  rjmp	t1	; Addr $05
  reti      ; Addr $06        Use 'rjmp myVector'
  reti      ; Addr $07        to define a interrupt vector
  reti      ; Addr $08
  reti      ; Addr $09
  reti 	; Addr $0A

t1:
  rcall	set_t1 			
  sbis	acsr,5 			
  rjmp	quit_t1   		
  sbr	strt,1            
  rjmp	quit_t1          
quit_t1:
  set                    
  reti

start:
  ldi	temp,low(RAMEND)
  out	SPL,temp
  ldi	temp,0b11000100
  out	portb,temp
  ldi	temp,0b00000100
  out	ddrb,temp
  ldi	temp,0b00000011	
  out	tccr1b,temp
  ldi	temp,0b10000000
  out	timsk,temp
  ldi	temp,0b01001000
  out	acsr,temp
  ldi	r31,11		
  ldi	r30,238
  clr	sc
  clr	tick
  clr	strt
  clr	blink
  rcall	set_t1
  sei	

main:
  brtc	end_main      
  rcall	mode          
  rcall	set_delay
  clt
end_main:
  rcall	leds
  rjmp main

mode:
  sbrs	strt,0      
  rjmp	quit_mode   

ticks:
  inc	tick
  cpi	tick,2
  brne	quit_mode
  clr	tick
  sbic	acsr,5    
  rjmp	sec_plus   
dec_sc:              
  cp		sc,r17      
  brlo	next_dec_sec
  mov	sc,r17      
next_dec_sec:
  tst	sc          
  breq	led_off 	
  dec	sc          
end_dec_sc:
  rjmp	quit_mode	
sec_plus:          
  cp		sc,r17	
  brge	led_on
  inc	sc 		
  clr	blink
  rjmp	quit_mode
led_on:
  sbr	blink,1
  mov	sc,r17
  rjmp	quit_mode
led_off:
  clr	blink
  clr	strt
quit_mode:
  ret

leds:
  sbrs	blink,0
  rjmp	leds_off
  in		r22,TCNT1H
  in		r23,TCNT1L
  sbrc	r22,7
  sbi	portb,2
  sbrs	r22,7
  cbi	portb,2
  rjmp	quit_leds
leds_off:
  sbi	portb,2
quit_leds:
  ret	

set_t1:
  out	TCNT1H,r31
  out	TCNT1L,r30
ret

set_delay:
  in		temp,pinb 	
  sbrs	temp,7
  rjmp	no_delay
  sbrs	temp,6
  rjmp	delay_30
  ldi	r17,60
  rjmp	quit_set_delay
delay_30:
  ldi	r17,30
  rjmp	quit_set_delay
no_delay:
  ldi	r17,0
quit_set_delay:
  ret

 

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

Наконец мой вызов был принят. Причём, нужно заметить, представителем ещё "того" поколения, для которого слово "честь" не пустой звук. ( вывод о поколении сделан по наличию внуков ).:)

Респект Геннадию!

Поздравляю всех читателей этой ветки и всего форума с наступающим новым годом и Рождеством!

Пока ты жив, надежда есть.

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

я бы set_t1 оформил в виде

.macro set_t1
  out  TCNT1H,r31
  out  TCNT1L,r30
.endmacro

вызов подпрограммы тратит на этой элементарной вещи целых 8 тактов. 4 такта(макрос) против 12(подпрограмма)

И еще полезнейший иногда макрос

.macro set_reg
 LDI   temp,  @1
 MOV   @0,    temp
.endmacro

Который делает инициализацию переменных в R0...R15 более наглядной(а для R16..R31 не имеет смысла)

Вот если бы сделать макросы условными... для R0..15 один макрос, для 16..31 другой можно ведь так?

Ну и вывод в порт тоже можно сократить в тексте программы...

.macro set_io  
 LDI   temp,  @1 
 OUT   @0,    temp
.endmacro


START:
  ...
  set_io portb, 0b11000100
  set_io ddrb,  0b00000100
  set_io tccr1b,0b00000011     set_io timsk, 0b10000000
  set_io acsr,  0b01001000

Такие макросы делают текст программы более читабельным

Учение - изучение правил. Опыт - изучение исключений.

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

Присоединяюсь. Всех с натупающим!!! Alexeyslav, твои рекомендации очень ценные. Их можно отнести к стадии оптимизации. А на это времени уже нет. :)Еще раз всех с праздником (уже близко)!!! :drinks:

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

  • 2 недели спустя...

скорее не к оптимизации а к читаемости кода

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

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