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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Помогите прочесь адрес, mega16 + nanopan3561
$ilent
сообщение Apr 21 2006, 10:09
Сообщение #16


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

Группа: Новичок
Сообщений: 116
Регистрация: 14-02-06
Из: Москва. Перово
Пользователь №: 14 296



Появилась еще одна проблемка:
массив который мне необходимо передать очень громадный - компилятор ругается.
Массив организоват просто:
unsigned char init0[]=
{
---Его размер: 9К---
};
Где он распологается, что ему не хватает места?
Куда мне его покласть и как это зделать, чтоб места зватило?

Сообщение отредактировал $ilent - Apr 21 2006, 10:32
Go to the top of the page
 
+Quote Post
$ilent
сообщение Apr 21 2006, 11:12
Сообщение #17


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

Группа: Новичок
Сообщений: 116
Регистрация: 14-02-06
Из: Москва. Перово
Пользователь №: 14 296



Нашёл сам, всем спасибо...
Go to the top of the page
 
+Quote Post
$ilent
сообщение May 3 2006, 07:07
Сообщение #18


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

Группа: Новичок
Сообщений: 116
Регистрация: 14-02-06
Из: Москва. Перово
Пользователь №: 14 296



Появился еще один вопрос:
Код
есть 2 массива:
const unsigned char cmd[]=
{0x81, 0x80,};
const unsigned char data[]=
{0x00,};
char len = sizeof(data) / sizeof(data[0]);
они посылаются этими вызовами по очереди
       transmit(cmd, sizeof(cmd));
       transmit(data, sizeof(data));
вот сюда:
void transmit(const unsigned char *p, int len)
{
    spi_init();
      while(len)
       {       
         SPDR = *p;
         p++;
         len--;
        while (!(SPSR & (1<<SPIF)));        
         data = SPDR;               
      }
    disable_spi();
}

смысл такой: Меняться может только массив дата: (от 1 до 128 байт),
но в зависимости от количества байт в этом массиве, должен меняться первый байт массива цмд: т.е.
0x01 читать 1 байт
0x81 писать 1 байт

0x05 читать 5 байт
0x85 писать 5 байт
вот мне и надо менять этот байтавтоматиески...

Фактически мне надо сложить этот первый байт заменив его:
#define wr 0x80
#define rd 0x00
с переменной лен, но практичеки не выходит.
Может кто знает как?
Go to the top of the page
 
+Quote Post
$ilent
сообщение Jun 30 2006, 10:16
Сообщение #19


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

Группа: Новичок
Сообщений: 116
Регистрация: 14-02-06
Из: Москва. Перово
Пользователь №: 14 296



помогите приз в слудующем вопросе:
за счёт того вызов "NTRXUpdate()" постоянно крутится в цикле, то при "падении" порта PORTD 2, 3, постоянно вызывается "SendCmd(1);, "SendCmd(1);" а необходимо всего один раз за одно подение порта (сколь бы оно не длилось). По прерыванию не подходит - виснем. Короче необходимо выполнять "SendCmd(1);" один раз за одно нажатие на кнопку. Вот. Помогите кто знает как.
Код
void main (void)
{
while(1)    
    {
        /*
         * Check for incomming packets
         */
    NTRXUpdate();
        if (!(PIND & (1 << PD2)))
           {
             SendCmd(1);
           }
        if (!(PIND & (1 << PD3)))
           {
             SendCmd(2);
           }
                }
}

void SendCmd (char value)
{
    switch (value)
    {        
        case 1:        txCmd();
                    break;
        case 2:     workCmd();
                    break;
        default:     break;
    }
}
char i=1;
void txCmd(void)
{

    i++;
        if ((i%2)==0)
             NTRXSendMessage (txCmdStart, sizeof(txCmdStart));
        else
             NTRXSendMessage (txCmdStop, sizeof(txCmdStop));
}
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th August 2025 - 16:52
Рейтинг@Mail.ru


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