Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: File I/O в CCs 3.1
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
lib
Читаю файл, содержащий 16-битные числа, с помощью File I/O, соответственно SPRU328B by IT CCS User Guide. При открытии файла выбирался фильтр *.* (All files). В качечтве стартового адреса указываю глобальную переменную - массив short sample[160] . Параметр Length утанавливаю равным 160 - длина массива.
После точки чтения вывожу значения массива - везде 0, кроме последнего элемента, там 0ха0, т.е. 160.
Кроме этого, на прогресс-баре контроллера чтения/записи данных (форма с кнопками Play, Stop и др.) никаких изменений.

Подскажите, как правильно пользоваться File I/O, помогите убогому smile3046.gif

Заранее спасибо за ответы.
Doka
а как вы получили этоn файл?
при его составлении соблюден ли формат, описанный в SPRU328 ?
вообще можно попробовать сначала что-то записать в dat-файл (с настройками, которые вам нужны на чтение) и посмотреть какой реально заголовок там прописан - его и использовать для создания файла
lib
Ок, попробовал, создал из тестовых значений файл с заголовком COFF. Но мне нужно читать данные из обычного бинарника без заголовка. Нет ли возможности, не добавляя заголовок, это делать?
Или обязательно следует к своему бинарнику пришить заголовок?
И ещё - после введения в текст программы указателя и пересборки проекта почему при утаноске адреса в File I/O этот указатель сразу не определяется как правильный, выдаётся сообщение - "идентификатор не найден" ? При этом файл создаётся правильно.

Главный вопрос - обязательно ли добавлять заголовок к бинарнику?
Doka
Цитата(lib @ Aug 22 2006, 20:45) *
Главный вопрос - обязательно ли добавлять заголовок к бинарнику?
да. у COFF заголовок д.б. обязательно
http://en.wikipedia.org/wiki/COFF
http://osr5doc.ca.caldera.com:457/topics/COFF.html
lib
Сформировал я файл с COFF. Что-то не нашёл полного сходства с описанным в инете форматом.
Как сформировать заголовок для чтения бинарного файла? Нужно знать куда в память будут данные считаны?
Попробую добавить заголовок из сформированного в ходе записи файла. Результат опишу.
lib
И вот ещё - с записью файла всё нормально - объявил указатель, выделил память под него, записал туда данные. В точке записи по этому адресу читается всё нормально.
При чтении файла делаю то же самое - объявил ,выделил. Но при попытке указать в строке Адрес имя указателя выдаётся сообщение - "Please enter valid Start adres for file..."
Што ж не так?
Помогите тупичке...
PriBoris
Извините, но встряну в дискуссию.
Уже давно для записи/чтения между файлами и памятью использую GEL_MemorySave() и GEL_MemoryLoad() и бед не знаю.
lib
Посоветуйте почитать что-нибудь о GEL, для наиболее быстрого освоения подхода.
lib
Вот кусок кода, где хочу читать из файла:

Код
    short cp[0];
    cp[0] = 0;
    printf("%x   \n",cp[0]);    //Software probe point #1    
    for (i = 0; i <= 10; ) {
        i++;
        printf("%x   \n",cp[0]);   //Software probe point #2    
    }


В Software probe point #1 и Software probe point #2 должно происходить чтение файла. Файл имеет заголовок .dat файла CCS.

В окне FILE I/O (File input) следуещее:

Probe point: Connected Page: DATA
Address: cp
Length: 2


При нажатии ОК выдаётся сообщение

identifier not found cp



В окне Break/Probe Points (Probe points):

test.c line 125 (0x80096A) --> FILE IN E:\1.dat
test.c line 129 (0x800990) --> FILE IN E:\1.dat


wacko.gif


Люди добрые!!
Помогите освоить этот FILE I/O !!! Надеюсь на вас и уповаю! help.gif
Заранее спасибо.
Shamil.Ru
Цитата(lib @ Aug 29 2006, 12:51) *
Люди добрые!!
Помогите освоить этот FILE I/O !!! Надеюсь на вас и уповаю! help.gif
Заранее спасибо.

А если сделать cp глобальным? И еще попробовать в настройках пробпойнта _cp вместо cp (хотя в этом контексте должно быть без подчеркивания, но все же).
lib
Адрес глобального массива пропускает, но читать ничего не хочет - изменений данных в пробпоинте чтения нету.
При этом запись файла работает на УРА (кстати, что с подчёркиванием, что без него).
Ахтунг.
Shamil.Ru
Цитата(lib @ Aug 29 2006, 18:37) *
Адрес глобального массива пропускает, но читать ничего не хочет - изменений данных в пробпоинте чтения нету.
При этом запись файла работает на УРА (кстати, что с подчёркиванием, что без него).
Ахтунг.

Возможно область памяти защищена от записи. Конкретизируйте -- это в симуляторе или на железке? И в том и другом случае посмотрите на Memory Map (в первом случае в настройках композера, во втором -- в даташите на камень).
lib
Работа в симмуляторе. Насчёт доступа к памяти - посмотрю cmd-шник. Впрочем, пока вопрос отложу, буду использовать fread,fwrite.
Shamil.Ru
Цитата(lib @ Aug 30 2006, 11:18) *
Работа в симмуляторе. Насчёт доступа к памяти - посмотрю cmd-шник. Впрочем, пока вопрос отложу, буду использовать fread,fwrite.

Для симулятора надо смотреть меню Option -> Memory Map... и файл <CCS>\drivers\<sim>.cfg, который соответствует выбранному симулятору (в CCS Setup можно посмотреть название этого файла).
По идее если память Read-Only, то fread тоже не поможет. А если поможет, то причина не в этом.
lib
Можно использовать файл ***.cmd для определения областей памяти и доступа к ним.
Чтение сейчас выполняется fread-ом. Запись fwrite-ом упорно отказывается работать smile.gif)
Использую для записи в файл пробпоинт и out-файл. smile.gif
Потом буду анализировать.
Shamil.Ru
Цитата(lib @ Aug 30 2006, 14:10) *
Можно использовать файл ***.cmd для определения областей памяти и доступа к ним.
Чтение сейчас выполняется fread-ом. Запись fwrite-ом упорно отказывается работать smile.gif)
Использую для записи в файл пробпоинт и out-файл. smile.gif
Потом буду анализировать.

CMD-файл -- это для линкера, не влияет это, если не ошибаюсь, конечно smile.gif

А вообще чудеса у вас конечно происходят. С симулятором играться -- неблагодарное дело, надо на железо переходить, оно обычно более адекватно себя ведет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.