реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> передача параметров из АСМ в КЕЙЛе
nicom
сообщение Jan 18 2007, 14:41
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 544
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 870



Глубокоуважаемый ALL!!!
Имеется текст программы на С в Кейле...
Есть фрагмент, в котором необходимо резко привязать времена...
написали кусок кода на АСМе, Вопрос, как при выходе из подпрограммы, написанной в АСМе передать данные назад в С?...
Для начала хотя бы 1 байт.
Спасибо...

BYTE receive_byte(void)
{
#pragma ASM
...
XRL IOE, #02H
XRL IOE, #02H
...
MOV R7, A ; Надо передать на выход это значение А

#pragma ENDASM
}

при компиляции Линкер предупреждает о том, что нет данных для возврата...
TEST1.C(410): warning C173: missing return-expression
Go to the top of the page
 
+Quote Post
nicom
сообщение Jan 18 2007, 15:14
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 544
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 870



Цитата
...
TEST1.C(410): warning C173: missing return-expression


...оказалось, что передается как раз R7... не могу найти где это определяется, и как снять предупреждение Линкера..., хотя, программа, в общем то работает... (оказывается)
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 18 2007, 18:11
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Если Вас так уж волнует предупреждение транслятора о том, что нет возврата из функции, то можно сделать одно из двух:
1) напишите всю функцию на ассемблере (не вставкой, в файле с расширением a51)
2) выделите функцию в отдельный файл и определите как возвращающую не BYTE а - void , в файле же, где будите ее (функцию) использовать - напишите честно: BYTE receive_byte(void);

О передаче параметров и возврате значений функций можно почитать в С51.pdf -> Chapter 3. Language Extensions -> Function Declarations

Сообщение отредактировал Палыч - Jan 18 2007, 18:13
Go to the top of the page
 
+Quote Post
spf
сообщение Jan 18 2007, 19:51
Сообщение #4


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



По просьбе bialix, его форум что-то не пускает

http://onembedding.com/hints/hacks/asm-inline/


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
DimG
сообщение Jan 19 2007, 05:50
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 70
Регистрация: 4-04-06
Из: г. Омск
Пользователь №: 15 777



Цитата(nicom @ Jan 18 2007, 17:41) *
...

Чтобы предупреждения не было, сделайте так
...
// MOV R7, A ; Надо передать на выход это значение А // эта строка не нужна
#pragma ENDASM
return ACC;
}

результат будет тот-же, а предупреждения не будет.

Сообщение отредактировал IgorKossak - Aug 6 2009, 14:06
Причина редактирования: Бездумное цитирование
Go to the top of the page
 
+Quote Post
nicom
сообщение Jan 19 2007, 12:10
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 544
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 870



Цитата(DimG @ Jan 19 2007, 05:50) *
... return ACC;

результат будет тот-же, а предупреждения не будет.



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

Еще раз всем спасибо... a14.gif

ЗЫ.
Не хочу надоедать, но, есть еще несколько вопросов по организации передачи параметров АСМ <->С...
Go to the top of the page
 
+Quote Post
Terrabyte
сообщение Aug 6 2009, 12:21
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 124
Регистрация: 2-01-07
Из: Russia
Пользователь №: 24 042



inline в Keil не работает ? как функцию сделать inline ом ?
или keil их при оптимизации сам распознаёт?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Aug 6 2009, 12:54
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Terrabyte @ Aug 6 2009, 15:21) *
как функцию сделать inline ом ?
или keil их при оптимизации сам распознаёт?
В Keil ключевое слово inline - не поддерживается. Некое подобие inline-функции можно создать с помощью директивы препроцессора #define.
Go to the top of the page
 
+Quote Post
Terrabyte
сообщение Aug 7 2009, 06:50
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 124
Регистрация: 2-01-07
Из: Russia
Пользователь №: 24 042



ok! А подскажите, как должны быть настроены не задействованные пины портов? чтобы потребляло меньше.
на выход в "1" как обычно?
Go to the top of the page
 
+Quote Post
tag
сообщение Aug 7 2009, 07:03
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Цитата(Палыч @ Aug 6 2009, 15:54) *
В Keil ключевое слово inline - не поддерживается. Некое подобие inline-функции можно создать с помощью директивы препроцессора #define.


вообщето inline-функции это из CPP, поэтому неудивительно что Keil не поддерживает. Простое подобие inline-функций можно реализовать как макро-подстановки с помощью директивы #define.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Aug 7 2009, 07:21
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(tag @ Aug 7 2009, 10:03) *
вообщето inline-функции это из CPP, поэтому неудивительно что Keil не поддерживает.
Это - Вы погорячились. Посмотрите стандарт ISO/IEC 9899 Programming languages C. Но, Keil и не утверждает, что поддерживает этот стандарт
Go to the top of the page
 
+Quote Post
barabek
сообщение Aug 7 2009, 08:44
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(Terrabyte @ Aug 7 2009, 16:50) *
ok! А подскажите, как должны быть настроены не задействованные пины портов? чтобы потребляло меньше.
на выход в "1" как обычно?

В некоторых ситуациях лучше незадействованные пины переводить в 0. Сопротивление канала меньше, меньше возможности для сбоев от наводок. Была ситуация : были пины, которые проверялись только при включении прибора. Некоторые дорожки от этих пинов были длинной 2-3 см и никуда не подтянуты. Они ловили наводки и это приводило к сбою контроллера. Выход - или подтягивать внешними резисторами, или просто перевел в 0 и проблема исчезла.
Go to the top of the page
 
+Quote Post
Terrabyte
сообщение Aug 12 2009, 05:44
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 124
Регистрация: 2-01-07
Из: Russia
Пользователь №: 24 042



Здравствуйте, ещё вопрос, в KEIL есть счётчик тактов? мне нужно расчитать время обработки прерывания.
Go to the top of the page
 
+Quote Post
Omen_13
сообщение Aug 14 2009, 04:30
Сообщение #14


Силовик-затейник
****

Группа: Модераторы
Сообщений: 766
Регистрация: 18-02-07
Из: Столица солнечного Башкортостана
Пользователь №: 25 467



Цитата(Terrabyte @ Aug 12 2009, 11:44) *
Здравствуйте, ещё вопрос, в KEIL есть счётчик тактов? мне нужно расчитать время обработки прерывания.

Есть конечно, states называется. Если частота кварца правильно задана в target то и время можно увидеть (sec)
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
"Вперёд на мины, ордена потом!"
"инжинер/разработчик создает нечто, в отличии от многих других профессий. В этом есть сходность с художниками или музыкантами"(с)CodeWarrior1241
Go to the top of the page
 
+Quote Post
Terrabyte
сообщение Aug 14 2009, 05:45
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 124
Регистрация: 2-01-07
Из: Russia
Пользователь №: 24 042



Ок! спасибо. А ещё момент, можно ли программно прочитать регистр идентификатора устройства DEVICEID??? , с помощью Jtaga он читается командой..IDCODE, у меня С8051А02x
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 21:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01483 секунд с 7
ELECTRONIX ©2004-2016