Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 05.07.2013, 15:57  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: Оптимальный старт в программировании МК на С

Сообщение от ilyamp Посмотреть сообщение
Перенос на другой контроллер, даже похожий, всё равно требует изменения обработки периферии, хотя бы по названию управляющих регистров, тут Си не поможет.
Потому что догмы АСМописания вам не дают этого сделать.
Цитата:
Правда, если из камня нужно выжать процентов 50-70 ресурсов, я лично предпочитаю асм ))
А если 80-90, то Си?
Реклама:
nahimovv вне форума  
Непрочитано 05.07.2013, 16:06  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Оптимальный старт в программировании МК на С

Сообщение от nahimovv Посмотреть сообщение
противоречит вашим знаниям
Вот, насчет знаний - это просто опечатка, видимо... Ибо, какие ж это знания? Это лишь вера, противоречащая очевидным фактам; слепая вера в то, что "как-нибудь пронесёт нелёгкая". Как уже говорилось выше - рассчитывать на глючный инструмент можно только в том случае, если известен точный перечень его глюков и способов их обхода. А поскольку перечень глюков неизвестен , можно только надеяться, что "всё обойдётся". Скажем, глюк с перебором элементов массива может существовать в разных вариантах и проявляться не только так, как в приводившемся примере, а ещё каким-нибудь, неизвестным пока образом, и что - жить крестясь "авось, не ***нёт"?


_________________________________
Сообщение от ilyamp Посмотреть сообщение
уже сам не всегда помнишь их типы, когда исправляешь очередную функцию.
Это вопрос стиля, а не количества переменных.
__________________
There's always more than one way to skin a cat.

Последний раз редактировалось tempora; 05.07.2013 в 16:08.
tempora вне форума  
Непрочитано 05.07.2013, 17:07  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Оптимальный старт в программировании МК на С

Сообщение от Uz_Sleep_Walker Посмотреть сообщение
есть люди которые не поклоняются божеству "IAR".
Что ж Вы упёртый-то какой?
Вам про язык и стандарт, а Вы о чём?
Пользуйте GCC со всеми плюсАми - слова никто не скажет.
Разница в нюансах компилятора.
Сообщение от ilyamp Посмотреть сообщение
Перенос на другой контроллер, даже похожий, всё равно требует изменения обработки периферии, хотя бы по названию управляющих регистров, тут Си не поможет.
Да ну?
Это АСМ платформозависим.
Меняете файл определений и макросы... и всё
Аль Вы в коде используете имена регистров/битов??
Это-то и называется "говнокодом".

Сообщение от nahimovv Посмотреть сообщение
Потому что догмы АСМописания вам не дают этого сделать.
Какие-такие догмы?
PHP код:
;**********  Variables Constants  ************* 
.
equ    osc    =    1600000    Частота генератора 1.6MHz
.equ    SendDel    =    255;220        ;Константа задержки вывода на HT1611
.equ    DelConst    =    0
.equ    LCD_Buf        =    5        ;Адрес буфера LCD
;**************      Порты     *****************
.
equ    LCDPort    =    PORTB
.equ    LCDDir    =    DDRB
.equ    LCDPin    =    PINB
.equ    dout    =    PB0        ;Выход данных
.equ    sck        =    PB1        ;Выход тактовой
.equ    reset    =    PB2        ;Выход сброса
.equ    C_D        =    PB3        ;Выход команда/данные
.equ    CS        =    PB4        ;Выход Chip Select
;**************    Регистры    *****************
; ************* 
Low *****************
.
def    delreg        R2
.def    cntX        R3    ;Счётчик столбцов
.def    cntY        R4    ;Счётчик строк

.def    TempSreg    =    R15        ;Регистр хранения SREG
; ************* High ****************
.
def    temp         =    r16    Временный регистр

.def    SendCnt        =    R27    ;Счетчик переданных на индикатор битов
.def    LCDreg        =    r28    Регистр данных для LCD
.def    delayreg    =    r29    Регистр задержки внешний
; ************* Индексные регистры ****************
.
def    indL    =    r30    ZL    Адрес таблицы символов
.def    indH    =    r31    ZH    используется в прцедурах преобразования индикации
;********  End Variables  ***********
.
macro    Enable_3310
        cbi        LCDPort
,CS        ;Ножку CS в "0"
.endm
.macro    Disable_3310
        sbi        LCDPort
,CS        ;Ножку CS в "1"
.endm
;***************************************
.
macro    Command_3310
        cbi        LCDPort
,C_D        ;Ножку C_D в "0"
.endm
.macro    Data_3310
        sbi        LCDPort
,C_D        ;Ножку C_D в "1"
.endm
;***************************************
.
macro    wait_ms
        ldi        delayreg
,@0
        rcall    delay_ms        
;Ждём 100 милисекунд
.endm
;***************************************
.
macro    Send_Command
        ldi        LCDreg
,@0
        rcall    S_Command
.endm 
omercury вне форума  
Непрочитано 05.07.2013, 18:10  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: Оптимальный старт в программировании МК на С

