На чем писать  

554 пользователя проголосовало

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

    • Assembler
      154
    • C
      280
    • Что-то еще
      59


383 сообщения в этой теме

Геннадий    1 045

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

  • Одобряю 2

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Не одобряю 1

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


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

Что-то ассемлерные гуру не могут осилить данный простенький алгоритм. Си однозначно победил.:P

  • Не одобряю 1

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


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

Впервые на русском языке! Работаем с микроконтроллерами STM32F7(на основе STM32F7 Online Training)

Цикл материалов на основе STM32F7 Online Training от компании STMicroelectronics. Описаны функциональные блоки и инструменты разработки для семейства микроконтроллеров STM32F7, охватывающие тематику системной периферии, памяти, безопасности, аналоговой периферии, цифровой периферии, таймеров, экосистемы.

Подробнее>>

Геннадий    1 045

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

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


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

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

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


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

Всё это отговорки. Признайте поражение, это будет честно.

  • Не одобряю 1

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


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

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

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

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

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

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

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

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

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

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

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

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

не поймут!

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

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

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

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


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

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

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

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

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

  • Не одобряю 1

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


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

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

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


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

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

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

  • Не одобряю 1

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


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

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

Изменено пользователем Геннадий
  • Одобряю 1

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


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

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

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

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


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

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

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

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

Шутите?

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

:lol:

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


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

Шутите?

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

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


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

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

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

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


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

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

in temp,port(X)

st Z+,temp :)

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

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

Изменено пользователем Геннадий

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


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

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

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

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

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

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

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

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

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

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

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


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

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

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

Изменено пользователем Геннадий

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


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

Вот и праздничные дни. Всех с наступающим Новым Годом! Вот что у меня получилось сегодня (по просьбе 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

 

  • Одобряю 1

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


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

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

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

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

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


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

я бы 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

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

  • Одобряю 1

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


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

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

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


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

Да, верно, к читаемости, т.к. на размер и код .hex не влияет. :)

Изменено пользователем Геннадий

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: mazzi
      Повторил схему опубликованную на сайте паяльник. http://forum.cxem.net/index.php?/blogs/entry/548-повторил-схему-клона-avr-jtag-ice/&do=getLastComment
      Схема заработала, но так и не смог её заставить работать из под CVAVR, заводится только из под Atmel Studio 4.
      Может быть кому ни будь удалось это сделать? Если да, то подскажите, как этого достичь?
       
    • Автор: LettonDarkCat
      Купил USBASP программатор с aliexpress. На нем стояла старая прошивка, т.к в khazama при прошивке выдавало ошибки но микроконтроллер прошивался и память считывалась (короче просто старая прошивка на нем). Потом решил перепрошить программатор через arduino. Прошивка успешно закачалась, но теперь программатор вообще отказывается работать. Кто сталкивался, помогите.
    • Автор: Andrey Gressikov
      Я начинающий программист, пытаюсь программировать микроконтроллеры в среде АВР.
      У меня возник вопрос, вот например у нас есть двоичная система исчисления где 3 мы можем записать так:
      00000011, однако чтобы подать логическую 1 на третий порт микроконтроллера мы должны сделать следующую запись
      PORTC=00000100, т е существует некая разница между названиями портов и системами исчисления, в таком случае как мне используя 16 ричную систему исчисления подать напряжение на какую либо ногу порта.Я знаю что данная запись 0х01 подает логическую 1 на 0 ногу, а данная запись 0х10 на 4 ногу ,ну а как быть дальше?
      Как подать напряжение на 5 ногу порта? Если я в чем то заблуждаюсь - поправьте, если чего то незнаю расскажите.
      Заранее благодарю.