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

 
 
> Си указатель на таблицу, Как пристегнуть массив?
Alhen
сообщение Feb 2 2006, 18:19
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 161
Регистрация: 17-08-04
Из: Караганда
Пользователь №: 516



Все решено перехожу на Си!
Только вот незадача, первая же простенькая практическая задача
для AVR контроллера поставила в тупик.
Суть программы:
- в памяти программ размещается таблица или массив;
- берем по очереди байт из массива и выкидываем в коммуникационный порт.

Массив находится в пристегиваемом файле и я не понимаю как указать
какому либо поинтеру на начало таблицы.
На ассемблере все получается достаточно гармонично:
Код
    ldi zh,high(Transmit_Buff*2); Load Z-pointer
    ldi zl,low(Transmit_Buff*2); to the beginning of Receive_Buff

Transmit_Loop:

USART_Transmit:
; Wait for empty transmit buffer
    sbis UCSRA,UDRE
    rjmp USART_Transmit
; Put data  into buffer, sends the data
    lpm  Data_IN, Z+
    out UDR, Data_IN

        ldi  TempReg,high(end_of_file*2); Check if we got high end_of_file
        cp   TempReg,zh        ; Compare
        breq got_high_end_of_file; If equal then check the Low part
            rjmp go_further:

got_high_end_of_file:
        ldi  TempReg,low(end_of_file*2); Check if we got low end_of_file
        cp   TempReg,zl        ; Compare
        breq got_low_end_of_file; If equal then reload Z-pointer
            rjmp go_further:

got_low_end_of_file:
        ldi zh,high(Transmit_Buff*2); Load Z-pointer
        ldi zl,low(Transmit_Buff*2); to the beginning of Receive_Buff

go_further:
rjmp Transmit_Loop

Transmit_Buff:

.include "AIS_LOG.txt"

end_of_file:
nop

Реализация подбной программы на Си AVR для меня загадка.
Тем более что я нашел подходящую конструкцию на VisualDSP,
Код
complex_fract16 in[VEC_SIZE] =
{
    #include "in.dat"
};

но в CVAVR такое не проходит!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
beer_warrior
сообщение Feb 2 2006, 18:56
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Код
struct {
        volatile    BYTE    mode;
        volatile    WORD    timeout;
        volatile    BYTE    errc;
        
        volatile    WORD    tx_cnt;
        volatile    WORD    tx_len;
        BYTE*tx_buf;
        
        volatile    WORD    rx_cnt;
        volatile    WORD    rx_len;
        BYTE*                rx_buf;
        } UCB;

//RS485 direction
#define    DIR_BIT        2
#define DIR_TX        PORTD |= (1<<DIR_BIT)
#define DIR_RX        PORTD &= ~(1<<DIR_BIT)
//--------------------------------------------------------------------------
//UART modes
#define    TX_BUSY        0
#define    RX_BUSY        1
#define    RX_READY    2

//--------------------------------------------------------------------------
SIGNAL(SIG_USART_TRANS)
{
if(UCB.tx_cnt < UCB.tx_len)
    {
    UDR0 = UCB.tx_buf[UCB.tx_cnt++];
    }
else
    {
    UCB.tx_cnt = 0;
    CLR_TX_BUSY;
    _NOP();
    _NOP();
    _NOP();
    DIR_RX;
    }
}
//--------------------------------------------------------------------------
BYTE TxStart(WORD len)
{
if(UCB.mode & TX_BUSY) return 1;
DIR_TX;
_NOP();
_NOP();
_NOP();
UCB.tx_cnt  = 0;
UCB.tx_len  = len;
SET_TX_BUSY;
SIG_USART_TRANS();
return 0;
}
//--------------------------------------------------------------------------

Структура UCB содержит связанные с УАРТом переменные
присутствует кое-что лишнее для RS485, можно выкинуть.
Указатель UCB.tx_buf указывает на массив для отправки.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alhen   Си указатель на таблицу   Feb 2 2006, 18:19
- - Old1   Цитата(Alhen @ Feb 2 2006, 22:19) Массив ...   Feb 2 2006, 19:43
- - Alhen   Цитата__flash unsigned char TABL[10]={1,2,3,4,5,6,...   Feb 3 2006, 04:52
|- - vet   Цитата(Alhen @ Feb 3 2006, 07:52) Цитата ...   Feb 3 2006, 06:45
|- - Old1   Цитата(Alhen @ Feb 3 2006, 08:52) Не могу...   Feb 3 2006, 07:46
- - BVU   Таблицу всегда можно представить массивом, либо ст...   Feb 3 2006, 08:05
- - Nixon   Я делал вот так: в файле "data.txt" : К...   Feb 3 2006, 08:30
- - AndyBig   А еще в IAR можно пристегнуть любой файл как бинар...   Feb 3 2006, 10:07
- - k0t   Проще и удобнее всего подключение файла делать так...   Feb 3 2006, 13:19
|- - Old1   Цитата(k0t @ Feb 3 2006, 17:19) Проще и у...   Feb 3 2006, 18:46
|- - vet   Цитата(Old1 @ Feb 3 2006, 21:46) Цитата(k...   Feb 3 2006, 21:02
- - Alhen   2Nixon Попробывал я обыграть макрос и в CodeVision...   Feb 4 2006, 06:00
|- - vet   Цитата(Alhen @ Feb 4 2006, 09:00) Уже виж...   Feb 4 2006, 12:42
- - k0t   Цитата(Old1 @ Feb 3 2006, 21:46) Цитата(k...   Feb 4 2006, 12:30
- - Old1   2 k0t & vet Спасибо, но, я уже сам понял, что ...   Feb 4 2006, 20:12
- - k0t   Это-ж в РУЧНУЮ делать прийдется. А прог, которые и...   Feb 6 2006, 06:55
- - Old1   Цитата(k0t @ Feb 6 2006, 09:55) Это-ж в Р...   Feb 6 2006, 18:13


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

 


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


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