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

 
 
> Программирование на C++, А почему не С++?
KingGeorg
сообщение Oct 23 2004, 12:51
Сообщение #1





Группа: Свой
Сообщений: 9
Регистрация: 20-10-04
Пользователь №: 933



По идее, IAR должны были бы вместе с EC++ и стантдартными библиотеками предоставлять и библиотеки классов, описывающие микроконтроллеры, хотя бы тот же MSP430. Но я у них ничего подобного не нашёл, нет даже упоминаний. Интересно, кто-нибудь вообще в этом деле использует С++ как С++. Если да, давайте одсудим детали. Я (скромный такой rolleyes.gif ) за месяц с небольшим знакомства с предметной областью кое-что своё накарябал. Готов предъявить и получить заимечания.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KingGeorg
сообщение Oct 27 2004, 14:54
Сообщение #2





Группа: Свой
Сообщений: 9
Регистрация: 20-10-04
Пользователь №: 933



Ну, напимер, сторожевой таймер:

Код

#ifndef __WDT_HPP__
#define __WDT_HPP__

#include "430.hpp"
// здесь typedef bit unsigned char
// typedef byte unsigned char, и описания регистров связанных с прерываниями
// от разных устройств (комментарий для сообщения в форум)


struct WDTCTL{
    bit WDTIS    : 2; /* Выбор интервала сторожевого таймера. Эти биты определяют интервал времени
             * сторожевого таймера, по истечении которого устанавливаетс
           * флаг WDTIFG и/или генерируется сигнал PUC.
           * 00 Частота источника тактирования сторожевого таймера / 32768
            * 01 Частота источника тактирования сторожевого таймера / 8192
           * 10 Частота источника тактирования сторожевого таймера / 512
           * 11 Частота источника тактирования сторожевого таймера / 64   */
    bit WDTSSEL  : 1; /* Выбор источника тактирования сторожевого таймера
           * 0 SMCLK    1 ACLK */
    bit WDTCNTCL : 1; /* Очистка счетчика сторожевого таймера.
          * Установкой WDTCNTCL=1 производится очистка счетчика до значения 0000h.
          * Бит WDTCNTCL автоматически сбрасывается.
          * 0 Действие не производитс
          * 1 WDTCNT = 0000h */
    bit WDTTMSEL : 1; /*a Выбор режима сторожевого таймера
          * 0 Сторожевой режим
          * 1 Режим интервального таймера */
    bit WDTNMI   : 1; /* Выбор NMI сторожевого таймера.
          * Этот бит позволяет установить режим функционирования вывода nonRST/NMI.
          * 0 Функция сброса
          * 1 Функция NMI */
    bit WDTNMIES : 1; /* Выбор фронта NMI сторожевого таймера. Этот бит позволяет выбрать
          * фронт прерывания для NMI прерывания при WDTNMI=1.
          * Изменение этого бита может вызвать NMI. Чтобы избежать
          * случайного запуска NMI следует изменять этот бит при WDTNMI=0.
          * 0 NMI прерывание происходит по переднему фронту
          * 1 NMI прерывание происходит по спаду */
    bit WDTHOLD  : 1; /* Останов сторожевого таймера. Этот бит останавливает сторожевой таймер.
          * Установка WDTHOLD=1, когда WDT не используется, позволяет снизить
          * энергопотребление.
          * 0 Сторожевой таймер не остановлен
          * 1 Сторожевой таймер остановлен  */
    byte WDTPW;       /* Пароль сторожевого таймера. Всегда читается как 069h.
          * Должен записываться как 05Ah, в противном случае будет сгенерирован PUC. */

    static const WDTCTL *address;         // адрес настоящего регистра управления WDT

    WDTCTL()                              // конструктор читает данные из настоящего регистра
    { *(int*)this = *(int*)address;    }

    void set(void)                        // установить данные в настоящий регистр
    {
  WDTPW = 0x5A;
  *(int*)address = *(int*)this;
    }
};

