Потому что тогда (uint16_t)(LCD_REG) превратит значение адреса в двухбайтное целое число. Во-первых, адрес может быть числом как меньше 2 байт, так и больше, и в последнем случае мы его обрежем приведя к двухбайтному целому типу. Во-вторых, в Си нельзя разадресовать просто число, только какой-нибудь указатель. Такой вот уж стандарт языка, нету там простой конструкции "записать по адресу N", приходится по несколько раз приводить типы один к другому.
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
На самом деле ничего. Любой assert_param в коде независимо от его параметра заменяется на конструкцию ((void)0), которая ничего не делает и игнорируется компилятором. Вообще, assert - это такая штука, которая валит программу с сообщением об ошибке, если переданный ей параметр равен нулю, или false. При отладке это может помочь найти всякие ошибки, вроде неправильного использования функции. Например:
Код:
void Foo(int a) { // Программа аварийно завершиться, если мы передадим функции // значение меньше ста или больше тысячи. assert(a < 100); assert(a > 1000);
... }
Когда программа отлажена и готова для выпуска, то все ассерты хорошо бы удалить, чтобы они не потребляли зря ресурсов. Шерстить все функции на их наличие не удобно, да и не всегда возможно, поэтому в файле, где объявлен assert (какой-нибудь assert.h), вводят конструкцию наподобие указанной тобой, чтобы все вызовы assert заменились препроцессором на нечто незначащее и были выкинуты компилятором. Вот так.
Да, если просто написать ноль, то компилятор возможно выдаст предупреждение о неиспользуемом значении, приведя его к void можно избежать этого. Лично я бы не стал использовать такую, несколько непривычную конструкцию для того, чтобы игнорировать вызов assert. По мне намного логичней выглядит такая запись:
Код:
#define assert(expr)
то есть, "пустое" макроопределение. В этом случае препроцессор не будет заменять его на незначащую конструкцию, а просто выкинет и все. Хотя, это дело вкуса.
Народ,подскажите пожалуйста. Разбираюсь с lwIP стеком. Скачал пример с сайта st. В дереве проекта напротив двух файлов 3 вертикальных красных квадратика. Что это такое? Не разу не сталкивался. Это влияет на процесс компиляции?
Это значит что настройки компиляции для этих файлов изменены и при компиляции будут задействованы именно они а не общие для проекта. Клик правой кнопкой по этим файлам в менеджере проекта -> Options for file 'xxx' и смотри изменения ...
Разбираюся с примером 3 отсюда http://radiokot.ru/articles/43/ плата влдешная, кейл5 выдает такую ошибку source\STM32_init\STM32_Init.c(31): error: #5: cannot open source input file "stm32f10x_lib.h": No such file or directory #include "stm32f10x_lib.h" // STM32F10x Library Definitions Скачивал новые библиотеки https://translate.googleusercontent.com ... pNpmO5EEiQ заменял файлы из примера на них, всеравно выдает тоже самое, в 3, 4, и 5 примерах. Куда копать подскажите пожалуйста.
Переподключил в файле INIT.c Начал компилить исходник.Но выдает 39 варнингов source\STM32_init\STM32_Reg.h(38): warning: #47-D: incompatible redefinition of macro "PWR_CR_DBP" (declared at line 1517 of ".\source\config\stm32f10x.h") такого плана. Может ктонибуть тыкнуть в рвбочие примеры. Заводские примеры stm32vldiscovery_package уже скачал.
Добрый день, подскажите почему программа не заходит в прерывание? Спойлер#include "stm32f10x.h" // Device header #include "stm32f10x_gpio.h" // Keil::Device:StdPeriph Drivers:GPIO #include "stm32f10x_rcc.h" // Keil::Device:StdPeriph Drivers:RCC
int main(void) { RCC_HSICmd(ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4 , ENABLE);
void TIM4_IRQnHandler(void) { TIM4->SR &= ~TIM_SR_UIF; } Есть ли в keil флаг глобального разрешения прерываний, где его посмотреть? Хотелось бы понять выполняется ли команда __enable_irq ();
Последний раз редактировалось baghear Чт окт 30, 2014 20:57:27, всего редактировалось 2 раз(а).
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения