реклама на сайте
подробности

 
 
> Как сказать по IARски?
Dog Pawlowa
сообщение Jan 7 2008, 10:10
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Адаптирую позаимствованное smile.gif

В произведении есть такие строки:
#define strncmp_flash(sram,sflash,n) strncmp_P(sram,PSTR(sflash),n)

strncmp_flash(cl,"help",4);

strncmp_P в IARе не нашел, PSTR тоже.
Не подскажете, кто праздновать устал, как это записать по IAR'ски?
Можно это сделать без копирования флэшевой строки в ОЗУ?
Спасибо.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Waso
сообщение Jun 9 2008, 05:13
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470



День добрый! Назрел такой вопрос: как ИАР-у(4.20) сказать чтобы перед циклом запомнил в регистр процессора адрес регистра выходных данных и потом не грузил его снова каждый раз. (Нужно ускорить процесс). Написал так:
Код
register uint16_t *pcSource;
register uint32_t *pOut;
        pcSource = (uint16_t*)( xRxDescriptors[ ulNextRxBuffer ].addr & emacADDRESS_MASK);
pin_off(clk_pin);
  // from  AT91SAM7X256.h :    
  //#define AT91C_PIOA_ODSR ((AT91_REG *)     0xFFFFF438) // (PIOA) Output Data Status Register
        pOut = (uint32_t*) AT91C_PIOA_ODSR;
    while( ulTotalFrameLength)
    {
                  *pOut = *(pcSource++);
                  pin_on(clk_pin);
                  ulTotalFrameLength --;
                  pin_off(clk_pin);
            }
Но в результате компиляции упорно получается следующее:
Код
//  385         pOut = (uint32_t*) AT91C_PIOA_ODSR;
        LDR      R3,??vEMACRead_and_Go_0+0x8 ;; 0xfffff430
        CMP      R5,#+0
        BEQ      ??vEMACRead_and_Go_4
//  396                   *pOut = *(pcSource++);
??vEMACRead_and_Go_5:
        LDR      R6,??vEMACRead_and_Go_0+0xC ;; 0xfffff438
        LDRH     R7,[R4, #+0]
        STR      R7,[R6, #+0]
        ADDS     R4,R4,#+2
//  399                   pin_on(clk_pin);
        MOVS     R6,#+128
        LSLS     R6,R6,#+10      ;; #+131072
        STR      R6,[R3, #+0]
//  400                   ulTotalFrameLength --;
        SUBS     R5,R5,#+1
//  401                   pin_off(clk_pin);
        STR      R6,[R2, #+0]
...
Тоесть при инициализации pOut в регистр пишется совсем другой адрес, который затем используется совсем в другом месте - макросом pin_on. Это макросы из ascold.h - знатокам знаком этот хедер. Оптимизация выставлена максимальная. При других уровнях оптимизации компилятор и вовсе игнорирует переменную pOut.
Как это победить?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dog Pawlowa   Как сказать по IARски?   Jan 7 2008, 10:10
- - Baser   Цитата(Dog Pawlowa @ Jan 7 2008, 12:10) s...   Jan 7 2008, 10:30
- - Сергей Борщ   Код#include <pgmspace.h> void Test(...   Jan 7 2008, 10:30
- - SSerge   А ещё рекомендую прочитать в доке на компилятор пр...   Jan 8 2008, 00:56
|- - Baser   Цитата(SSerge @ Jan 8 2008, 02:56) С испо...   Jan 8 2008, 07:43
|- - &-rey   2: SSerge А у вас какая версия IAR ? Дело в том чт...   Jan 11 2008, 10:00
|- - SSerge   > А у вас какая версия IAR ? 4.12A   Jan 11 2008, 16:36
- - vet   он ее вроде бы и в данном случае игнорирует. можно...   Jun 9 2008, 05:21
- - Waso   Нет. всеравно не хочет. дело в том что там в цикле...   Jun 9 2008, 07:43
- - vet   Скомпилировал ради интереса этот пример. Код//#pra...   Jun 9 2008, 09:20
- - Waso   0_0 Красиво компилит! Только что заметил что у...   Jun 10 2008, 07:57
- - vet   приведенный мной выше листинг - это код THUMB. на ...   Jun 10 2008, 09:45
- - vashurin   Привет всем. Не стал создавать новую тему решил на...   Jul 15 2008, 06:24
- - vet   vashurin Код1 char __flash *p = (char __flash ...   Jul 15 2008, 09:52


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01398 секунд с 7
ELECTRONIX ©2004-2016