class WDT
{
public:
    static void reset(void)    //    сброс и рестарт сторожевого таймера
    {
 WDTCTL wdtctl;
 wdtctl.WDTCNTCL = 1;
 wdtctl.set();
    }

    static void turnOff(void)    //    выключение  сторожевого таймера
    {
 WDTCTL wdtctl;
 wdtctl.WDTHOLD = 1;
 wdtctl.set();
    }

    static void turnOn(void)    //    включение  сторожевого таймера
    {
 WDTCTL wdtctl;
 wdtctl.WDTHOLD = 0;
 wdtctl.set();
    }

    enum dividers{ d32768, d8192, d512, d64}; // значения делителя частоты ст. тайм.

    static void set_divider( const dividers divider) // установека значения делителя частоты
    {
 WDTCTL wdtctl;
 wdtctl.WDTIS = divider;
 wdtctl.set();
    }

    enum source{ SMCLK, ACLK}; // источники тактовой частоты ст. тайм.

    static void set_source( source sour) // установека источника частоты
    {
 WDTCTL wdtctl;
 wdtctl.WDTSSEL = sour;
 wdtctl.set();
    }

    enum modes{ watchdog, interval};    // режимы сторожевой-интервальный
    static void set_mode(modes mode)
    {
 WDTCTL wdtctl;
 wdtctl.WDTTMSEL = mode;
 wdtctl.set();
    }

    enum NMIs{ rst, NMI};
    static void setNMI( NMIs nmi)
    {
 WDTCTL wdtctl;
 wdtctl.WDTNMI = nmi;
 wdtctl.set();
    }

    enum fronts{ front, back};
    static void setNMI( fronts fr)
    {
 WDTCTL wdtctl;
 wdtctl.WDTNMIES = fr;
 wdtctl.set();
    }

    static int getWDTIFG(void)
    {
 return WDTIFG;
    }


};

#endif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- KingGeorg   Программирование на C++   Oct 23 2004, 12:51
- - IgorKossak   У IAR вообще всё идёт довольно медленно, но не буд...   Oct 23 2004, 13:20
- - KingGeorg   У меня есть классы: clocking -- инкапсулирует сист...   Oct 24 2004, 09:31
- - IgorKossak   Неплохо, а где можно на реализацию взглянуть?   Oct 24 2004, 10:29
- - KingGeorg   А вот код инкапсулирующий ЦАП Код#ifndef __DAC12_H...   Nov 1 2004, 16:11
- - lamerok   Уважаемый KingGeorg Я все таки так и не пойму, ...   Nov 2 2004, 04:50
- - KingGeorg   Фишка вот в чём. Всё это нет никакого резона писат...   Nov 4 2004, 11:38
- - -Tумблер-   Цитата(KingGeorg @ Nov 4 2004, 03:38 PM)А есл...   Nov 5 2004, 13:32
- - IgorKossak   Уже давно пишу на С++ для МК. Плевать на снижение ...   Nov 5 2004, 15:03
- - lamerok   KingGeorg Попробывал маленький проектик, аля миган...   Nov 10 2004, 09:42
- - froakch   ЦитатаУ меня есть классы: clocking -- инкапсулируе...   Nov 15 2004, 09:50
- - Slavik   C++ удобно применять где мегабайты текста. А для в...   Nov 29 2004, 10:11
|- - COMA   Цитата(Slavik @ Nov 29 2004, 13:11)На мой суб...   Nov 30 2004, 06:10
|- - IgorKossak   Цитата(COMA @ Nov 30 2004, 09:10)Код при комп...   Nov 30 2004, 09:49
|- - COMA   Цитата(IgorKossak @ Nov 30 2004, 12:49)Удивит...   Nov 30 2004, 14:41
|- - IgorKossak   Цитата(COMA @ Nov 30 2004, 17:41)Цитата(IgorK...   Dec 1 2004, 08:19
- - Slavik   Опять же, на мой субъективный взгляд, для встраива...   Nov 30 2004, 09:44


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

 


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


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