Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MCS-51
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
Страницы: 1, 2
bragol
Доброго времени суток.
Я программист, учусь в аспирантуре, долго не мог найти работу по специальности и сейчас попал в один НИИ на испытательный срок.
Суть работы программирование микроконтроллеров семейства MCS-51 на Си.
До этого писал всю жизнь под винду, сейчас надо в кратчайшие сроки, а именно 2 недели получить базовые знания и навыки в новой для меня отрасли для успешного попадания в штат.
Задачи поставили следующие:
Ознакомиться с архитектурой данного семейства, найти бесплатный компилятор, научиться писать простейшие программы на СИ, например мигание светодиодов и т.д..
С первыми пунктами все более менее понятно.
Пока я остановился на следующем:
В качестве компилятора я выбрал SDCC
В качестве IDE Code::Blocks
В качестве симулятора выбрал EdSim51, но пока не успел опробовать, все еще впереди.

Далее куча вопросов. Что посоветуете делать дальше?
Прочел уже страниц 30 родной документации к компилятру, не впечатлило, как-то скудно описано и не очень понятно, может-быть из-за отсутствия опыта...
Какую литературу посоветуете желательно русскоязычную для начинающих, именно Си и именно данное семейство микроконтроллеров.
Может быть есть исходники простейшие, желательно с комментами...

Не побрезгаю любыми советами
vladec
Для 51-х лучше, наверное, работать в среде Keil (www.keil.com), с ограничением по памяти он бесплатный.
_Pasha
Сташин Урусов - это книга для быстрого вкуривания архитектуры 51. Современная периферия - это уже по ДШ

Кейл корректный на 100%, про EdSim51 ничего не знаю. Если не хочется лишних рюшечек от кейловского компилера (SDCC, правда, тоже с особенностями, хоть и на GCC построен) и хочется удобной отладки - попробуйте в протеусе.
bragol
Все бы хорошо, но начальству нужен полноценный бесплатный компилятор, вот почему свой выбор остановил на описанном выше.
Кстати один из МК, с которыми придется работать это ADuC812/814 в директории include у моего компилятора из более мене подходящих файлов есть только 8051.h ADuC84x.h, подключив эти заголовочные файлы можно будет писать для более старых МК, как 812 и 814?
Или надо создать и подключить вот это:
http://www.keil.com/dd/docs/c51/adi/aduc812.h
http://www.keil.com/dd/docs/c51/adi/aduc814.h

И будет ли этого достаточно для работы с этими МК или нужны еще и другие header фалы?
sergeeff
Есть нюанс между Keil и SDCC. Они по разному упаковывают многобайтные переменные типа int. Если память не изменяет, SDCC - little-endian, Кeil - big-endian. Будете прикручивать заголовки - учтите.
bragol
Цитата
Есть нюанс между Keil и SDCC. Они по разному упаковывают многобайтные переменные типа int. Если память не изменяет, SDCC - little-endian, Кeil - big-endian. Будете прикручивать заголовки - учтите.

Я правильно понял, что 8051.h ADuC84x.h не подойдут?
Плохо, что у SDCC нет своих заголовочных файлов
zovsilab
На мой взгляд самая лучшая книга по MCS-51 это Фрунзе А. В. "Микроконтроллеры? Это же просто!"1,2,3 тома.
- Также рекомендую поискать "Микроконтроллеры серии 8051: практический подход." Магда Ю. С.
- Гладштейн М.А. "Микроконтроллеры смешанного сигнала C8051Fxxx фирмы Silicon Laboratories и их применение." - тоже MCS-51 но другой фирмы производителя.
bragol
Спасибо большое. С книгами по архитектуре МК проблем нет, я в НИИ работаю тут все полки подобными книгами завалены. Меня больше всего нюансы программирования на Си беспокоят, т.к. С программистов тут нет, а значит и спросить не у кого. Задача минимум научиться писать простые программы, найти компилятор и ознакомиться с архитектурой иначе не возьмут в штат

вот например вот этот код заставит мигать светодиоды? И вообще какие особенности построения Си программы для МК, необходимы ли какие-то преднастройки частоты, мощности или чего-то еще?
Цитата
#include <stdint.h>
#include <stdbool.h>
#include <8051.h>
/*онопнанбюрэ мюохяюрэ йюкэйскърнп ян яберндхндюлх*/
void paus( int16_t );
void blinc();

void main()
{
int16_t some_size = 1000, i;
P0 = 0;
for( i = 0; i < some_size; ++i )
{
blinc();
}
}

void blinc()
{
P0 = 1;
paus( 100 );
P0 = 0;
}

void paus( int16_t p )
{
int16_t i = 0;
while( i <= p )
++i;
}
zovsilab
Запомните! Перед тем как писать программу для используемого МК(любого) - будь-то тело основной программы и обработчик прерывания - всегда сначала настраивается периферия. НУ может конечно такое случиться что вам подойдут все настройки по умолчанию - но это редкость, такого не встречал и не сталкивался. Вы скажите, на каком МК вы остановились? 51-й 51-му немного рознь(в плане периферии и как следствие его настройки ).
в той книге "Микроконтроллеры серии 8051: практический подход." Магда Ю. С. как-раз приводятся примеры написания программы на С с хорошим описанием и примерами.

По поводу выше приведенного кода - светодиод будет моргать. Но через N промежуток времени перестанет моргать.
_Pasha
Цитата(zovsilab @ Aug 16 2011, 09:48) *
По поводу выше приведенного кода - светодиод будет моргать. Но через N промежуток времени перестанет моргать.

А это уже зависит от стартапа - идет ли там переход на сброс после main() или нет laughing.gif
bragol
Цитата
По поводу выше приведенного кода - светодиод будет моргать. Но через N промежуток времени перестанет моргать.

Этот код писал я, естественно перестанет, я же не зацикливал, моргнет 1000 раз и перестанет

Спасибо, что обратили внимание на книгу "Микроконтроллеры серии 8051: практический подход." Магда Ю.С. Уже скачал, думаю для начала будет достаточно, а если возьмут можно будет проштудировать и 4 тома Фрунзе
kolobok0
Цитата(_Pasha @ Aug 16 2011, 09:55) *
...Кейл корректный на 100%...


лет 5 назад давал порой бяку в хексе из азма. сразу скажу
1) не последняя версия кейла и
2) программа не хэйлохты мир - не 2 и даже не 10 кб на выходе.

лажался и тока в путь. обидно было, что ерунда плавающая кстати.
с выходом более свежей версии - актуальность померла, но осадочек остался sm.gif

во всём остальном замечен не был. не плохой компилятор и не плохая среда.


По теме:
Помимо сей рекомендую копать азм. Если конечно же Вы хотите писать под 51 стоющие программы, а не только курсовые.
И ещё. Схемотехнику придёться копать. Без неё - так же, далеко не уедете.

(круглый)
zltigo
QUOTE (kolobok0 @ Aug 16 2011, 12:00) *
По теме:

Еще по теме sm.gif - не использовать 51 вообще, за двумя исключениями
1) 51 ядро является интегрированным с узкоспециализированной периферией.
2) Нужен контроллер ценой в полбакса и устраивает один из китайских чипов.

Если и использовать, то не использовать 'C'. Если использовать 'C', то уж по крайней мере не использовать "бесплатные" компиляторы.
bragol
Цитата
Еще по теме - не использовать 51 вообще, за двумя исключениями
1) 51 ядро является интегрированным с узкоспециализированной периферией.
2) Нужен контроллер ценой в полбакса и устраивает один из китайских чипов.

Если и использовать, то не использовать 'C'. Если использовать 'C', то уж по крайней мере не использовать "бесплатные" компиляторы.


1) Что использует НИИ, то использую я, выбор не от меня зависит
2)Опять же конторе нужен был программист Си, ну и надо будет все равно асм осваивать и использовать и то, и то

Чем Вам Си не угодил и чем не угодил SDCC?

Поставил кейл, разбираюсь с ним для начала подойдет, а когда придется писать что-то большее 2 кб, то и буду думать, что делать...
Вот и вопрос появился, в книге Магда Ю.С. прочел что можно интегрировать SDCC в кейл, при этом ограничения на размер кода исчезнут? И получается, что можно будет совершенно легально использовать среду кейл со всеми ее удобными наворотами и компилировать код любого размера с помощью SDCC?
zltigo
QUOTE (bragol @ Aug 16 2011, 14:25) *
1) Что использует НИИ, то использую я, выбор не от меня зависит

От Вас, как минимум, зависит выбор НИИ.
QUOTE
2)Опять же конторе нужен был программист Си, ну и надо будет все равно асм осваивать и использовать и то, и то

Это, как я понял, в этом НИИ спустя 30 лет после того, как узнали про "51" узнали о 'C' sad.gif
QUOTE
Чем Вам Си не угодил и чем не угодил SDCC?

Си мне всем угодил, а вот 51 Си не угодил, это точно. По этой причине, если уж дурью маяться, то по крайней мере с максимально приличным инструметом, но не поделками под компиляторы.

tyro
Цитата(zltigo @ Aug 16 2011, 16:32) *
От Вас, как минимум, зависит выбор НИИ.

Но здесь кажется тот случай, когда говорят: "При всем богатстве выбора альтернативы нет" sad.gif .
zltigo
QUOTE (tyro @ Aug 16 2011, 14:59) *
Но здесь кажется тот случай, когда говорят: "При всем богатстве выбора альтернативы нет" sad.gif .

Даже, если Вас съели, у Вас есть ДВА выхода sm.gif.
В данном случае, когда некий НИИ ( судя по знакомым мне российским реалиям во во многих случаях уже достаточно стремное место работы, но они точно есть разные), решил наконец-то использовать 51 контроллер 1980 года рождения, причем наконец-то решились его программировать на 'C', а узнать, что такое 'C', с чем его едят и какими инструментами (но обязательно халявными sad.gif )пользоваться взяли "писателя под винду"..... все становится абсолютно тоскливым.
one_eight_seven
Практически программа строится немного не так, как у вас, товарищ аспирант (кстати, чтобы попасть в аспирантуру нынче не нужно знать английский язык?)

1. отключаете внутренний Watchdog (есть почти во всех 51)
2. настраиваете периферию.
3. пишете тело программы.
zltigo
QUOTE (one_eight_seven @ Aug 16 2011, 16:38) *
(кстати, чтобы попасть в аспирантуру нынче не нужно знать английский язык?)

Судя по поиску литературы на русском и особенно именам функций paus и blinc - знать не нужно совсем sad.gif. Особенно убивает, что это не какая-либо, "чукотка", а Столица Росcии sad.gif.
sergeeff
Если товарищу очень хочется работать именно в этом НИИ, есть еще вариант "засучить рукава", подобрать веские аргументы и убедить начальство забыть 51 как кошмарный сон, причем как можно быстрее. Это позволит:

1. Понять, что из себя представляет начальство (всегда полезно).
2. Заложить в разработки нечто более современное (и себя подтянуть таким образом).

Если начальство доводов не примет, я бы свалил из этой конторы с максимальной скоростью.
bragol
Цитата
Даже, если Вас съели, у Вас есть ДВА выхода .
В данном случае, когда некий НИИ ( судя по знакомым мне российским реалиям во во многих случаях уже достаточно стремное место работы, но они точно есть разные), решил наконец-то использовать 51 контроллер 1980 года рождения, причем наконец-то решились его программировать на 'C', а узнать, что такое 'C', с чем его едят и какими инструментами (но обязательно халявными )пользоваться взяли "писателя под винду"..... все становится абсолютно тоскливым.

51 контроллер они, я так понял, используют уже давно, но разных производителей, сейчас придется работать с контроллером ADuC812, как мне сказали это достаточно "свежий" МК, использующий систему команд 51-ого и некоторыми другими МК, по поводу халявы, я думаю это естественное желание...
ЗЫ в аспирантуре английский нужен и особых проблем у меня с ним нет, прошу прощения за орфографию, об этом если честно даже не задумывался, голова другим забита была... Ищу русскоязычную лит-ру из-за малых сроков, все-таки на перевод тоже время теряется, а его пока нет, вот как возьмут в штат тогда и буду в оригинале читать...