Сообщение от omercury Посмотреть сообщение
Какие-такие догмы?
Дык, с прожжёным АСМистом не поспоришь!
nahimovv вне форума  
Непрочитано 05.07.2013, 19:35  
ilyamp
Прописка
 
Регистрация: 29.08.2007
Адрес: Рязань
Сообщений: 203
Сказал спасибо: 54
Сказали Спасибо 19 раз(а) в 16 сообщении(ях)
ilyamp на пути к лучшему
По умолчанию Re: Оптимальный старт в программировании МК на С

Сообщение от omercury Посмотреть сообщение
Это АСМ платформозависим.
Меняете файл определений и макросы... и всё
Аль Вы в коде используете имена регистров/битов??
Если меняешь тип контроллера, файл определений необходимо поменять как в Си так и в асме, макросы обычно тут ни причём, а код приходится править потому, что в другом контроллере часто бывает другая периферия, т.е. она отличается управлением, названиями регистров, которые всё равно необходимо исправлять, хотя бы в определениях имён. Обычно переназывать регистры управления периферийным модулем бессмысленно, зачем лишние псевдонимы.


Сообщение от tempora Посмотреть сообщение
Это вопрос стиля, а не количества переменных.
Это ещё и вопрос затраченного времени



Сообщение от nahimovv Посмотреть сообщение
А если 80-90, то Си?
Если 80-90 я меняю контроллер ))
код Си даже при хорошей оптимизации проигрывает процентов 15-20 по скорости и примерно вдвое больше по объёму по сравнению с асм кодом, если, конечно, асм код хорошо оптимизировать
В основном из-за вызовов функций, насколько я понимаю
Кроме того Си иногда не позволяет работать со вторым или ДСП-ядром без танцев с бубном
Но лучшая читаемость кода в Си это оправдывает, не спорю. Не всегда же нужно грузить камень на всю катушку
ilyamp вне форума  
Непрочитано 05.07.2013, 19:45  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: Оптимальный старт в программировании МК на С

Сообщение от ilyamp Посмотреть сообщение
Если меняешь тип контроллера, файл определений необходимо поменять как в Си так и в асме, макросы обычно тут ни причём, а код приходится править потому, что в другом контроллере часто бывает другая периферия, т.е. она отличается управлением, названиями регистров, которые всё равно необходимо исправлять, хотя бы в определениях имён. Обычно переназывать регистры управления периферийным модулем бессмысленно, зачем лишние псевдонимы.
Не согласен! С АСМом всё намного хуже!

Цитата:
Если 80-90 я меняю контроллер ))
код Си даже при хорошей оптимизации проигрывает процентов 15-20 по скорости и примерно вдвое больше по объёму по сравнению с асм кодом, если, конечно, асм код хорошо оптимизировать
Можно я улыбнусь, вы улыбнётесь вместе со мной... и не будете больше ничего доказывать, ибо не получается это у вас.
nahimovv вне форума  
Непрочитано 05.07.2013, 20:41  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Оптимальный старт в программировании МК на С

Сообщение от ilyamp Посмотреть сообщение
Если меняешь тип контроллера, файл определений необходимо поменять как в Си так и в асме, макросы обычно тут ни причём, а код приходится править потому, что в другом контроллере часто бывает другая периферия
Ок.
Уж раз сам nahimovv обозвал
Сообщение от nahimovv Посмотреть сообщение
прожжёным АСМистом
, не будем разрушать стереотипы...
Вот Вам кусок определений из самого консервативного варианта - на АСМе.
PHP код:
.equ    SPI_Port PORTB
.equ    SPI_Dir  DDRB
.equ    SPI_Pin  PINB
.equ             MISO    5;    PB5 ;(SDA)      [Вход]
.
equ            MOSI    6;    PB6 ;          [Выход]
.
equ            SCK        7;    PB7 ;(SCK)    [Выход]
.
equ            RST        4;    PB4 ;(OC1B)   [Выход]
.
equ            VCC        3;    PB3 ;(OC1A)   [Выход]
.
equ    SerialPort PORTB
.equ    SerialDir  DDRB
.equ    SerialPin  PINB
.equ             DIN        5;    PB5 ;(SDA)      [Вход]  Для Serial Interface
.
equ            DOUT    6;    PB6 ;          [Выход]  Для Serial Interface
.
equ            CLK        7;    PB7 ;(SCK)    [Выход]  Для Serial Interface
.
equ            BUSY    4;    PB4 ;(OC1B)   [Вход]  Для Serial Interface
.
equ            LATCH    4;    PB4 ;(OC1B)   [Выход]  Для 595 Interface
;*************************************************  *************************
А также ПОРТ В для ввода-вывода PORT1
.equ    Port1    =    PORTB
.equ    Dir1    =    DDRB
.equ    Pin1    =    PINB
.equ            P17        7;    PB7
.equ            P16        6;    PB6
.equ            P15        5;    PB5
.equ            P14        4;    PB4
.equ            P13        3;    PB3
.equ            P12        2;    PB2
.equ            P11        1;    PB1
.equ            P10        0;    PB0
А также ПОРТ D для ввода-вывода LED
.equ    IRQPort    =    PORTD
.equ    IRQDir    =    DDRD
.equ    IRQPin    =    PIND
.equ            IRQ        3;    PD3 ;(INT1)
I2C порт
.equ    I2CPort    =    PORTB
.equ    I2CDir    =    DDRB
.equ    I2CPin    =    PINB
.equ        SDA        =    5;    PB5
.equ        SCL        =    7;    PB7
;ПОРТ В для ввода-вывода PORT2
.equ    Port2    =    PORTD
.equ    Dir2    =    DDRD
.equ    Pin2    =    PIND
.equ            P23        6;    PD6
.equ            P22        5;    PD5
.equ            P21        4;    PD4
.equ            P20        3;    PD3
.equ            P21        1;    PD1
.equ            P20        0;    PD0

