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

IAR Linker как совместить секции CODE и DATA

Чип CY7C68013A, ядро 8051, флеш отсутствует.

Программа загружается в RAM 16кб по USB.

 

Файл линкера определяет in chip RAM как CODE.

Поэтому изменить содержимое этой секции невозможно, тк она read only с точки зрения

компилятора и нет инструкций поддерживающих туда запись. Можно только читать.

Хотя на самом деле аппаратно поддерживается чтение и запись с помощью DPTR но компилятор это злое дело пресекает.

Поэтому модифицировать код программно не удаётся.

 

Вопрос: Можно ли каким способом можно указать линкеру, что секция памяти CODE RW а не R?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, Gradient said:

Вопрос: Можно ли каким способом можно указать линкеру, что секция памяти CODE RW а не R?

Угу, переписать или написть свой скрипт линкера. Ему вообще по-барабану какая и где память.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, Gradient said:

Вы уважаемый снова за старое?

Не понял. Вы мне следователь что-ли?

2 minutes ago, Gradient said:

Пример приведите плиз.

Нет у меня примера для вашего МК. Но я точно знаю, что линкер это должен делать. Какая ему-то разница? Он ничего сам о памяти не знает. Он читает только то, что написано в скрипте.

Выложите свой скрипт. Посмотрю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы вероятно ничего не знаете, но пытаетесь давать бестолковые советы в каждой теме.

В чем я вижу и преуспели, судя по числу сообщений.

 

Если секция CODE, попытка записи туда компилятором запрещается.

Если секция не CODE, код из неё не выполняется... так и как изменить изнутри код чтоб он далее выполнялся?

 

Это долбанутый старый чип.

Там всё плохо.

 

>datasheet

> xcl файл в аттачменте

CY7C68013A_xcl.zip

Изменено пользователем Gradient

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, Gradient said:

Хотя на самом деле аппаратно поддерживается чтение и запись с помощью DPTR но компилятор это злое дело пресекает.

Поэтому модифицировать код программно не удаётся.

Нельзя ли сделать функцию (с асм-вставками?), которая пишет что надо и куда надо? Уж это компилятор точно не сможет пресечь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал... но почему то данные попадают в XDATA а не в CODE.

  byte_write_code_ram:

  //unsigned short address: R3=H, R2=L  
  mov  DPH, R3    
  mov  DPL, R2
 
  //char data: R1
  mov  A, R1
 
  //Write
  movx @DPTR, A        
  ret

По сути: movx  всё делает правильно, она и должна писать в XDATA

По идее надо применять movc, но такой команды нет... ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 minutes ago, Gradient said:

Сделал... но почему то данные попадают в XDATA а не в CODE.

Какие же претензии к компилятору? Уж он тем более запутается :acute:

Этот 8051 - древнее г. мамонта. Он и так кривой сам по себе, а этот сайпресс сделал его ещё немного кривее. Давно я с ним работал, подзабылось. Вспоминать совсем не хочется...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, Gradient сказал:

Дешевле и быстрее USB для High-speed не нашел.

Придётся с этим работать.

А зачем там HS? Для GPIF? Так для GPIF x51-ядро не нужно после инициализации.

Да и вообще - зачем именно самомодифицирующийся код? Может просто обойтись без него?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вероятно надо что-то "подкрутить" в верхних регистрах конфигурации, ведь как то USB-engine туда пишет.

Устройство должно менять конфиги по команде извне, там ещё BT чип прикручен.

HS важен для синхронизации часов, тк задержки доставки пакета у FSpeed не приемлимые.

Для науки это... физические эксперименты.

Изменено пользователем Gradient

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 минут назад, Gradient сказал:

Вероятно надо что-то "подкрутить" в верхних регистрах конфигурации, ведь как то USB-engine туда пишет.

Устройство должно менять конфиги по команде извне, там ещё BT чип прикручен.

Но зачем для этого что-то писать в CODE?? :wacko2: "Переконфигурить" - точно так же как и "конфигурить при старте".

7 минут назад, Gradient сказал:

HS важен для синхронизации часов, тк задержки доставки пакета у FSpeed не приемлимые.

Мне кажется у Вас что-то не так с постановкой задачи. Синхронизации каких-либо часов задержки передачи не страшны от слова "совсем". Разве что если нужно синхроинизровать какое-то готовое устройство с кривым алгоритмом синхронизации, который никак нельзя изменить.

Страшен джиттер. Но думаю что и в HS он будет не меньше чем в FS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Писать в CODE потому, как планирую подгружать код по I2C и выполнять.

Задержка пакета, это если вы хотите его отправить а контроллер хоста занят и вам надо ждать как минимум 1ms.

Джитер серьёзно меньше, уже это проверил. HS работает гораздо лучше, как минимум 8 раз, и это уже много лучше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, Gradient сказал:

Задержка пакета, это если вы хотите его отправить а контроллер хоста занят и вам надо ждать как минимум 1ms.

Откройте для себя изохронные передачи. И контроллер хоста перестанет быть занят.  :smile:

Кроме того для синхронизации можно использовать например SOF.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

>> Синхронизации каких-либо часов задержки передачи не страшны от слова "совсем"

Вот тут можно поподробнее.

Мне надо засинхронизировать 2 процесса с периодом примерно 4мс, чтоб начало совпадало.

Причем одно из устройств запаяно в стеклянной банке и там вакуум и флаг старта туда передаётся через BT канал от PC.

Изменено пользователем Gradient

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...