Jump to content

    

InsolentS

Свой
  • Content Count

    414
  • Joined

  • Last visited

Community Reputation

0 Обычный

About InsolentS

  • Rank
    Местный
  • Birthday 08/03/1987

Контакты

  • Сайт
    http://www.akopjan.com
  • ICQ
    665353
  1. "Стандартные" разъемы для SWD

    Цитата(adnega @ Jun 7 2015, 18:17) А попробуйте ноги SWD не сконфигурировать под SWD... Пробовал. Восстанавливать соединение приходилось следующим образом: замыкать reset вручную, нажимать "Connect" в J-Flash и отпускать reset. Вообще - согласен, в таких случаях лучше иметь reset на swd разъёме. Можно его вывести на 5-й пин, тогда проводочки будут подходить к 4-х пиновым девайсам..
  2. "Стандартные" разъемы для SWD

    Мне нравится 4х контактный разъем как на отладочных платах stm32. Ни разу не было потребности во внешнем Reset.
  3. Ура! Живой человек проявил интерес к моему вопросу!! Кодstatic FRESULT res;   static uint32_t total_size, free_size; static FATFS *fs_ptr; res = f_mkfs("", 0, 1);        res = f_getfree("", &free_size, &fs_ptr);        total_size = (fs_ptr->n_fatent - 2) * fs_ptr->csize * 512; /* TODO: Abstract out the sector size */ free_size = free_size * fs_ptr->csize * 512; Как видите, ничего особенного. total_size и free_size в байтах.
  4. Всем привет! Балуюсь с FatFs поверх AT45. Размер носителя 1мегабайт. После форматирования с помощью f_mkfs наблюдаю ровно 3/4 свободного места на диске (т.е. 768кб). Не понимаю, как служебная область Fat12 может так много занимать, ведь диск у меня всего-то 2048 кластеров размером (кластер = 1 сектор, 1 сектор = 512байт). Это, в теории, получается 1.5байт * 2048кластеров = 3кб на собственно таблицу. Я понимаю, что там ещё есть загрузочные сектора и прочая служебная информация, но ведь не 256кб Я что-то не помню, чтобы у дискеты на 1.44мб было зарезервировано столько места под FAT. Мои предположения: 1) Встроенное в FatFs форматирование чего-то не так форматирует. 2) Я не докурил документацию на Fat. Любая помощь будет принята с благодарностью
  5. Ищу работу.

    Цитата(Lenel @ Jan 29 2015, 16:37) Большой опыт по проектированию и разработке импульсных источников питания для РЭА и светодиодной техники. Отписал в личку
  6. Цитата(AndrewN @ Aug 7 2014, 18:35) Жаль, что не удалось узнать, что думает экзаминатор по поводу своей задачи... ОР молчит... Прошу прощения, под свалившейся на меня кучей дел, совсем забыл про этот топик. Ваша логика совершенно верная и ответ должен был быть в точности таким, как Вы предположили. Мне очень стыдно, что я сам до такого не додумался Спасибо за то что пнули в верном направлении)
  7. Проект Wi-fi Cam(Photo)

    Опять кардеры развлекаются
  8. Цитата(Kapatos @ Dec 16 2014, 01:43) Здравствуйте) прошу помочь в разводке печатной платы , учусь в колледже на 3 курсе, преподаватель дала электрическую схему и спецификацию, не объяснив, как сделать эту работу!?!? Что мешает спросить/погуглить?
  9. Цитата(x893 @ Aug 3 2014, 18:29) Всё гораздо проще - просто посмотрите дебаггером - всё зависит от оптимизации - и ваш интервьюер просто не сказал вам все данные. но если добавить volatile - проблем бы было меньше. Это называется - срубить не разбираясь. Если вы сразу не задали вопрос про оптимизацию и volatile - значит понимания нет - а код тут не при чем Спасибо за участие в обсуждении)) Но, мне кажется, что дело не в этом совершенно. Задача имеет чисто алгоритмическое, логическое решение. Результат и решение не имеют привязки к аппаратной платформе, компилятору, оптимизатору и т.п. Этот код предоставлен as-is и вопрос не в том, как сделать из него нормальный код (кстати, если бы переменная была volatile, это разве что-нибудь бы поменяло?).
  10. На работу всё-таки взяли, попробую найти там этого интервьювера и докопаться до истины..
  11. Тут дело не в особенностях какого-то конкретного железа или RTOS (как кстати частота тиков планировщика связана с разрядностью процессора?). Есть определённая последовательность действий, которая в итоге приводит к результату 2. Какие это могут быть действия описаны в листинге в условии задачи. Тут вопрос исключительно на логику. Цитата(ViKo @ Aug 1 2014, 01:00) Условная ОС не может быть проверена в железе, как сказано в первом сообщении. Не уклоняйтесь от решения задачи, вдруг тоже такое когда-нибудь попадётся
  12. Цитата(ViKo @ Jul 31 2014, 23:17) Для начала неплохо бы понять, в какой ОС есть функция thread_join() и как она работает. Это условная RTOS. thread_join() просто ждёт пока все потоки завершатся
  13. Прошу прощения, по условиям задачи RTOS вытесняющая, процессор 32бит, count++ компилируется именно в те 3 ассемблерные команды, которые приведены и дело точно не в printf. Даже ежу понятно, что этот код никуда не годится, так не делают и т.п. Но вопрос был именно почему работа определённой программы приводит к определённому результату, шаг за шагом.. Цитата(Fat Robot @ Jul 31 2014, 15:35) Кстати, какой результат в итоге? Сделали вам предложение? Жду..
  14. Всем привет! Недавно был на интервью в одной компании и "застрял" на вопросе про RTOS. После недели поисков ответ так и не был найден.. Условие задачи такое: есть 5 потоков, каждый из них увеличивает в цикле общую переменную count на 1. После завершения работы этих потоков, значение count выводится на экран. Кодunsigned int count = 0; void thread(void) {   unsigned int i;   for(i = 0; i < 5; i++)   {     count++;   } } void main(void) {   thread_create(thread, 5); // Создаём 5 экземпляров потока thread и запускаем их   thread_join(); // Ждём пока все 5 потоков завершатся   printf("%u", count); // Выводим значение count на экран } Внимание вопрос: почему программа печатает 2?? Договорились с интервьювером, что операция count++ состоит из 3х ассемблерных команд: Код  LDR reg, count   ADD reg, #1   STR reg, count Т.к. переменная count не защищена ни мьютексом, ни критической секцией, самый пессимистичный вариант, который я "раскрутил" выглядит так: Код// начало работы thread1   LDR reg, count // count = 0, thread1.reg = 0   ADD reg, #1 // thread1.reg = 1 // thread1 вытеснен планировщиком, начало работы thread2   LDR reg, count // count = 0, thread2.reg = 0   ADD reg, #1 // thread2.reg = 1   STR reg, count // count = 1 // thread2 завершил работу, управление возвращается к thread1   STR reg, count // count = 1 т.е. в результате один поток делает override результата второго потока и count = 1 после выполнения всех потоков (а не 5, как было бы с мьютексом). Но: хоть один из потоков все равно увеличит count на 1 в этой схеме, т.е. в результате работы программы count будет не меньше, чем 5. Как же получается 2? (со слов интервьювера, он наблюдал такой эффект в реальном железе). Подсказка от интервьювера: результат не зависит ни от количества потоков, ни от количества итераций в цикле for