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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> IAR и строки - помогите
dowhile
сообщение Mar 6 2009, 07:30
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 40
Регистрация: 14-02-09
Пользователь №: 44 853



в проекте IAR 5.20 ( вот архив с проектом gsm pager - http://slil.ru/27027257 ) есть строки одинаковой длины типа ...

const char __flash stroka1[] = "12F04EF0";

const char __flash stroka2[] = "1B207438";


...
...


где то в функции func происходит выбор
какую строку вписать в массив temp

void func(char cause)
{
temp = NULL;

switch(cause)
{
case 2:
temp = stroka1;
break;

case 3:
temp = stroka2;
break;


Затем строка из temp выводится в USART

===================================

Вопрос - как правильно объявить массив temp ???

Можно ли копировать так строки ?

===================================

В исходнике этот тип обозначен как PGM_P и использован в нескольких местах программы.

но отсутствует #define PGM_P

Нужно сделать:

#define PGM_P что тут написать ?
Прикрепленные файлы
Прикрепленный файл  gsm_sms.rar ( 12.28 килобайт ) Кол-во скачиваний: 19
 
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Mar 6 2009, 07:42
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(dowhile @ Mar 6 2009, 10:30) *
какую строку вписать в массив temp
...
Можно ли копировать так строки ?


temp - это не массив, а указатель. В вашей функции вы не копируете строку, а просто указываете на нужную.

temp надо объявить как
char __flash* temp;

вместо #define PGM_P значительно безопаснее использовать typedef:
typedef char __flash* PGM_P;

и дальше

PGM_P temp;
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Mar 6 2009, 07:58
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(Непомнящий Евгений @ Mar 6 2009, 10:42) *
temp надо объявить как
char __flash* temp;


const char __flash* temp;
Причина редактирования: Излишнее цитирование.
Go to the top of the page
 
+Quote Post
dowhile
сообщение Mar 6 2009, 08:05
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 40
Регистрация: 14-02-09
Пользователь №: 44 853



Спасибо за помощь - я серьезно. Но ваши варианты не работают ! Если есть минутка откройте поект пожалуйста в IAR.

Вот скриншоты ошибок.

Спасибо. Но с вашими вариантами по 12 ошибок - типа тип не тот







Если вообще не определять то 5 ошибок в тех местах как описано в вопросе в начале топика.


Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 6 2009, 08:17
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Ну так напишите, как ему хочется - const char* __flash temp
ну или const char __flash* temp ...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Mar 6 2009, 08:18
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



const или в обоих случаях пишите или в обоих не пишите. Так как все равно __flash, то оба варианта эквивалентны.
Go to the top of the page
 
+Quote Post
dowhile
сообщение Mar 6 2009, 08:23
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 40
Регистрация: 14-02-09
Пользователь №: 44 853



Итак !!! typedef char const __flash* PGM_P; он съел таки ! Ура.

Цитата(MrYuran @ Mar 6 2009, 11:17) *
Ну так напишите, как ему хочется - const char* __flash temp
ну или const char __flash* temp ...

Дак в том то и дело что писал ТАК !

а надо было наоборот ! ЧАР а потом КОНСТ ! во как.

===================

Но теперь линкер заругался на сегменты что-то. Как исправить ситуацию ?

Вот брань линкера дословно: at90s2313


Building configuration: Gsm_sms - Debug
Updating build tree...
gsm_avrv4_c.c

Linking
Error[e16]: Segment CODE (size: 0x664 align: 0x1) is too long for segment definition. At least 0xaa more bytes needed. The problem occurred while processing the
segment placement command "-Z(CODE)CODE=_..X_FLASH_BASE-_..X_FLASH_END", where at the moment of placement the available memory ranges were
"CODE:246-7ff"
Reserved ranges relevant to this placement:
CODE:16-23d NEAR_F
CODE:23e-245 INITTAB
CODE:246-7ff CODE
Error while running Linker

Total number of errors: 1
Total number of warnings: 0

Сообщение отредактировал dowhile - Mar 6 2009, 08:25
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 6 2009, 08:28
Сообщение #8


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата
Segment CODE (size: 0x664 align: 0x1) is too long for segment definition. At least 0xaa more bytes needed

насколько я понимаю, код не влазит в отведённый ему сегмент.
Проверьте настройки проекта на предмет правильности установки типа контроллера


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
dowhile
сообщение Mar 6 2009, 08:32
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 40
Регистрация: 14-02-09
Пользователь №: 44 853



Да я его туда сам вписывал. Может еще где подправить что-то нужно ? Если не в лом скачайте проект плиз - 12 кб всего.


Прикрепленные файлы
Прикрепленный файл  1_gsm_sms.rar ( 11.97 килобайт ) Кол-во скачиваний: 16
 
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 6 2009, 08:35
Сообщение #10


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



ну тогда порпробуйте поширше чип взять.
Если прокатит - надо поиграть с оптимизацией, авось утопчет эти 170 байт


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
dowhile
сообщение Mar 6 2009, 09:02
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 40
Регистрация: 14-02-09
Пользователь №: 44 853



Цитата(MrYuran @ Mar 6 2009, 11:35) *
ну тогда порпробуйте поширше чип взять.
Если прокатит - надо поиграть с оптимизацией, авось утопчет эти 170 байт


Усилил оптимизацию, но все равно не хватает.

Линкер пишет что сегмент кода 0x5c8 (это 1480) и нужно еще 0xe (это 14) байт.

Чего 1480+14 = 1496 байт в AT90s2313 или в любом другом AVR ???

понял - это пространство CODE:246-7ff а где уменьшить число 246h в каких настройках ?

===========================

Error[e16]: Segment CODE (size: 0x5c8 align: 0x1) is too long for segment definition. At least 0xe more bytes needed.

The problem occurred while processing the
segment placement command "-Z(CODE)CODE=_..X_FLASH_BASE-_..X_FLASH_END", where at the moment of placement the available memory ranges were

"CODE:246-7ff"

Reserved ranges relevant to this placement:
CODE:16-23d NEAR_F
CODE:23e-245 INITTAB
CODE:246-7ff CODE

Error while running Linker

Total number of errors: 1
Total number of warnings: 0

Вот текст файла линкера lnk2313t.xcl - как в сегмент CODE добавить 20 байт ?

CODE
/* - lnk2313.xcl -
*
* XLINK command file for the ICCAVR C-compiler using the --cpu=2313, -mt
* options. Segments are defined for an AT90S2313 without external memory.
*
* Usage: xlink your_file(s) -f lnk2313
*
* File version: $Revision: 5794 $
*/

/*
* Modify the lines below to alter the size of the RSTACK, CSTACK and HEAP
* segments. These need to be fine tuned to suit your specific application.
* The '_..X_' prefix is used by C-SPY as an indication that the label should
* not be displayed in the dissassembly window.
*/
-D_..X_CSTACK_SIZE=20 /* 32 bytes for auto variables and register save. */
-D_..X_RSTACK_SIZE=10 /* 16 bytes for return addresses, equivalent to */
/* 8 levels of calls, including interrupts. */
-D_..X_HEAP_SIZE=10 /* 16 bytes of heap. */
-D_..X_TINY_HEAP_SIZE=10 /* 16 bytes of heap. */

/* Define CPU */
-ca90

/*
* The following segments are located in the internal memory of
* the AT90S2313. Do not change these lines.
*/

/* Code memory */
-Z(CODE)INTVEC=0-15 /* 11 Interrupt vectors * 2 bytes each */

/* Fill unused interrupt vector's with RETI */
-H1895 -h(CODE)0-15

-Z(CODE)TINY_F=16-FF
-Z(CODE)SWITCH,INITTAB,DIFUNCT=16-7FF
-Z(CODE)CODE=16-7FF
-Z(CODE)NEAR_F=16-7FF
-Z(CODE)TINY_ID,NEAR_ID=16-7FF
-Z(CODE)CHECKSUM#7FF


/* Data memory */

-Z(DATA)TINY_I,TINY_Z,TINY_N=60-DF
-Z(DATA)CSTACK+_..X_CSTACK_SIZE=60-DF
-Z(DATA)HEAP+_..X_HEAP_SIZE=60-DF
-Z(DATA)IOSTREAM_N#60-DF
-Z(DATA)TINY_HEAP+_..X_TINY_HEAP_SIZE=60-DF
-Z(DATA)RSTACK+_..X_RSTACK_SIZE=60-DF
-Z(DATA)NEAR_I,NEAR_Z=60-DF

/* Internal eeprom memory */
-Z(XDATA)EEPROM_I,EEPROM_N=0-7F

/* Select reduced "printf" support to reduce library size.
See configuration section in manual concerning printf/sprintf. */
/*Dlib*/
-e_PrintfSmall=_Printf

/*Clib*/
-e_small_write=_formatted_write

/*Dlib and Clib*/
-e_small_write_P=_formatted_write_P

/* Disable floating-point support in "scanf" to reduce library size.
See configuration section in manual concerning scanf/sscanf */

/*Dlib*/
-e_ScanfSmall=_Scanf

/*Clib*/
-e_medium_read=_formatted_read

/*Dlib and Clib*/
-e_medium_read_P=_formatted_read_P

/* Suppress one warning which is not relevant for this processor */
-w29

/* Code will now reside in file aout.a90 or aout.d90, unless -o is specified */
/* .d90 is the default if debug system is linked (option -r) */
/* .a90 is the default without debugging. Default format is -Fmotorola */


\\\\\\\\\\\\\\\

выкинул из проги одну большую строку - влезла в память.


Теперь новая напасть - что за ошибка ?


Building configuration: Gsm_sms - Debug
Updating build tree...
gsm_avrv4_c.c
Linking
Error[e46]: Undefined external "__iar_Strchr" referred in gsm_avrv4_c ( C:\_WORKs\__gsm sms\Debug\Obj\gsm_avrv4_c.r90 )
Error[e46]: Undefined external "__iar_Strstr" referred in gsm_avrv4_c ( C:\_WORKs\__gsm sms\Debug\Obj\gsm_avrv4_c.r90 )
Error while running Linker

Total number of errors: 2
Total number of warnings: 0
Причина редактирования: Уменьшение видимого размера цитаты исходника.
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Mar 6 2009, 09:03
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



[quote name='dowhile' date='Mar 6 2009, 11:55' post='557393']

Если Вы хотите использовать или менять данные настройки линкера, снимите галку
в System configuration в том окошке, которое Вы показали.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 6 2009, 09:05
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(dowhile @ Mar 6 2009, 11:02) *
понял - это пространство CODE:246-7ff а где уменьшить число 246h в каких настройках ?
А нигде. Вы же сами видите, там лежат другие (не менее необходимые) данные:

CODE:16-23d NEAR_F
CODE:23e-245 INITTAB


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 6 2009, 09:05
Сообщение #14


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Попробуйте ещё скомпилить релиз - в дебаг может всякую хрень насовать


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
dowhile
сообщение Mar 6 2009, 09:08
Сообщение #15


Участник
*

Группа: Новичок
Сообщений: 40
Регистрация: 14-02-09
Пользователь №: 44 853



В Релизе таже батва что в Дебаге - вот. Что это такое ?

Building configuration: Gsm_sms - Release
Updating build tree...
gsm_avrv4_c.c
Linking
Error[e46]: Undefined external "__iar_Strchr" referred in gsm_avrv4_c ( C:\_WORKs\__gsm sms\Release\Obj\gsm_avrv4_c.r90 )
Error[e46]: Undefined external "__iar_Strstr" referred in gsm_avrv4_c ( C:\_WORKs\__gsm sms\Release\Obj\gsm_avrv4_c.r90 )
Error while running Linker

Total number of errors: 2
Total number of warnings: 0
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 13:07
Рейтинг@Mail.ru


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