Articles of встроенный

Embedded C – Слишком много аргументов функции (указатель)

Я пытаюсь вызвать следующий макрос в моем .cpp файле: #define IAP_ROM_LOCATION 0x1FFF1FF1UL #define IAP_EXECUTE_CMD(a, b) ((void (*)())(IAP_ROM_LOCATION))(a, b) Однако, когда я называю указанную функцию так: IAP_EXECUTE_CMD(0, 0); Я получаю сообщение об ошибке, указывающее слишком много аргументов? Как это? Буду признателен за любые указатели. Среда разработки – GCC для Cortex-M3.

Как запустить программу C без ОС на малиновой пи?

Я бы хотел поэкспериментировать с использованием малины Pi для некоторых различных низкоуровневых встроенных приложений. Единственная проблема заключается в том, что, в отличие от доступных микроcontrollerов AVR и PIC, Raspberry Pi обычно запускает ОС (например, Raspbian), который распределяет время процессора во всех запущенных программах и делает его нецелесообразным для некоторых приложений реального времени. Недавно я узнал, […]

Реализация Modbus в C для встроенной системы lpcxpresso

Я новичок в modbus, и мне нужно запрограммировать базовую плату lpcxpresso в качестве ведущего устройства для сбора показаний от энергетического прибора с использованием протокола RS485 Modbus. Я ознакомлен с протоколом (о PDU ADU, кодах функций, master-slave), прочитав спецификации Modbus.org. Однако у меня возникают трудности с реализацией при написании кода в C. Поэтому мои вопросы: Должен […]

#define против перечислений для адресации периферийных устройств

Я должен программировать периферийные регистры в микроcontrollerе на базе ARM9. Например, для USART я сохраняю соответствующие адреса памяти в enum : enum USART { US_BASE = (int) 0xFFFC4000, US_BRGR = US_BASE + 0x16, //… }; Затем я использую указатели в функции для инициализации регистров: void init_usart (void) { vuint* pBRGR = (vuint*) US_BRGR; *pBRGR = […]

Преобразование в ASCII в C

Используя микроcontroller (PIC18F4580), мне нужно собрать данные и отправить их на SD-карту для последующего анализа. Собранные данные будут иметь значения от 0 до 1023 или 0x0 и 0x3FF. Так что мне нужно сделать, это преобразовать 1023 в базу 10 строк буквальных значений ASCII (0x31, 0x30, 0x32, 0x33, …). Моя проблема заключается в том, что единственный […]

проблемы с fread () всегда возвращаются 1

Я посмотрел на подобные вопросы, но мой немного отличается. Я должен открыть файл в двоичном режиме и проверить, не возникает ли ошибка при чтении. Содержание файла: message1, message2, 53467 программа для чтения простого файла: int bytesRead; FILE* CSV; CSV = fopen(“\\Temp\\csv.txt”, “rb”); char dataBuf[128]; while ( (bytesRead = fread(dataBuf, 1, sizeof(dataBuf), CSV) > 0) ) […]

Встроенная функция ошибки компоновщика

Я получил некоторые compiler errors / компоновщика, и я не знаю, что это правильный метод для продолжения. Я в этой ситуации: ah: в этом файле определяется функция, объявленная как «встроенная», например: inline void foo1 (); bh: в этом файле определяется функция, объявленная как «встроенная», которая вызывает foo1 (): inline void foo2 (); main.c: есть некоторые […]

IAR определяет область памяти для пользовательских данных

Я хочу определить конкретную область памяти в микросхеме STM32, где хранятся некоторые строки. Я использую компилятор IAR, но я не нахожу простой пример, который может помочь мне правильно создать область с помощью файла icf. Как я могу создать регион и использовать этот регион в коде? Спасибо

Путаница в проверке файла с CRC16 в C

Здесь я хочу знать, как я могу реализовать вычисление CRC16 для любого типа файла, Здесь у меня есть идея о CRC16 и его логике кода. здесь я сделал одну функцию, которая принимает путь к файлу в качестве входного сигнала и узнает значение CRC этого. здесь я передаю имя файла в этой функции, и эта функция […]

Неблокирование чтения с фиксированными данными на входе

Я хочу использовать serial port для связи с другим устройством txdev, проблема в том, что txdev отправляет данные асинхронно, и я не хочу, чтобы функция read блокировалась, хорошо, что txdev отправляет данные с фиксированным размером, но я не знаете, как использовать этот трюк. что я делаю: fd = open(DEVICE_NAME, O_RDWR | O_NOCTTY); bzero(&termios_p, sizeof(termios_p)); termios_p.c_cflag […]