-
- Что-то опять не выходит. Подробнее. -=John=-(673 знак., 16.11.2008 16:30)
- Снимаю вопрос. Все работает вот так. -=John=-(237 знак., 16.11.2008 16:38)
- "AD5300_Write ( &PORTC, 2, 128 );" Что говорить, очень информативно получилось :-) - Vladimir Ljaschko(17.11.2008 14:44)
- Да это просто пример - к реальной программе не имеет вообще никакого отношения. - -=John=-(17.11.2008 16:15)
- "AD5300_Write ( &PORTC, 2, 128 );" Что говорить, очень информативно получилось :-) - Vladimir Ljaschko(17.11.2008 14:44)
- Снимаю вопрос. Все работает вот так. -=John=-(237 знак., 16.11.2008 16:38)
- Всем спасибо. На след. неделе принесут плату - протестирую на железе. - -=John=-(12.11.2008 08:43)
- Я бы на твоём месте засосал бы хедер с sfr'ами в текстовый процессор и массовой командой replace сделал из него хедер с именами портов и адресами в памяти (там смещение нужно добавить 0x20). Типа #define pPORT *((volatile char *)(PORT+0x20)) - =AlexD=(11.11.2008 22:19)
- В AVR точно так же. Сергей Борщ(133 знак., 11.11.2008 18:55)
- Я что-то такое писал - не жреть. Порт - он sfr, написать -=John=-(67 знак., 11.11.2008 19:05)
- Что-то вы меня запутали. Не поленился, расчехлил IAR: Сергей Борщ(1797 знак., 11.11.2008 23:12)
- ну пусть будет void func (uint8_t volatile __io *port, uint8_t mask). А В пиках с понятной адресацией - как? - Сергей Борщ(11.11.2008 22:01)
- 4.20A не хочет - ругается Vit(103 знак., 11.11.2008 22:08)
- Хм, а привести __io к простому указателю он дает? Ведь все порты отображаются в АП данных, тока адреса на 0x20 больше. - she(11.11.2008 22:14)
- Ну дык даёт. Мне пофиг 0x20 там или сколько - компилер это умеет разгребать - нафига ему это ещё раз объяснять? - Vit(11.11.2008 22:36, ссылка)
- Сам численное значение модифицирует? Ух ты. Умный, зараза. - she(11.11.2008 22:43)
- Ну дык даёт. Мне пофиг 0x20 там или сколько - компилер это умеет разгребать - нафига ему это ещё раз объяснять? - Vit(11.11.2008 22:36, ссылка)
- Хм, а привести __io к простому указателю он дает? Ведь все порты отображаются в АП данных, тока адреса на 0x20 больше. - she(11.11.2008 22:14)
- 4.20A не хочет - ругается Vit(103 знак., 11.11.2008 22:08)
- Попробовал - компилится, но есть нюансы;) Vit(248 знак., 11.11.2008 20:20)
- тут ничего не напутано? Какой смысл в приведении типа внутри функции? Скорее оно нужно при вызове. - Сергей Борщ(11.11.2008 22:14)
- Из боязни;), так как через __generic не получилось. Я не знаю даже, работает оно или нет. Vit(76 знак., 11.11.2008 22:22)
- если внутри функции приведение не нужно, то на что же ругался компилятор у -=John=-? __generic - вообще неоправданная трата ресурсов в этом случае. Тип параметра известен заранее. - Сергей Борщ(11.11.2008 22:55)
- Понимаю так, что __io это атрибут, порождающий нечто похожее на #define PORTn (*(unsigned char*)(_ADDR+IO_BASE)), где IO_BASE равно известному 0x20, потому у него нет явной типизации, но некоторые действия как с указателями всё-таки применимы. Vit(729 знак., 12.11.2008 01:27)
- Атрибут __io еще меняет порядок чтения/записи байт в 2-х байтовых регистрах. Например позволяет работать с таймером как с int. - Михаил Е.(12.11.2008 11:44)
- Спасибо, интересно - Vit(12.11.2008 12:09)
- Атрибут __io еще меняет порядок чтения/записи байт в 2-х байтовых регистрах. Например позволяет работать с таймером как с int. - Михаил Е.(12.11.2008 11:44)
- Понимаю так, что __io это атрибут, порождающий нечто похожее на #define PORTn (*(unsigned char*)(_ADDR+IO_BASE)), где IO_BASE равно известному 0x20, потому у него нет явной типизации, но некоторые действия как с указателями всё-таки применимы. Vit(729 знак., 12.11.2008 01:27)
- Проверил в C-Spy - фунциклирует - Vit(11.11.2008 22:32)
- если внутри функции приведение не нужно, то на что же ругался компилятор у -=John=-? __generic - вообще неоправданная трата ресурсов в этом случае. Тип параметра известен заранее. - Сергей Борщ(11.11.2008 22:55)
- Из боязни;), так как через __generic не получилось. Я не знаю даже, работает оно или нет. Vit(76 знак., 11.11.2008 22:22)
- тут ничего не напутано? Какой смысл в приведении типа внутри функции? Скорее оно нужно при вызове. - Сергей Борщ(11.11.2008 22:14)
- Индекс периферийной микросхемы все равно нужно как-то добавить - создать массив указателей на порты, потом массив масок... Потом компилятор вызовет подпрограмму умножения для вычисления индекса. Внешне получится красиво, конечно. Но медленно. - Vladimir Ljaschko(11.11.2008 18:58)
- Я что-то такое писал - не жреть. Порт - он sfr, написать -=John=-(67 знак., 11.11.2008 19:05)
- Не нужно изобретать велосипед - пишется на ура через макросы и [инлайновые] функции практически на любом приличном компиляторе. Vladimir Ljaschko(363 знак., 11.11.2008 18:52)
- Да это вообще ужас. -=John=-(107 знак., 11.11.2008 19:08)
- В этом случае идеально подходит С++ и шаблоны. А на С можно вручную написать 4 функции uint8_t SPI_exchange(uint8_t) и передавать указатель на нужную функцию. Будет и быстрее и меньше по объему. - Сергей Борщ(11.11.2008 22:08)
- Ну, про 4 функции понятно - сам так с двумя делал. Но это экстенсивный путь развития. И некрасиво. - -=John=-(12.11.2008 08:36)
- И у меня пример из жизни. Свичи исключаются при оптимизации. - Vladimir Ljaschko(11.11.2008 19:11)
- В этом случае идеально подходит С++ и шаблоны. А на С можно вручную написать 4 функции uint8_t SPI_exchange(uint8_t) и передавать указатель на нужную функцию. Будет и быстрее и меньше по объему. - Сергей Борщ(11.11.2008 22:08)
- Э.. Так и я могу. Это не интересно. -=John=-(1246 знак., 11.11.2008 19:02)
- Как объявлен I2CClockA? - Сергей Борщ(11.11.2008 22:09)
- static volatile unsigned int * I2CClockA; - -=John=-(12.11.2008 08:47)
- И у IAR также. Можете смело использовать свои макросы. - Сергей Борщ(12.11.2008 11:43, ссылка)
- Спасибо, посмотрю внимательней на адреса. - -=John=-(12.11.2008 12:39)
- И у IAR также. Можете смело использовать свои макросы. - Сергей Борщ(12.11.2008 11:43, ссылка)
- static volatile unsigned int * I2CClockA; - -=John=-(12.11.2008 08:47)
- Понятно. Нужны шашечки :-) Но я предпочитаю ездить, определяя конкретные осмысленные макросы ногодрыганья. - Vladimir Ljaschko(11.11.2008 19:08)
- Да поехать-то оно поехало. Хочется красиво... -=John=-(319 знак., 11.11.2008 19:14)
- Да понятно. Но обычно с AVR приходится экономить время, возлагая это дело на препроцессор и оптимизацию, ессно. - Vladimir Ljaschko(11.11.2008 19:20)
- Это неверный способ экономии времени, ИМХО. -=John=-(307 знак., 11.11.2008 19:31)
- Вопрос спорный. В новом проекте и я переписываю макросы, так и вы переписываете. Кроме того, убойный аргумент - скорость контроллера. Я на STM32 вообще библиотеку использую со структурами, описывающими порты. Там времени вагон. - Vladimir Ljaschko(11.11.2008 19:47)
- Да, спор беспредметный. Каждый пишет как привык - так по любому быстрее получается. - -=John=-(11.11.2008 19:53)
- Вопрос спорный. В новом проекте и я переписываю макросы, так и вы переписываете. Кроме того, убойный аргумент - скорость контроллера. Я на STM32 вообще библиотеку использую со структурами, описывающими порты. Там времени вагон. - Vladimir Ljaschko(11.11.2008 19:47)
- Это неверный способ экономии времени, ИМХО. -=John=-(307 знак., 11.11.2008 19:31)
- Да понятно. Но обычно с AVR приходится экономить время, возлагая это дело на препроцессор и оптимизацию, ессно. - Vladimir Ljaschko(11.11.2008 19:20)
- Да поехать-то оно поехало. Хочется красиво... -=John=-(319 знак., 11.11.2008 19:14)
- Как объявлен I2CClockA? - Сергей Борщ(11.11.2008 22:09)
- Да это вообще ужас. -=John=-(107 знак., 11.11.2008 19:08)
- Что-то опять не выходит. Подробнее. -=John=-(673 знак., 16.11.2008 16:30)