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

Nick_Shl

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

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

  • Посещение

Репутация

0 Обычный

Информация о Nick_Shl

  • Звание
    Участник
    Участник
  1. А зачем так делать? Переключили выход на вход без подтяжки и диод гореть точно не будет :)
  2. помогите с printf

    А в CodeVision будет %p из флеш. Не понятно только одного: не ужели нельзя сделать LARGE модель с 32 битами на указатель, верхние 2 из которых использовать как признак типа памяти к которой доступаемся? А то приходится в некоторые свои функции передавать в указатели на void и признак куда он указывает, а внутри функции добавлять разбор...
  3. Разламывать чипы пробовали? Был случай - купили цапы CS. Не работали гады. Разломали - а кристалла-то нет! Кидалово вобщем...
  4. Там есть несколько таких мест. Одно из них обработчик команды CMD_LOAD_ADDRESS. Было: address_flash = ((*(rx_pntr+3)*256)+*(rx_pntr+4))*2; Стало: address_flash = 0; *(((unsigned char *)&address_flash) + 1) = *(rx_pntr + 3); *(((unsigned char *)&address_flash) + 0) = *(rx_pntr + 4); address_flash *= 2; Возможно проблема в нем. В этом коде отличий побольше. Новый даже длиннее на 3 команды.
  5. Она вообще не вызывается если не давать команды CMD_READ_FUSE_ISP или CMD_READ_LOCK_ISP. Чтение локов и фузов действительно не работает, но оно меня толком и не интересует.
  6. Код не мой. Return взят из какого-то файла скачанного из ветки в этом форуме. Но этот код к вышеописанной проблеме отношения не имеет.
  7. А я столкнулся с таким глюком: есть бутлоадер с эмуляцией STK500. Пишу через него - пишется нормально. Читаю - бывают ошибки, по адресу 0x4000 ошибок нет. Читаю ISP программатором - тех ошибок что показывал бутлоадер нет, по адресу 0x4000 лежит слово FFFF. Вроде помогла такая штука: Было: n_bytes = ((*(rx_pntr + 1) * 256) + *(rx_pntr + 2)); // number of databytes to read from flash Стало: *(((unsigned char *)&n_bytes) + 1) = *(rx_pntr + 1); *(((unsigned char *)&n_bytes) + 0) = *(rx_pntr + 2); Пробовал каждый раз на разных файлах, поэтому "вроде"... BootLoader.zip
  8. Зависает Atmega 64

    Программные ляпы тоже разные бывают. И если всё "правильно" делать то в этом цикле и обновление WDT может оказаться...
  9. А вы "советский инженер"(второй за последние сутки) сначала делаем, потом думаем. Для чего пишут документацию? Открываем "Help"(по F1, если е знаете). Далее "CodeVisionAVR C Compiler Reference-> Variables" и читаем: If not specifically initialized, static variables are automatically set to 0 at program startup. Ничего не читаем, а потом везде говорим "плохой компилятор"...
  10. AvrUsb500 by Petka

    Нужно как раз не заточенный паяльник :). Есть такое "волшебное" жало - микроволна называется... И флюс в шприце... Такой комбинацией 0,5 мм паял, хотя до этого всегда думал что руки кривые и паять я не умею и т.д. и т.п.
  11. unexpected REGDEF

    Ну в AVR'овском асме я не силен, так что с первого раза сложно понять что же хотят загрузить - адрес переменной указателя, или адрес на который этот указатель указывает. А для верности вообще можно так :): volatile char * volatile adr_sector;
  12. unexpected REGDEF

    Очень просто: нужно читать документацию! Компилятор оптимизирует код. Если на этапе компиляции получается так, что переменную можно засунуть в регистр - он так и делает, потому как это ускорит выполнение. А тут вы со своим кодом... Вобщем нужно заставить компилятор переменную положить в память. Открываем "Help -> CodeVisionAVR C Compiler Reference-> Variables" и читаем: The volatile modifier must be used in order to prevent a variable to be allocated to registers and to warn the compiler that it may be subject to outside change during evaluation. Вывод: объявлением переменной нужно добавить volatile. Вот так: volatile char *adr_sector;
  13. USB programmer AVR910

    Вышла новая версия AVR-Doper. Вышла уже давно, ещё 27-11-2008. Кроме заявленных изменений поменялась USB часть(что там не смотрел) и появился inf для Висты. Т.к. пока не балуюсь с МК изменил только сейчас. В архиве исходник и хекс. Хекс не заливал и не проверял, но, думаю, должен работать. ProtDoper.2008_11_27.zip
  14. Все зависит от того, что вы выкинули заменив точечками в switch'e возможно за этот if управление даже не выйдет. Кстати, насколько я припоминаю, у КодеВижена есть настройка какие варнинги выводить, а какие нет. Надо там глянуть не отключены ли.
  15. Если коротко - все! Нету в Си стрингов. Только массивы чаров. В данном случае вы объявили один символ. sprintf принимает первым аргументом указатель, а вы ему его не передали. Правильно так: #include <stdio.h> char idd2[тут количество символов в массиве]; sprintf(idd2,"%02X",10); либо так: #include <stdio.h> char idd2; sprintf(&idd2,"%1X",10); Но тогда вы получите один символ и если sprintf выдаст больше - потрете всё что лежит за idd2. Этот код дан для примера.
×
×
  • Создать...