Цитата
Практически программа строится немного не так, как у вас, товарищ аспирант (кстати, чтобы попасть в аспирантуру нынче не нужно знать английский язык?)

По структуре попытаюсь разобраться, особенно по первым двум пунктам.
По первому пункту гуглить в сторону:
Цитата
Команда WDR (Watchdog Reset) сбрасывает сторожевой таймер...



Цитата
Судя по поиску литературы на русском и особенно именам функций paus и blinc - знать не нужно совсем . Особенно убивает, что это не какая-либо, "чукотка", а Столица Росcии .

По поводу правописания сказал выше...
Кстати названия субъектов Российской Федерации пишутся с заглавной буквы
zltigo
QUOTE (bragol @ Aug 17 2011, 07:39) *
Кстати названия субъектов Российской Федерации пишутся с заглавной буквы

Ой, как у Вас все запущено sad.gif - "чукотка" (именно так в кавычках у меня написано, точнее даже какая-либо "чукотка" ), в отличии от Чукотки, вовсе не субъект Российской Федерации sm.gif.
QUOTE
сейчас придется работать с контроллером ADuC812, как мне сказали это достаточно "свежий" МК

Ну типа порядка десяти лет с копейками ему всего sad.gif. Вот такой придаток к 12bit ADC. Только на этот придаток придется навешать еще, как минимум, внешнюю RAM, ибо 256 байтами просто делать нечего ни с 'C', ни с многоканальным ADC.
QUOTE
по поводу халявы, я думаю это естественное желание...

О да! Видимо по причине затмения разума и применяется древний дорогущий контроллер и древняя дорогущая памяти к нему sad.gif. После чего остается только одна мысль об экономии на средствах разработки и использовании студентов в качестве "разработчиков".


VladimirB
Цитата(bragol @ Aug 17 2011, 09:39) *
51 контроллер они, я так понял, используют уже давно, но разных производителей, сейчас придется работать с контроллером ADuC812, как мне сказали это достаточно "свежий" МК, использующий систему команд 51-ого...

Учтите, что ревизия E даташита на этот "свежий" контроллер датирована 2003 годом, а были ещё ревизии A,B,C,D.
Т.е. появился он в районе 2000 года и в соответствии с циклом поддержки 10 лет его давно пора снимать с производства.

НИИ, которое использует 51 контроллеры на С - место гиблое, бегите оттуда скорее, пока вас не заставили прогать КР580ВМ80 на С#.
Новых знаний и опыта вы там точно не наберётесь.

Язык С в микроконтроллерах если и нужен, то для реализации достаточно сложных функций и алгоритмов, которые не хочечься заново писать на ассемблере. Например, хочеться реализовать быстрое преобразование Фурье или поднять подобие стека TCP/IP.
А если у вас 256 байт ОЗУ и 8192 Байт ПЗУ, то какие сложные алгоритмы можно реализовать? И будет ли при этом текст программы на C занимать меньше места.
Именно поэтому нормальных компиляторов Си для MCS-51 вы не найдёте.







kolobok0
Цитата(VladimirB @ Aug 17 2011, 14:40) *
...или поднять подобие стека TCP/IP...


на азме вполне можно.

почти по теме:

Народ!
Вы чего напали то? всё равно свои мозги не вставишь. а топикастеру, если котелок варит, достаточно наводящих вопросов. я так думаю.

(круглый)
ЗЫ
Можно подумать все после школы были супер-пупер продвинутыми и в электронике и в программировании.
ЗЫ ЗЫ
При чём тут русский язык - воопще не догнал. Форум по электронике или литературе?
tyro
Цитата(VladimirB @ Aug 17 2011, 14:40) *
Именно поэтому нормальных компиляторов Си для MCS-51 вы не найдёте.

Keil стало быть не нормальный biggrin.gif , да и IAR вроде как поддерживает.
С этим ядром есть и кипарисы, правда то же не новые.
bragol
Цитата
Keil стало быть не нормальный , да и IAR вроде как поддерживает.

Они имели ввиду бесплатных.

