|
|
  |
Запись файла в память программ |
|
|
|
Jan 9 2008, 11:43
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(SALOME @ Jan 9 2008, 14:12)  Задача такова: создается файл неких 8-байтовых констант. Длина файла до 30Кбайт. Требуется записать содержимое этого файла в память команд 51процессора. Файл создается кем? Вами? В каком виде данные? Создавайте его (файл) в виде кусочка программы инициализации массива данных и подключайте с помощью include. Например, на языке С это будет как-то так pdata char massiv[][8]= { #include "file.c" }; Файл file.c (это файл Ваших констант) должен иметь вид типа { 1, 2, 3, 4, 5, 6, 7, 8}, { 9,10,11,12,13,14,15,16}, ............. и т.д.
|
|
|
|
|
Jan 9 2008, 11:50
|
Частый гость
 
Группа: Свой
Сообщений: 170
Регистрация: 30-06-05
Из: Киев
Пользователь №: 6 426

|
Вот как сделано у меня: основная программа: Код Init_CE_DRam: $include(Pram13b.A51) файл Pram13b.A51: Код ;CE Program Image File (Verilog Hex) dw 020D6h,0743Dh,08F3Dh,0F03Dh,0B5D8h,020D8h,01FE6h,08FD8h dw 08F9Bh,0003Ch,00EE6h,0D03Ch,0B19Bh,0209Bh,08C9Bh,020D7h dw 0743Eh,08F3Eh,0F03Eh,0B5D9h,020D9h,01FE6h,08FD9h,08F9Bh .......................................................... Если конвертировать из BIN вручную долго то можно найти или написать мелкую программу для этих целей
|
|
|
|
|
Jan 10 2008, 04:14
|

Местный
  
Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349

|
Цитата(Палыч @ Jan 9 2008, 18:43)  Файл создается кем? Вами? В каком виде данные?
Файл file.c (это файл Ваших констант) должен иметь вид типа { 1, 2, 3, 4, 5, 6, 7, 8}, { 9,10,11,12,13,14,15,16}, ............. и т.д. Файл создается линкером и представляет собой последовательность команд для DSP. Вид у него - двоичные восьми разрядные коды (AF1C3B...), но можно и в INCLUDE виде (т.е. 0хАF, 0x1C, 0x3B, ...... Потом эти команды будут перегружаться в DSP по СОМ порту. По Вашему фрагменту я пробовала: создается массив из файла и вставляется в прогу. Но линковщик не понимает, что это за символы и выдает ошибку... Цитата(jack_avenger @ Jan 9 2008, 18:50)  Если конвертировать из BIN вручную долго то можно найти или написать мелкую программу для этих целей Не хотелось бы конвертировать...Может как-то по другому?
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
Jan 10 2008, 06:41
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(SALOME @ Jan 10 2008, 07:14)  Файл создается линкером и представляет собой последовательность команд для DSP. Вид у него - двоичные восьми разрядные коды (AF1C3B...), но можно и в INCLUDE виде (т.е. 0хАF, 0x1C, 0x3B, ...... Потом эти команды будут перегружаться в DSP по СОМ порту. По Вашему фрагменту я пробовала: создается массив из файла и вставляется в прогу. Но линковщик не понимает, что это за символы и выдает ошибку... Если у Вас - просто поток байтов, которые Вы будете передавать по UART, то можно не замарачиваться с тем, что передаваемые команды имеют восьмибайтное представление. Т.е. Код void WriteToDSP(char *buf, int len); // Ваша программа передачи буфера buf длинною len байт в DSP pdata char massiv[]= {
// file.c - файл, созданный линкером для DSP в include виде #include "file.c" }; .......................... WriteToDSP(massiv, sizeof(massiv)); P.S. Кстати, почему линковщик выдает ошибку? Что за ошибку? Транслятор - всё это пропускает? Может быть банально не хватает памяти?
|
|
|
|
|
Jan 10 2008, 08:23
|

Местный
  
Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349

|
Цитата(Палыч @ Jan 10 2008, 13:41)  pdata char massiv[]= {
// file.c - файл, созданный линкером для DSP в include виде #include "file.c" }; pdata - это область памяти в ОЗУ и она ограничена 256 байт. А мне надо запомнить в памяти команд :-(.
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
Jan 11 2008, 03:35
|

Местный
  
Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349

|
Цитата(Палыч @ Jan 10 2008, 15:30)  Извините - недоглядел, ошибся: "pdata" необходимо заменить на "code" Спасибо, Палыч. Программа выполнилась и сформировала файл как надо. #include <REG52.H> #include <stdio.h> void WriteToDSP(char *buf, int len); code char massiv[]= { #include "file.ldr" }; void main (void) { WriteToDSP(massiv, sizeof(massiv)); } Однако при линковке выдались предупреждения: WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: _WRITETODSP WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: _WRITETODSP. Чтобы это значило? Кроме того исходный файл принимается в INCLUDE виде, а в объектном коде - не понимает.
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|