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

 
 
> volatile, тонкости
klen
сообщение Dec 15 2010, 20:08
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(_3m @ Dec 15 2010, 21:46) *
crying.gif crying.gif crying.gif
ыы-ы-ы...
у меня 32-х битный линукс и 64 поставить нет никакой возможности
Уважаемый klen, выкладывайте хотя бы исходники.

дык исходники в транке - бери кто хочеш sm.gif делай что хочеш

а че возможности нету то? на телефоне чтоль кодите? sm.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Jat
сообщение Dec 16 2010, 03:51
Сообщение #2





Группа: Участник
Сообщений: 8
Регистрация: 6-03-06
Из: Новосибирск
Пользователь №: 15 027



Вот примерчик ошибки в генерации кода для cortex

код такой

volatile int *p;
void proc(void) { *p = 1; }

здесь чтения переменной быть *p быть не должно!
только запись!
а генерится и чтение тоже

CODE

proc:
movw r3, #:lower16:p
movt r3, #:upper16:p
ldr r3, [r3, #0] !!!!!!!!!!!!!!!!! Во это совсем не надо!
mov r2, #1
str r2, [r3, #0]
bx lr
.size proc, .-proc
.comm p,4,4
.ident "GCC: (Klen's GCC package (KGP) for ARM/elf platform) 4.6.0 20101212 (experimental)"





Сообщение отредактировал Jat - Dec 16 2010, 03:57
Go to the top of the page
 
+Quote Post
Jat
сообщение Dec 16 2010, 04:22
Сообщение #3





Группа: Участник
Сообщений: 8
Регистрация: 6-03-06
Из: Новосибирск
Пользователь №: 15 027



Да, прошу прощения, это я попутался!
Сомнения у меня возникли вот из этого куска листинга

CODE
226:Lib/StdPeriph/src/stm32f10x_rcc.c **** void RCC_DeInit(void)
227:Lib/StdPeriph/src/stm32f10x_rcc.c **** {
26 .loc 1 227 0
27 .cfi_startproc
28 @ args = 0, pretend = 0, frame = 0
29 @ frame_needed = 0, uses_anonymous_args = 0
30 @ link register save eliminated.
228:Lib/StdPeriph/src/stm32f10x_rcc.c **** /* Set HSION bit */
229:Lib/StdPeriph/src/stm32f10x_rcc.c **** RCC->CR |= (uint32_t)0x00000001;
31 .loc 1 229 0
32 0000 104B ldr r3, .L2
33 0002 1A68 ldr r2, [r3, #0]
34 0004 1968 ldr r1, [r3, #0]
35 0006 42F00102 orr r2, r2, #1
36 000a 1A60 str r2, [r3, #0]
230:Lib/StdPeriph/src/stm32f10x_rcc.c ****
231:Lib/StdPeriph/src/stm32f10x_rcc.c **** /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
232:Lib/StdPeriph/src/stm32f10x_rcc.c **** #ifndef STM32F10X_CL
233:Lib/StdPeriph/src/stm32f10x_rcc.c **** RCC->CFGR &= (uint32_t)0xF8FF0000;
37 .loc 1 233 0
38 000c 5968 ldr r1, [r3, #4]
39 000e 0E4A ldr r2, .L2+4
40 0010 0A40 ands r2, r2, r1
41 0012 5968 ldr r1, [r3, #4]
42 0014 5A60 str r2, [r3, #4]


Сообщение отредактировал Jat - Dec 16 2010, 06:21
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Dec 16 2010, 07:02
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(Jat @ Dec 16 2010, 12:22) *
Да, прошу прощения, это я попутался!
Сомнения у меня возникли вот из этого куска листинга

А почему в листинге двойное чтение памяти/периферии?
Смысла я не понимаю.

Цитата(ReAl @ Dec 16 2010, 14:52) *
Т.е. чтение var тут как ни крути, а есть.

Чтение одинарное есть. А двойное для волатила это как бы перебор. Можно и на грабли нарваться.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Jat
сообщение Dec 18 2010, 08:05
Сообщение #5





Группа: Участник
Сообщений: 8
Регистрация: 6-03-06
Из: Новосибирск
Пользователь №: 15 027



Цитата(GetSmart @ Dec 16 2010, 16:02) *
А почему в листинге двойное чтение памяти/периферии?
Смысла я не понимаю.


А его и нет... laughing.gif
Это ошибка кодогенерации...

Цитата(GetSmart @ Dec 16 2010, 16:02) *
Чтение одинарное есть. А двойное для волатила это как бы перебор. Можно и на грабли нарваться.


Именно... нарвался... crying.gif

Разобрался как это обойти.
Такой эффект вызывает ключ -fpack-struct
Без него все генерится нормально. Никаких лишних чтений.

Go to the top of the page
 
+Quote Post
GetSmart
сообщение Dec 18 2010, 08:21
Сообщение #6


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(Jat @ Dec 18 2010, 16:05) *
Это ошибка кодогенерации...

Я конечно так и понял. Не понял зачем оно так "ошибается".


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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