На первой странице спрашивал, вопрос проигнорировали.
В книге Магда Ю.С. прочел, что можно интегрировать SDCC в кейл. При этом ограничения на размер кода исчезнут? И получается, что можно будет совершенно легально использовать среду кейл со всеми ее удобными наворотами и компилировать код любого размера с помощью SDCC?
Не вызовет ли сложностей подобная интеграция или каких-либо других подводных камней?
_3m
Цитата(bragol @ Aug 18 2011, 09:16) *
Они имели ввиду бесплатных.
На первой странице спрашивал, вопрос проигнорировали.

Не получите вы вразумительных ответов.
Русские ымбеддеры не представляют жизни на легальных средствах разработки, отсюда все советы: укради кейл.
Вы текст лицензии на бесплатный кейл внимательно изучили? Использование среды в коммерческих целях допускается ?

С компиляторами под x51 дело обстоит плохо. Хороших бесплатных нету. Для вас это может быть важным аргументом в разговоре с начальством.
bragol
Цитата(_3m @ Aug 18 2011, 09:53) *
Не получите вы вразумительных ответов.
Русские ымбеддеры не представляют жизни на легальных средствах разработки, отсюда все советы: укради кейл.
Вы текст лицензии на бесплатный кейл внимательно изучили? Использование среды в коммерческих целях допускается ?

С компиляторами под x51 дело обстоит плохо. Хороших бесплатных нету. Для вас это может быть важным аргументом в разговоре с начальством.


Так а в чем будет выражаться разница между:
(1) Крякнутый кейл. Сейчас, я так полагаю, не используются специальные метки в машинном коде после компиляции для определения легальности используемой среды, а значит "попасться" можно, только если среда подключится к сети (обновится и т.д.).
(2) Урезанный кейл с полноценным бесплатным компилятором, узнать о коммерческом использовании среды можно только при случайной проверке, даже не представляю, как они это сделают, если метки нынче не используются.

Если в чем-то не прав, прошу откомментировать выше сказанное.
sergeeff
Все что вы рассказываете видел в своей жизни лет 25 тому. Вы можете понять руководство, которое собирается закладывать в актуальные разработки недешевые убогие старинные процессоры и при этом даже не прикрыть себе жо...у, купив легальный компилятор? Я нет. Цена вопроса 1000-2000 евро. Причем в случае чего, все на вас же и свалят. Тогда встает задача, как вам прикрыть свою зад..цу. Способ только один - писать бесконечное количество докладных (копии под подпись секретаря, что она их получила. Обмен e-mail'ами не катит, их просто в момент Х сотрут), в которых вы будете предупреждать начальство и, соответственно, без письменного указания начальства вообще ничего не делать. Все документы хранить за пределами вашего славного НИИ.

Радостные перспективы? Флаг в руки, если вам такая жизнь по душе.

P.S. Насчет SDCC 51 не обольщайтесь. Он с небольшими проектами (small model) еще как-то справляется, а дальше пойдут проблемы.
_3m
Цитата(bragol @ Aug 18 2011, 10:08) *
(1) Крякнутый кейл.
(2) ...узнать о коммерческом использовании среды можно только при случайной проверке...

Так проверка может и придти.
zltigo
QUOTE (_3m @ Aug 18 2011, 08:59) *
Так проверка может и придти.

А вот это зависит от НИИ sm.gif. О существовании правильного НИИ они и не узнают. Если руководство НИИ задумалось о легальности, то НИИ, полагаю, совсем даже не "правильный" sm.gif. Хотя, слово легальность Автором не произносилось - только бесплатность sm.gif.
scifi
Цитата(VladimirB @ Aug 17 2011, 14:40) *
Язык С в микроконтроллерах если и нужен, то для реализации достаточно сложных функций и алгоритмов, которые не хочечься заново писать на ассемблере. Например, хочеться реализовать быстрое преобразование Фурье или поднять подобие стека TCP/IP.

О, какой ужас! Такой взгляд на вещи был бы оправдан лет 20 назад. Современные МК в большинстве случаев имеют вполне достаточный объём памяти для Си, и в этих случаях зацикливание на ассемблере - это самоистязание.
one_eight_seven
Цитата
Современные МК в большинстве случаев имеют вполне достаточный объём памяти для Си, и в этих случаях зацикливание на ассемблере - это самоистязание.

ADuC812 - это тот самый современный МК с достаточным объемом памяти?
zltigo
QUOTE (one_eight_seven @ Aug 18 2011, 12:57) *
ADuC812 - это тот самый современный МК с достаточным объемом памяти?

Ну, как-бы при навешивании внешней объемы памяти у него немалые становятся sm.gif. Хотя проблем с системой команд и заброшенностью компиляторов для этой платформы, это не снимает. На ASM писать нужно на уровне сотен байт максимум - остальное на 'C'. Хотя, насколько я себе представляю "программистов под Windows", результат на 'C' может быть на первых порах ну очень удручающим sad.gif. При этом попытки писательства на ASM, тем более программ хотя-бы в несколько килобайт, не говоря уже о десятке-другом, не менее часто приводят к не менее удручающим результатам sad.gif
one_eight_seven
Цитата
Хотя проблем с системой команд и заброшенностью компиляторов для этой платформы, это не снимает.

Использую Silabs F930 - особо не жалуюсь на Keil. Искренне считаю, что конкурентов по совокупности размеров/потребления/скорости не так уж много. Но это в приложении, где этот МК на своём месте. И это уровень ну никак не НИИ: по-моему, НИИ должны заниматься чем-то посерьезнее, повозвышеннее (может быть моё мировоззрение в плане Научно-Исследовательских Институтов как в том мультике: "А в моём мире живут только розовые пони, они кушают радугу и какают бабочками).
bragol
Цитата
А вот это зависит от НИИ . О существовании правильного НИИ они и не узнают. Если руководство НИИ задумалось о легальности, то НИИ, полагаю, совсем даже не "правильный" . Хотя, слово легальность Автором не произносилось - только бесплатность .

Была поставлена задача найти компилятор Сишный, а какой он должен быть мне не сказали, вот я и решил искать и среди бесплатных, и среди платных, которые можно сделать бесплатными и полноценными, как-то так))) PS НИИ занимается разработкой радиоизмерительных приборов, всяких ватметров и т.д.
Теперь по делу, вот модернизированный код с первой страницы, так лучше? Все ли правильно?

Цитата
#include <ADUC812.H>
#include <stdio.h>

void blink( unsigned int );
sbit BLINK = P1^0;

void main()
{
unsigned int counter = 28; // диод мигает раз в 2 секунды
P1 = 0x0FE;
TH0 = 0x0; // установка старшего и младшего битов в 0
TL0 = 0x0;
TMOD |= 0x1; // утанавливает все биты регистра режимов в 1
TR0 = 1; // включает таймер/счетчик Т/С0

while( 1 )
{
blink( counter );
}
}

void blink( unsigned int count )
{
if (TF0 == 1) // флаг преполнения
{
TF0 = 0; // если Т/С переполнился вернуть флаг в 0
--count;
if (count == 0)
{
count = 28;
BLINK = ~BLINK;
}
}
}


Пока не понимаю вот это:
1) P1 = 0x0FE; для чего присваивать порту значение 254, если правильно перевел?
2) TMOD |= 0x1; Эта строка присваивает всем битам регистра значение 1 так? Если да, то сто происходит с битами в первом случае?
3) По идее светодиод должен мигать раз в 2 секунды если верить вот этому:
Цитата
В этом случае таймер 0 инкрементируется 11059000 / 12 = 921583 раз в секунду. При
этом интервал между тиками составляет 65536 / 921583 = 0,071 с (берем 3 знака после запя$
той). Следовательно, по прошествии 2 с таймер должен перегрузиться 2 / 0,071 = 28


Пока с вопросами все.
scifi
Цитата(bragol @ Aug 18 2011, 16:46) *
1) P1 = 0x0FE; для чего присваивать порту значение 254, если правильно перевел?

Почитайте про структуру порта вывода 51-го МК. 254 означает: P1.0 - низкий уровень, P1.1...P1.7 - высокий уровень.

