Перейти к содержанию
    

Так проверка может и придти.

А вот это зависит от НИИ :). О существовании правильного НИИ они и не узнают. Если руководство НИИ задумалось о легальности, то НИИ, полагаю, совсем даже не "правильный" :). Хотя, слово легальность Автором не произносилось - только бесплатность :).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Язык С в микроконтроллерах если и нужен, то для реализации достаточно сложных функций и алгоритмов, которые не хочечься заново писать на ассемблере. Например, хочеться реализовать быстрое преобразование Фурье или поднять подобие стека TCP/IP.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Современные МК в большинстве случаев имеют вполне достаточный объём памяти для Си, и в этих случаях зацикливание на ассемблере - это самоистязание.

ADuC812 - это тот самый современный МК с достаточным объемом памяти?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ADuC812 - это тот самый современный МК с достаточным объемом памяти?

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотя проблем с системой команд и заброшенностью компиляторов для этой платформы, это не снимает.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот это зависит от НИИ . О существовании правильного НИИ они и не узнают. Если руководство НИИ задумалось о легальности, то НИИ, полагаю, совсем даже не "правильный" . Хотя, слово легальность Автором не произносилось - только бесплатность .

Была поставлена задача найти компилятор Сишный, а какой он должен быть мне не сказали, вот я и решил искать и среди бесплатных, и среди платных, которые можно сделать бесплатными и полноценными, как-то так))) 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

 

Пока с вопросами все.

Изменено пользователем bragol

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) P1 = 0x0FE; для чего присваивать порту значение 254, если правильно перевел?

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

 

2) TMOD |= 0x1; Эта строка присваивает всем битам регистра значение 1 так? Если да, то сто происходит с битами в первом случае?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

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

 

Ага спасибо за пояснения

Неприлично вопросы не задавать, по крайней мере я так думаю, а в плюсах, на которых я писал, с этим если честно не сталкивался

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неприлично вопросы не задавать, по крайней мере я так думаю, а в плюсах, на которых я писал, с этим если честно не сталкивался

 

Ну вы даете. Больше никому никогда не рассказываете, что в С++ не сталкивались с побитными операциями. Может пристроитесь на работу и не только в это НИИ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вы даете. Больше никому никогда не рассказываете, что в С++ не сталкивались с побитными операциями.

Конечно не сталкивался - нажимал кнопки в визарде для генерации окошек и рющек. Несколько переменных сгенеренных тем-же визардом были все из себя интовые. Посмотрите внимательнее на его комментарии в "исходнике"- он-же биты от байтов не отличает :(. Все это ерунда, кроме разве того, что он считает что умеет программировать :(.

Вот это действительно проблема.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Конечно не сталкивался - нажимал кнопки в визарде для генерации окошек и рющек. Несколько переменных сгенеренных тем-же визардом были все из себя интовые. Посмотрите внимательнее на его комментарии в "исходнике"- он-же биты от байтов не отличает :(. Все это ерунда, кроме разве того, что он считает что умеет программировать :(.

Вот это действительно проблема.

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

 

На плюсах я писал год и никаких окошек и рюшек, как Вы выразились я в визарде не генерировал, только консоль.

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь по делу, вот модернизированный код с первой страницы, так лучше? Все ли правильно?

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.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неправильно. В функции 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;

}

}

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ура! Светодиодик моргает.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На плюсах я писал год и никаких окошек и рюшек, как Вы выразились я в визарде не генерировал, только консоль.

Я не Ваш работодатель и способен видеть, что то, что Ваш опыт ограничивается copy-paste бессмертной программы "Hello World!".

Не надо ЗДЕСЬ неуклюже пытаться вешать лапшу на уши написав на языке 'C' эквивалент русского "моя праграмиста на си много крестик однако".

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...