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

 
 
> Keil Оптимизатор
vlad_new
сообщение Jan 16 2012, 16:45
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Как использовать переменные типа volatile и одновременно пользоваться стандартными библиотеками, где все сплошником char*.
Приходится везде вписыать что то типа:
volatile char Buf1[100], Buf2[100];
.....
memcopy((char*)Buf1,(char*)Buf2,20);
.....
Если же Buf не будут volatile, то оптимизатор выбрасывает строки типа: Buf1[0]=7;
Может как то можно переопределить в билиотеках char на volatile char, ну или еще как то справится с этими неудобствами?

Сообщение отредактировал vlad_new - Jan 16 2012, 16:49
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Jan 16 2012, 19:34
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Этот код какой-то кривой. Например, переменная 'char Buf_RS485;' используется как массив. Что это? Неточно запостили? Будьте любезны постить реальный код. Кто знает, что Вы там ещё переиначили? И лучше с отступами, а также обрамлять тегами (code)(/code).
Вы подозреваете баг в компиляторе, а я подозреваю баг в программе. Чаще бывает второе.
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Jan 16 2012, 19:51
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Цитата(scifi @ Jan 16 2012, 23:34) *
Этот код какой-то кривой. Например, переменная 'char Buf_RS485;' используется как массив. Что это? Неточно запостили? Будьте любезны постить реальный код. Кто знает, что Вы там ещё переиначили? И лучше с отступами, а также обрамлять тегами (code)(/code).
Вы подозреваете баг в компиляторе, а я подозреваю баг в программе. Чаще бывает второе.

Уже подправил. Реальный код слишком длинный. К тому же похожие проблеммы с оптимизатором не редки. И как правило когда индекс =0, или он const.
Иногда помагало обозвать переменную индекса массива как static. Но вот в этом куске бубны с танцами не помогли.

Сообщение отредактировал vlad_new - Jan 16 2012, 19:52
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 16 2012, 20:03
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(vlad_new @ Jan 16 2012, 23:51) *
Уже подправил. Реальный код слишком длинный. К тому же похожие проблеммы с оптимизатором не редки. И как правило когда индекс =0, или он const.
Иногда помагало обозвать переменную индекса массива как static. Но вот в этом куске бубны с танцами не помогли.

Это глюки в программе с вероятностью 99%.
Поскольку реальный код видеть нет возможности, то больше сказать нечего. Даже если бы был реальный код, было бы слишком трудно в нём разобраться, так как написан он (если судить по показанному отрывку) не самым лучшим образом, мягко говоря.

Update:
Забыл добавить. О глюках судят по результатам выполнения программы. Например, если содержимое пакета данных на проводе отличается от ожидаемого. Если Вы смотрите на содержимое переменных в отладчике и видите неожиданные значения - не факт, что это глюк. На высоких уровнях оптимизации бывает так, что данные отладчика весьма слабо коррелируют с исходным кодом. И вообще отлаживать удобнее на самом низком уровне оптимизации.
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Jan 16 2012, 20:12
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Цитата(scifi @ Jan 17 2012, 00:03) *
Это глюки в программе с вероятностью 99%.
Поскольку реальный код видеть нет возможности, то больше сказать нечего. Даже если бы был реальный код, было бы слишком трудно в нём разобраться, так как написан он (если судить по показанному отрывку) не самым лучшим образом, мягко говоря.

Да отступы почему то здесь не выходят, хотя в режиме редактирования я их вижу. А на счет глюков в программе: ну так она же работает если без оптимизатора или
Buf_RS485 описать как vu8 ( volatile unsigned char ), но тогда в сотнях местах приходится вписывать явное преобразование типов. memcopy((char*)Buf_RS485,.... )

Updete: Да я в таких случиях смотрю код ассемблера. А о веревке: Так и есть другое устройство принимает пакет с ошибочной длинной.


Сообщение отредактировал vlad_new - Jan 16 2012, 20:18
Go to the top of the page
 
+Quote Post
Allregia
сообщение Jan 16 2012, 20:17
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(vlad_new @ Jan 16 2012, 22:12) *
Да отступы почему то здесь не выходят, хотя в режиме редактирования я их вижу.