Цитата(bragol @ Aug 18 2011, 16:46) *
2) TMOD |= 0x1; Эта строка присваивает всем битам регистра значение 1 так? Если да, то сто происходит с битами в первом случае?

Эта строка устанавливает младший бит. Это известно каждому, кто хоть что-то знает про язык Си. Неприлично такие вопросы задавать.
bragol
Цитата(scifi @ Aug 18 2011, 16:55) *
Почитайте про структуру порта вывода 51-го МК. 254 означает: P1.0 - низкий уровень, P1.1...P1.7 - высокий уровень.


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


Ага спасибо за пояснения
Неприлично вопросы не задавать, по крайней мере я так думаю, а в плюсах, на которых я писал, с этим если честно не сталкивался
sergeeff
Цитата(bragol @ Aug 18 2011, 16:35) *
Неприлично вопросы не задавать, по крайней мере я так думаю, а в плюсах, на которых я писал, с этим если честно не сталкивался


Ну вы даете. Больше никому никогда не рассказываете, что в С++ не сталкивались с побитными операциями. Может пристроитесь на работу и не только в это НИИ.
zltigo
QUOTE (sergeeff @ Aug 18 2011, 18:24) *
Ну вы даете. Больше никому никогда не рассказываете, что в С++ не сталкивались с побитными операциями.

Конечно не сталкивался - нажимал кнопки в визарде для генерации окошек и рющек. Несколько переменных сгенеренных тем-же визардом были все из себя интовые. Посмотрите внимательнее на его комментарии в "исходнике"- он-же биты от байтов не отличает sad.gif. Все это ерунда, кроме разве того, что он считает что умеет программировать sad.gif.
Вот это действительно проблема.
bragol
Цитата(zltigo @ Aug 18 2011, 19:31) *
Конечно не сталкивался - нажимал кнопки в визарде для генерации окошек и рющек. Несколько переменных сгенеренных тем-же визардом были все из себя интовые. Посмотрите внимательнее на его комментарии в "исходнике"- он-же биты от байтов не отличает sad.gif. Все это ерунда, кроме разве того, что он считает что умеет программировать sad.gif.
Вот это действительно проблема.

А вот пытаться "щемить" меня совершенно не нужно, тем более на форуме...

На плюсах я писал год и никаких окошек и рюшек, как Вы выразились я в визарде не генерировал, только консоль.
Это мой первый опыт работ программистом, многие начинали с подобных "глупых" вопросов, набравшись опыту и знаний многие и не сознаются в этом...

В советах, типа бросай НИИ (была бы возможность работать в другом месте программистом, меня бы тут не было) и в комментариях подобным Вашим, я не нуждаюсь, поберегите пальцы и не засоряйте тему.
AHTOXA
Цитата(bragol @ Aug 18 2011, 18:46) *
Теперь по делу, вот модернизированный код с первой страницы, так лучше? Все ли правильно?
Код
void main()
{
    unsigned int counter = 28; // диод мигает раз в 2 секунды
..
    while( 1 )
    {
        blink( counter );
    }
}

