[an error occurred while processing this directive]
стиль написания программ...
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено BETEP 14 октября 2005 г. 15:02
В ответ на: снова про CCS (Си) отправлено BETEP 14 октября 2005 г. 12:19

хотелось бы определить с самого начала "правильный" стиль, чтоб потом двадцать раз не дергаться назад, т.е. чтобы потом она выглядела как и полагается нормальным программам, легко модифицируемая, понятная другим и прочее, а не выкидышь, где например через строчку напрямую пишутся адреса, вместо того чтобы определить Define/ (это так к слову). [к ANSI не посылать]

под стилем [касательно DSP] подразумеваю в основном использование DSP/BIOS (не очень то понял накой он нужен), библиотек CSL.
Распространено ли это ??

ниже приведен пример из CCS. Это большенство программ так выглядят или же использование настолько загроможденных структур (на мой взгляд) излишне, ведь вообщем можно здесь всего несколькими строчками обойтись ??

include

#include
#include
#include

/*----------------------------------------------------------------------------*/
/* In this exmaple, we are simply setting the timer to interrupt */
/* every 0x800 clock cycles. All timer setup will be done in a */
/* TSK function that executes after exit from "main" */


/* Create a timer control structure */
TIMER_Config myTConfig = {
TIMER_TCR_RMK(
TIMER_TCR_SOFT_WAITZERO,
TIMER_TCR_FREE_NOSOFT,
TIMER_TCR_TRB_RESET,
TIMER_TCR_TSS_START,
TIMER_TCR_TDDR_OF(0)
), /* TCR0 */
0x0800u /* PRD0 */
};

/* Global declarations */

/* Reference to start of interrupt vectors */
extern void VECSTART(void);

TIMER_Handle mhTimer;
volatile Uint16 timer_int_cnt = 0;
interrupt void timerIsr(void);
void taskFunc(void);

/*----------------------------------------------------------------------------*/
void main() {

/* Initialize CSL library, this step is required */
CSL_init();

/* Initialize IPTR */
IRQ_setVecs((Uint16)(&VECSTART));

/* Call example task function */
taskFunc();
}

/*----------------------------------------------------------------------------*/
void taskFunc(void) {

Uint16 eventId;
int old_intm;
Uint16 err = 0;

printf("\n");

/* Temporarily disable all maskable interrupts, preserving */
/* previous state of INTM */
old_intm = IRQ_globalDisable();

/* Open Timer 0, this returns a pointer to a Timer Handle */
/* that will be used as an argument to other CSL functions */
mhTimer = TIMER_open(TIMER_DEV0, TIMER_OPEN_RESET);

/* Write configuration structure values to Timer control */
/* registers. */
TIMER_config(mhTimer, &myTConfig);

/* Get Event ID associated with Timer interrupt */
eventId = TIMER_getEventId(mhTimer);

/* Clear any pending Timer interrupts */
IRQ_clear(eventId);

/* Place event ID in interrupt map for dispatcher */
IRQ_plug(eventId,timerIsr);

/* Enable Timer interrupt */
IRQ_enable(eventId);

/* Enable all maskable interrupts */
IRQ_globalEnable();

/* Start Timer */
TIMER_start(mhTimer);

/* wait for 20 timer periods */
while(timer_int_cnt < 20);

/* We are through with the Timer, so close it */
TIMER_close(mhTimer);

/* Restore previous state of INTM */
IRQ_globalRestore(old_intm);

if (timer_int_cnt < 20)
++err;

printf("%s\n",err?"Timer example FAILED":"Timer example PASSED");
printf("\n");
}

/*----------------------------------------------------------------------------*/

/* Timer ISR - will be called by DSP/BIOS dispatcher */
interrupt void timerIsr(void) {
TIMER_stop(mhTimer);
++timer_int_cnt;
TIMER_start(mhTimer);
}

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru