Jump to content

    

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

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

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

 

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

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

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

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

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

 

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

 

Share this post


Link to post
Share on other sites
2 hours ago, Gradient said:

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
Just now, Gradient said:

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

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

2 minutes ago, Gradient said:

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

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

 

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

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

 

>datasheet

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

CY7C68013A_xcl.zip

Edited by Gradient

Share this post


Link to post
Share on other sites
2 hours ago, Gradient said:

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

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

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

Share this post


Link to post
Share on other sites

Сделал... но почему то данные попадают в 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, но такой команды нет... ;)

Share this post


Link to post
Share on other sites
15 minutes ago, Gradient said:

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
3 минуты назад, Gradient сказал:

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Edited by Gradient

Share this post


Link to post
Share on other sites
7 минут назад, Gradient сказал:

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites
4 минуты назад, Gradient сказал:

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

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

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

Share this post


Link to post
Share on other sites

 

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

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

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

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

Edited by Gradient

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now