void blink( unsigned int count )
{
    ..
    --count;
    if (count == 0)
    {
        count = 28;

Неправильно. В функции blink() вы пытаетесь изменять параметр count, и надеетесь, что он изменится в вызывающей функци (main). А это не так, параметр здесь передаётся по значению. То есть, при каждом вызове функции blink() значение параметра count будет 28.
Чтобы изменять значение параметра, надо передать указатель на него.
bragol
Цитата(AHTOXA @ Aug 19 2011, 09:47) *
Неправильно. В функции blink() вы пытаетесь изменять параметр count, и надеетесь, что он изменится в вызывающей функци (main). А это не так, параметр здесь передаётся по значению. То есть, при каждом вызове функции blink() значение параметра count будет 28.
Чтобы изменять значение параметра, надо передать указатель на него.

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

Я кстати ошибся с МК, тут у меня используют 814...

Цитата
#include <stdio.h>
#include <ADUC814.H>

void blink( unsigned int * );
sbit BLINK = P1^0;
//int cik = 0;

void main()
{
unsigned int counter = 28;
unsigned int *ptr = &counter;
P1 = 0x0FE;
TH0 = 0x0;
TL0 = 0x0;
TMOD |= 0x1;
TR0 = 1;

while( 1 )
{
blink( ptr );
}
}

void blink( unsigned int *count )
{
if (TF0 == 1)
{
TF0 = 0;
--(*count);
if (*count == 0)
{
*count = 28;
BLINK = ~BLINK;
}
}
}
sergeeff
Ура! Светодиодик моргает.

Начальство должно быть в восторге, выписать себе премию и прямиком в кассу. А вы, любезный, работайте дальше. Удовлетворение то получили от написанного?
zltigo
QUOTE (bragol @ Aug 19 2011, 07:57) *
На плюсах я писал год и никаких окошек и рюшек, как Вы выразились я в визарде не генерировал, только консоль.

Я не Ваш работодатель и способен видеть, что то, что Ваш опыт ограничивается copy-paste бессмертной программы "Hello World!".
Не надо ЗДЕСЬ неуклюже пытаться вешать лапшу на уши написав на языке 'C' эквивалент русского "моя праграмиста на си много крестик однако".
scifi
Чем соревноваться в сарказме, лучше перенесли бы в раздел для чайников.
sergeeff
Проявление сарказма может подвигнет автора топика на переосмысление свое жизненного опыта. Хотя, судя по его ответам, прислушиваться к советам он не горазд. Значит должен сам протоптать свою жизненную дорожку.

P.S. По мне, чем быстрее такие НИИ накроются медным тазом, тем будет полезнее всем.
bragol
А есть у кого-нибудь программа Windows Serial Downloader более свежая? Моя версия 6.7 под ХР вылетает раз по 10 подряд пред тем как корректно запуститься?
Смотрел на сайте Analog devices что-то не нашел...

Цитата
Я не Ваш работодатель и способен видеть, что то, что Ваш опыт ограничивается copy-paste бессмертной программы "Hello World!".
Не надо ЗДЕСЬ неуклюже пытаться вешать лапшу на уши написав на языке 'C' эквивалент русского "моя праграмиста на си много крестик однако".

...

Проявление сарказма может подвигнет автора топика на переосмысление свое жизненного опыта. Хотя, судя по его ответам, прислушиваться к советам он не горазд. Значит должен сам протоптать свою жизненную дорожку.

2 scifi и sergeeff
Я сразу сказал, что я только набираюсь опыту и на плюсах ничего серьезней реализации различных алгоритмов не писал.
А вы продолжайте острить, если не можете сказать, что-нибудь по делу, интернет дает вам такую возможность...
sergeeff
Цитата(bragol @ Aug 22 2011, 10:26) *
А есть у кого-нибудь программа Windows Serial Downloader более свежая? Моя версия 6.7 под ХР вылетает раз по 10 подряд пред тем как корректно запуститься?
Смотрел на сайте Analog devices что-то не нашел...


2 scifi и sergeeff
Я сразу сказал, что я только набираюсь опыту и на плюсах ничего серьезней реализации различных алгоритмов не писал.
А вы продолжайте острить, если не можете сказать, что-нибудь по делу, интернет дает вам такую возможность...


По делу это сесть перед монитором и отвечать на ваши вопросы типа "Это правильно написано или нет? Это будет работать или нет? Где взять этот файл? Где найти эти утилиту?".

Извиняйте. Своих дел хватает.
bragol
Цитата(sergeeff @ Aug 22 2011, 11:48) *
По делу это сесть перед монитором и отвечать на ваши вопросы типа "Это правильно написано или нет? Это будет работать или нет? Где взять этот файл? Где найти эти утилиту?".

Извиняйте. Своих дел хватает.

У меня начинает складываться такое мнение, что с изучением языков программирования, вы стали забывать свой родной язык...

Если не хотите или не можете отвечать на поставленные вопросы, не отвечайте вообще, из-за ваших ответов не по теме теряется общий смысл bb-offtopic.gif

Огромная просьба к модераторам, если Вас не затруднит, почистите пожалуйста тему. С Ув.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.