nicom 0 18 января, 2007 Опубликовано 18 января, 2007 · Жалоба Глубокоуважаемый 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nicom 0 18 января, 2007 Опубликовано 18 января, 2007 · Жалоба ... TEST1.C(410): warning C173: missing return-expression ...оказалось, что передается как раз R7... не могу найти где это определяется, и как снять предупреждение Линкера..., хотя, программа, в общем то работает... (оказывается) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 18 января, 2007 Опубликовано 18 января, 2007 (изменено) · Жалоба Если Вас так уж волнует предупреждение транслятора о том, что нет возврата из функции, то можно сделать одно из двух: 1) напишите всю функцию на ассемблере (не вставкой, в файле с расширением a51) 2) выделите функцию в отдельный файл и определите как возвращающую не BYTE а - void , в файле же, где будите ее (функцию) использовать - напишите честно: BYTE receive_byte(void); О передаче параметров и возврате значений функций можно почитать в С51.pdf -> Chapter 3. Language Extensions -> Function Declarations Изменено 18 января, 2007 пользователем Палыч Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spf 0 18 января, 2007 Опубликовано 18 января, 2007 · Жалоба По просьбе bialix, его форум что-то не пускает http://onembedding.com/hints/hacks/asm-inline/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimg 0 19 января, 2007 Опубликовано 19 января, 2007 (изменено) · Жалоба ... Чтобы предупреждения не было, сделайте так ... // MOV R7, A ; Надо передать на выход это значение А // эта строка не нужна #pragma ENDASM return ACC; } результат будет тот-же, а предупреждения не будет. Изменено 6 августа, 2009 пользователем IgorKossak Бездумное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nicom 0 19 января, 2007 Опубликовано 19 января, 2007 · Жалоба ... return ACC; результат будет тот-же, а предупреждения не будет. О!!!, прошло без ошибок, то, что вместо А надо АСС, сожалею, не догадался... ...было бы неплохо теперь об этом почитать... Пойду по рекомендованным ссылкам... Еще раз всем спасибо... :a14: ЗЫ. Не хочу надоедать, но, есть еще несколько вопросов по организации передачи параметров АСМ <->С... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Terrabyte 0 6 августа, 2009 Опубликовано 6 августа, 2009 · Жалоба inline в Keil не работает ? как функцию сделать inline ом ? или keil их при оптимизации сам распознаёт? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 6 августа, 2009 Опубликовано 6 августа, 2009 · Жалоба как функцию сделать inline ом ? или keil их при оптимизации сам распознаёт? В Keil ключевое слово inline - не поддерживается. Некое подобие inline-функции можно создать с помощью директивы препроцессора #define. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Terrabyte 0 7 августа, 2009 Опубликовано 7 августа, 2009 · Жалоба ok! А подскажите, как должны быть настроены не задействованные пины портов? чтобы потребляло меньше. на выход в "1" как обычно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tag 0 7 августа, 2009 Опубликовано 7 августа, 2009 · Жалоба В Keil ключевое слово inline - не поддерживается. Некое подобие inline-функции можно создать с помощью директивы препроцессора #define. вообщето inline-функции это из CPP, поэтому неудивительно что Keil не поддерживает. Простое подобие inline-функций можно реализовать как макро-подстановки с помощью директивы #define. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 7 августа, 2009 Опубликовано 7 августа, 2009 · Жалоба вообщето inline-функции это из CPP, поэтому неудивительно что Keil не поддерживает.Это - Вы погорячились. Посмотрите стандарт ISO/IEC 9899 Programming languages C. Но, Keil и не утверждает, что поддерживает этот стандарт Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
barabek 0 7 августа, 2009 Опубликовано 7 августа, 2009 · Жалоба ok! А подскажите, как должны быть настроены не задействованные пины портов? чтобы потребляло меньше. на выход в "1" как обычно? В некоторых ситуациях лучше незадействованные пины переводить в 0. Сопротивление канала меньше, меньше возможности для сбоев от наводок. Была ситуация : были пины, которые проверялись только при включении прибора. Некоторые дорожки от этих пинов были длинной 2-3 см и никуда не подтянуты. Они ловили наводки и это приводило к сбою контроллера. Выход - или подтягивать внешними резисторами, или просто перевел в 0 и проблема исчезла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Terrabyte 0 12 августа, 2009 Опубликовано 12 августа, 2009 · Жалоба Здравствуйте, ещё вопрос, в KEIL есть счётчик тактов? мне нужно расчитать время обработки прерывания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Omen_13 0 14 августа, 2009 Опубликовано 14 августа, 2009 · Жалоба Здравствуйте, ещё вопрос, в KEIL есть счётчик тактов? мне нужно расчитать время обработки прерывания. Есть конечно, states называется. Если частота кварца правильно задана в target то и время можно увидеть (sec) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Terrabyte 0 14 августа, 2009 Опубликовано 14 августа, 2009 · Жалоба Ок! спасибо. А ещё момент, можно ли программно прочитать регистр идентификатора устройства DEVICEID??? , с помощью Jtaga он читается командой..IDCODE, у меня С8051А02x Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться