ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
86895
Gamma SPb (18.04.2007 13:06, просмотров: 1215)
Если кто еще не в курсе. В версии 2.05 компилятора C30 для PIC24/dsPIC появилась очень полезная фича - работа с любыми внешними файлами (в папке проекта, например) в симуляторе. Что это дает: - можно открыть файл на чтение/запись, получать оттуда данные и соответственно их туда писать. - гораздо удобнее чем все симуляции UART-ов (потому как UART SIM I/O открывает файл как текстовый). Как это сделать: - микрочип добавил в библиотеку низкоуровневых функций (lib30) функцию открытия файла на носителе компа: int __attach_input_file(const char *) - позволяет програмисту "присоединить" хост-файл к стандартному потоку ввода stdin. Более подробно в readme.txt на компилятор и в документе "16-BIT LANGUAGE TOOLS LIBRARIES" в папке doc компилятора. Надо только будет включить симуляцию UART в свойствах симулятора, иначе ничего работать не будет. После этого можно открывать любой файл и получать из него данные. Но надо иметь в виду, что таким способом файл открывается в режиме "r" (текстовый только на чтение). Интереснее работать с двоичными файлами, поэтому желательно библиотеку перекомпилить (батник идет в составе). Если внимательно посмотреть на исходники, видно что микрочип добавил работу с файлами в симуляторе во все низкоуровневые функции. Поэтому можно сделать веселее - открывать файл на чтение и запись, и даже создавать файлы. Вот это круто. <c> #include <libpic30.h> #include <stdio.h> FILE *fp; int main(void) { volatile U16 ret; volatile U32 cnt = 0; volatile U08 sym; /* просто открываем файл input.txt в папке sim, относительно загружаемого в симулятор coff файла */ fp = fopen("sim\\input.txt", "r+b"); while (!feof(fp)) { sym = getc(fp); cnt++; } /* конец файла - теперь можем туда чего нибудь записать */ ret = putc(0x55, fp); fflush(fp); /* записалсо */ ret = fclose(fp); /* попробуем теперь файл создать... */ fp = fopen("sim\\test_w.txt", "a+b"); /* создалсо!!! */ ret = putc(0x55, fp); fflush(fp); ret = fclose(fp); for (;;); return 0; } </c> очень удобно...