Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конструкция ASM в C++ 
:(
    Опции темы
Nosaer
Дата 14.4.2014, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



Здравствуйте.
Возникла необходимость переписать прошивку под AVR c ассемблера на С.

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

Код

sss: in r30,pina   //считываем порт а 
     sbic pind,2  ; разрешающий/запрещающий вывод
     rjmp sss            
     IJMP
    .ORG $0100           ;                      
  rjmp sss  ;0                                            
  rjmp sss  ;1                                             
  rjmp sss  ;2                                           
  rjmp sss  ;3                                          
  rjmp sss  ;4                                    
  rjmp sss  ;5                                          
  rjmp sss  ;6                                           
  rjmp sss  ;7                                              
  rjmp sss  ;8                                  
  rjmp sss  ;9                                 

...

  rjmp sss  ;59                                  
  rjmp sss  ;60                                  
  rjmp sss  ;61                                   
  rjmp sss  ;62                                   
  rjmp sss  ;63      
  rjmp can40    ;64                                           
  rjmp sss        ;65                                              
  rjmp can42    ;66                                      
  rjmp sss        ;67                                               
  rjmp can44    ;68                                         
  rjmp sss        ;69                                      
  rjmp can46    ;70                                         
  rjmp sss        ;71                                          
  rjmp can48    ;72                                 
  rjmp sss        ;73                                
  rjmp can4a    ;74                            
  rjmp sss        ;75                               
  rjmp can4c    ;76                                
  rjmp sss        ;77                                    
  rjmp can4e    ;78                              
  rjmp sss        ;79                         
  rjmp sss        ;80                                         
  rjmp sss        ;81                                         
  rjmp sss        ;82                                      
  rjmp sss        ;83                                

...

  rjmp sss  ;255  


т.е. считываем с порта A определенное значение, и в зависимости от него прыгаем по определенным адресам от 0 до 255. В некоторых случаях, уходя на подпрограммы, и потом заново возвращаясь. 
П.С. правильно и доходчиво свои мысли выражать никогда не умел, но надеюсь вы поймете=)
PM MAIL   Вверх
Romikgy
Дата 14.4.2014, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



C++ я бы не советовал юзать на avr (больно тяжелый) и из того куска кода не понятно , что именно помогать ? 
Код

sss: in r30,pina   //считываем порт а 
     sbic pind,2  ; разрешающий/запрещающий вывод
     rjmp sss  

перевести это на си?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
xvr
Дата 14.4.2014, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



В С (равно как и в С++) эта конструкция называется switch

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0416 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.