.equ    Pio_Port PORTB
.equ    Pio_Dir  DDRB
.equ    Pio_Pin  PINB

.equ    inputport        =PIND
.equ    outputport        =PORTD
.equ    USBdirection    =DDRD 
Одни и те же порты я обозвал разными именами в зависимости от назначения и теперь, не меняя ни буквы в основной программе могу приспособить её к любому АВР от самой дохлой тиньки до самой крутой меги просто поменяв дефайны.
(справедливости ради следует отметить, что именно эту программу не удастся просто так приспособить для любого МК, так как здесь задействован софт-USB, но в других случаях это более чем реально)
То же самое и с макросами - если Вы нигде в программе не будете использовать явно ни одного регистра или ячейки памяти, а забьёте это всё в макросы, то Ваша программа будет элементарно переносима на любое ядро, независимо от разрядности и конфигурации периферии (лишь бы хватило).
Сообщение от nahimovv Посмотреть сообщение
Сообщение от ilyamp Посмотреть сообщение
Если 80-90 я меняю контроллер ))
код Си даже при хорошей оптимизации проигрывает процентов 15-20 по скорости и примерно вдвое больше по объёму по сравнению с асм кодом, если, конечно, асм код хорошо оптимизировать
Не согласен! С АСМом всё намного хуже!
По вложенной цитате:
Совсем даже и не факт.
Если вы пользуетесь универсальными функциями и библиотеками, не написанными специально для данного конкретного применения, то очень даже легко может случиться совсем наоборот - код, скомпилированный из С-исходника, в общем случае получается короче и быстрей. Здесь уже действует прямая зависимость от затраченного времени, класса программиста и расположения корней его рук.
To nahimovv - скорей согласен, чем нет.
omercury вне форума  
Непрочитано 05.07.2013, 22:05  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Оптимальный старт в программировании МК на С

Сообщение от ilyamp Посмотреть сообщение
Сообщение от tempora Посмотреть сообщение
Сообщение от ilyamp Посмотреть сообщение
уже сам не всегда помнишь их типы, когда исправляешь очередную функцию.
Это вопрос стиля, а не количества переменных.
Это ещё и вопрос затраченного времени
Да, я помню, как в самом начале давал переменным однобуквенные имена, так как на печатание длинных и информативных уходило слишком много времени, но, черт возьми, как давно это было!... У Вас та же проблема сейчас? Заставлять себя надо! Тем более, если одновременно задействованных переменных так много - это подвинет к необходимости пересмотреть стиль.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 05.07.2013, 22:11  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Оптимальный старт в программировании МК на С

tempora, На счет "переменных-однобуквенных", tester в свое время информацию подогнал . Советую всем нубам заучить как молитву.
См: в аттаче :
Кстати однобуквенные используются в именах счетчиков циклов, координатах ...
Вложения:
Тип файла: pdf micrium_an_2000_rus.pdf (166.9 Кб, 205 просмотров)
__________________
Осторожно , злой кот

Последний раз редактировалось dosikus; 05.07.2013 в 22:24.
dosikus вне форума  
Сказали "Спасибо" dosikus
ilyamp (06.07.2013)
Непрочитано 05.07.2013, 22:26  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Оптимальный старт в программировании МК на С

Сообщение от dosikus Посмотреть сообщение
tester в свое время информацию подогнал
По-моему, видел это уже. Не со всем там согласен, но идея правильная.

А почему предлагаешь именно мне - мой стиль хромает?
_____________________________
Сообщение от dosikus Посмотреть сообщение
Кстати однобуквенные используются в именах счетчиков циклов, координатах
Да, бог с ними, с исключениями и очевидностями - люди и так уже, как после "ам.горок", погодим.
__________________
There's always more than one way to skin a cat.

Последний раз редактировалось tempora; 05.07.2013 в 22:34.
tempora вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимальный лазерник для ЛУТ Kabron Делимся опытом 187 31.05.2016 10:51
Оптимальный привод тележки весом 200кг d-f-m Производственное оборудование 18 12.07.2010 00:29
[Решено] Оптимальный коттеджный домофон LAVR12 Автоматика и аппаратура связи 0 22.04.2010 20:17
О программировании AVR на C++ neiver Микроконтроллеры, АЦП, память и т.д 55 24.03.2010 19:33
Оптимальный ламинатор для ЛУТ snakesoft Делимся опытом 7 13.01.2010 22:41


Часовой пояс GMT +4, время: 12:43.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot