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

memory

Участник
  • Постов

    13
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Контакты

  • Сайт
    Array
  1. Проблема в том что устрройство планируется использовать на разных машинах
  2. Огромное спасибо тем кто откликнулся!!! Остался один вопрос - какой период таймаута??? Устройство будит использоваться в автомобиле, мне точно нужно знать подключено устройство CAN шине или нет.
  3. Прочитал русcкую документацию, затем англоязычную, на сколько понял – контроллер входит “режим отключения от шины” при переполнении счетчика ошибок. В этом режиме контроллеру запрещено любое воздействие на шину (например посылать кадр пассивной ошибки). Вопрос в другом как контролировать подключения шины к контроллеру? Смотреть прием, при каждом удачном приёме увеличивать значение какой ни будь переменой. В цикле таймера проверять, увеличилось значение переменной или нет? С каким периодом вызывать таймер? Может есть у кого и другие варианты проверки подключения шины?
  4. at90can128 пытаюсь отследить отключение от шины КАН, /* таймер период 10мс */ if(CANGSTA_BOFF) PORTD = 0x00;//LED else PORTD = 0x40;//LED откидываю провада от шины, бит BOFF - 0 что-то делаю нетак?
  5. atmega16m1|atmega32m1|atmega64m1+ UART

    Всем привет, проблема в следующем - м1 автомобильный контроллер и у него обьеденили UART передатчик с LIN передатчиком. Регистры тоже объединили не могу настроить UART. #include <iom16m1.h> #include <inavr.h> //------------------------------------------------------------------------------ //************************ Register LINCR ************************************** #define LSWRES 7 #define LIN13 6 #define LCONF1 5 #define LCONF0 4 #define LENA 3 //1 = Enable (both LIN and UART modes). #define LCMD2 2 #define LCMD1 1 #define LCMD0 0 //************************ Register LINSIR ************************************** #define LTXOK 1 #define LRXOK 0 void main(void) { DDRD=(1<<6);//LED PORTD=(1<<6);//LED LINCR=(1<<LENA)|(1<<LCMD2);//LCMD[2:0]=100, UART Rx & Tx Byte disable LINBRR = 38;//LDIV[11..0] = ( fclki/o / LBT[5..0] x BAUD ) - 1 while(1) { __disable_interrupt(); //CLI //ждем окончания передачи предыдущего байта while( ( LINSIR & ( 1 << LTXOK ) ) == 0 );//прога не выходит из цикла PORTD ^=(1<<6); //передача данных LINDAT = 170; __enable_interrupt(); } } /прога не выходит из цикла???? смотрел осцилографом на ноге ТХ может её подтенуть надо куда нибудь
  6. AVR+CAN

    Спасибо, ещё вопрос, таких пар получается много например 8 и 29+1 10 и 23+1 12 и 19+1 15 и 15+1 16 и 14 +1 20 и 11 +1 24 и 9 + 1 все они дают нулевую ошибку, какая пара предпочтительна
  7. AVR+CAN

    не могу понять, из каких соображений выбирается минимальный квант времени - TQ, в документации только написанно что число квантов в бите должно быть 8 - 25
  8. AVR+CAN

    Привет всем участникам форума!!! Может есть у кого данные для настройки AVR чипа, для приема передачи CAN, для скорости 50 кБит. CANBT1 = ?; CANBT2 = ?; CANBT3 = ?; кварц 12мГц
  9. выложите ассемблер, вашего кода
  10. Я могу ошибется, но по-моему для всех IAR одинаково WORKSPACE - RELEASE
  11. В принципе все работает , только без __flash компилятор не инициализирует значения массива а так всё нормально #pragma location=0x1000 __flash const unsigned char DATA[32][16]={//0x00 Ford_Fokus_2 0x00,0x00,0x04,0x20,0x08,0x59,0xEF,0x00,0x5E,0x42,0x10,0x03,0x32,0x00,0x96,0xFF, //0x01 Ford_Fokus_3 0x00,0x00,0x02,0x18,0x08,0x99,0x22,0x8F,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0xFF, //0x02 Ford_Mondeo
  12. Спасибо всем откликнувшимся, директива __flash решила проблему на 99% , уже и массив в ОЗУ не располагается, и место на стек хватает. Как сделать так, чтобы массив располагался в конце кода программы, например его первый элемент должен находится в ячейке 500hex. Этот массив будут редактировать люди, не имеющие отношение к программированию, надо сделать так чтобы дамп программы а именно массив хорошо читался в блокноте.
  13. Iar объявление динамического массива Привет всем участникам форума, проблема в следующем - есть глобальный массив unsigned char DATA[32][16], при компиляции выскакивает ошибка линковщика Error[e16]: Segment CSTACK (size: 0x100 align: 0) is too long for segment definition. At least 0xb more bytes needed. The problem occurred while processing the segment placement command "-Z(DATA)CSTACK+_..X_CSTACK_SIZE=_..X_SRAM_BASE-_..X_SRAM_END", where at the moment of placement the available memory ranges were "DATA:40b-4ff" Reserved ranges relevant to this placement: DATA:100-304 NEAR_I DATA:305-3ca NEAR_Z DATA:3cb-40a RSTACK DATA:40b-4ff CSTACK Насколько я понял этот массив передается через стек и не вмещается в нем, как объявить его динамически, то-есть привязать конкретной области памяти флеша.
×
×
  • Создать...