Потому что Вы не оформили свой код в теги [сode] [/сode]

Если бы оформили - все бы отсупало:
Код
с начала
      с отступом 8 пробелов
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Jan 16 2012, 20:20
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Цитата(Allregia @ Jan 17 2012, 00:17) *
Потому что Вы не оформили свой код в теги [сode] [/сode]

Если бы оформили - все бы отсупало:
Код
с начала
      с отступом 8 пробелов

Не знал что так надо. Век живи век учись. Ща попробую.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- vlad_new   Keil Оптимизатор   Jan 16 2012, 16:45
- - scifi   Цитата(vlad_new @ Jan 16 2012, 20:45) Есл...   Jan 16 2012, 18:08
|- - vlad_new   Цитата(scifi @ Jan 16 2012, 22:08) А поче...   Jan 16 2012, 18:43
- - Genadi Zawidowski   Несовсем понятно о какой строчке идёт речь. Можект...   Jan 16 2012, 18:57
|- - vlad_new   Цитата(Genadi Zawidowski @ Jan 16 2012, 22...   Jan 16 2012, 19:07
||- - scifi   Цитата(vlad_new @ Jan 17 2012, 00:12) А н...   Jan 16 2012, 20:20
||- - aaarrr   Цитата(vlad_new @ Jan 17 2012, 00:12) А н...   Jan 16 2012, 20:24
||- - vlad_new   Цитата(aaarrr @ Jan 17 2012, 00:20) Подоб...   Jan 16 2012, 20:30
|||- - aaarrr   Цитата(vlad_new @ Jan 17 2012, 00:30) Вне...   Jan 16 2012, 20:35
|||- - scifi   Цитата(vlad_new @ Jan 17 2012, 00:30) Ест...   Jan 16 2012, 20:36
|||- - vlad_new   Цитата(scifi @ Jan 17 2012, 00:36) Можно ...   Jan 16 2012, 20:51
|||- - aaarrr   Цитата(vlad_new @ Jan 17 2012, 00:51) Но ...   Jan 16 2012, 21:23
|||- - vlad_new   Цитата(aaarrr @ Jan 17 2012, 01:23) Позво...   Jan 16 2012, 21:35
|||- - scifi   Опять всё по кругу... Цитата(vlad_new @ Jan ...   Jan 17 2012, 06:16
||- - scifi   Цитата(aaarrr @ Jan 17 2012, 00:24) Стран...   Jan 16 2012, 20:31
|||- - aaarrr   Цитата(scifi @ Jan 17 2012, 00:31) Зачем ...   Jan 16 2012, 20:37
||- - vlad_new   Цитата(aaarrr @ Jan 17 2012, 00:24) Подоб...   Jan 16 2012, 20:32
|- - aaarrr   Цитата(vlad_new @ Jan 16 2012, 23:51) Реа...   Jan 16 2012, 20:13
- - scifi   Да, забыл. Можно просто макрос. Ну и я переврал не...   Jan 16 2012, 21:05
|- - vlad_new   Цитата(scifi @ Jan 17 2012, 01:05) Да, за...   Jan 16 2012, 21:08
- - _Ivana   Продолжу от лица неопытных новичков Можно было ...   Jan 17 2012, 17:07
|- - aaarrr   Цитата(_Ivana @ Jan 17 2012, 21:07) Два р...   Jan 17 2012, 17:14
- - _Ivana   Хороший вопрос! Я сначала написал, а потом на...   Jan 17 2012, 17:22
- - aaarrr   Зачем, нет ЗАЧЕМ делить на 16 последовательным выч...   Jan 17 2012, 18:13
- - _Ivana   ЦитатаЗачем, нет ЗАЧЕМ делить на 16 последовательн...   Jan 17 2012, 18:25
- - aaarrr   Цитата(_Ivana @ Jan 17 2012, 22:25) Напри...   Jan 17 2012, 18:34
- - vlad_new   Я тут попробывал интерсный тип указателя к библиот...   Jan 19 2012, 01:04
- - XVR   Цитата(vlad_new @ Jan 19 2012, 05:04) Я т...   Jan 19 2012, 09:26


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

 


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


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