?

Log in

[icon] Opensource животворящий - Segmentation fault
View:Свежие записи.
View:Архив.
View:Друзья.
View:Личная информация.

Tags:
Security:
Subject:Opensource животворящий
Time:10:19 pm
Чем дальше в лес, тем странней процессоры. В этот раз копаюсь вот с таким товарищем:

CC26xx_Block_Diagram_LPRF_2_9_15

Три ядра: основное cortex m3, RF cortex-m0 и чего-то восьмибитное для низкопотребляющих сенсоров. Идея хороша - тушить основной прожорливый процессор и ждать прихода сигнала от сенсоров на меганизкопотребляющем ядре.

Гадство заключается в том, что самое вкусное ядро уже прошито и ничего с ним не сделаешь - дергай проприетарное апи и радуйся. Вся серия отличается, по сути, только прошивкой этого самого RF-ядра. Конкретно сейчас 2650 - мультипротокольное, рядом лежат 2640 - BLE.

С bluetooth возился очень много лет назад. На таком низком уровне с RF вообще не работал. А в следующем проекте вообще отдельный трансивер планируется. Но пока не буду сильно забегать вперед.

Что мне сразу понравилось - это наличие внутреннего dc/dc. Т.е. стартуешь на LDO, потом запускаешь DC/DC и переключаешься на него. Чего-то у EFM такого не припомню, а они тоже позиционируются как низкопотребляющие.

Что мне сразу не понравилось - это гребаная проприетарщина. Процентов 20 всех регистров описаны как internal. Как бы не пришлось мне этот проект добивать на IAR с проприетарными объектниками.

Второе, что не понравилось, это JTAG. Точнее cJTAG или IEEE 1149.7. Гадство. Я так и не понял, использует ли его кто-то помимо TI, но вещь странная.

Третье, что не понравилось - на серию отсутствует CMSIS как класс. Вот как может быть кортекс без общепринятого стандарта, а?

Третью проблему я решил просто. Написал свой CMSIS. Без блэкджека, конечно - описания битов регистров будут дополняться по мере моей необходимости. Вот что сабже делает. Пользуйтесь на здоровье :)
comments: Оставить комментарий Previous Entry Поделиться Next Entry


kincajou
Link:(Link)
Time:2017-01-31 08:25 pm
а 8-битное ядро какое? 8051?
(Ответить) (Thread)


mbr
Link:(Link)
Time:2017-01-31 08:26 pm
Пока еще не копал. Скорее всего оно, родное.
(Ответить) (Parent) (Thread)


kincajou
Link:(Link)
Time:2017-01-31 09:00 pm
жив, курилка!
(Ответить) (Parent) (Thread)


Sergey Gimaev
Link:(Link)
Time:2017-02-01 03:56 am
щас 8051 хорошие. одна операция на такт. к нему корки аппаратные, типа той же УСБ.
(Ответить) (Parent) (Thread)


kincajou
Link:(Link)
Time:2017-02-01 04:06 am
и всё так же по 256 байт на страницу?
(Ответить) (Parent) (Thread)


Sergey Gimaev
Link:(Link)
Time:2017-02-01 04:43 am
а оно как-то прозрачно переключается. не заметил =)
(Ответить) (Parent) (Thread)


eddy_em
Link:(Link)
Time:2017-02-01 05:10 am
__IO  uint32_t 
__I uint32_t,

Тебе не лень было uint32_t везде впихивать? Взял бы, да в typedef __IO и __I запихнул…

Edited at 2017-02-01 05:10 (UTC)
(Ответить) (Thread)


mbr
Link:(Link)
Time:2017-02-01 06:22 am
Есть принятый стиль кодирования. Незачем его ломать. А так копипастить 5 или 10 символов - не столь принципиально.

Меня больше бесят отступы в два пробела, но что делать - у всех так.
(Ответить) (Parent) (Thread)


eddy_em
Link:(Link)
Time:2017-02-01 06:46 am
Ну, твое дело.
Вот, кстати, для STM8 объявлять регистры наподобие STM32 — через структуры — нельзя: sdcc нихрена оптимизировать не умеет, поэтому вызов a->b раскрывается не в адрес сразу же, а сначала разыменовывается a, потом к нему добавляется смещение b…
ХЗ, может уже и починили, но когда я только начал формировать свой файлец с описанием всех регистров, это было так. Хорошо хоть, вообще поддержку STM8 добавили, а то пришлось бы в каком-нибудь вантузячьем говне компилять под виртуалбоксом!
(Ответить) (Parent) (Thread)


eddy_em
Link:(Link)
Time:2017-02-01 08:36 am
Ты, кстати, в RexOS скопировал дефайны от ST, а там нет файла stm32f030x4.h (сам недавно с этим столкнулся, когда на макетку с STM32F030 стал портировать код с STM32F042).
Чтобы красивше было, но и поменьше гемора иметь (переделывая stm32f030x6.h под x4), в stm32f0xx.h добавить !defined (STM32F030x6) в проверку, а дальше вот так сделать:
#if defined(STM32F030x6) || defined(STM32F030x4)
#include "stm32f030x6.h"
(Ответить) (Parent) (Thread)


mbr
Link:(Link)
Time:2017-02-01 12:34 pm
пиздишь код, хоть бы патчем оформил ;)

На самом деле - спасибо, сейчас поправлю
(Ответить) (Parent) (Thread)


eddy_em
Link:(Link)
Time:2017-02-01 12:42 pm
Про пизженный код: иной раз до идиотизма доходит. Вот, например, здесь: автор файла airmass.c написал:
You are permitted to copy and distribute this program as much as you want, as long as you leave the source code, including this comments section, intact and unmodified.
Я, как честный человек, выкладывающий чужой код на гитхабы, сделал так:
static int main(int argc, char *argv[]) __attribute((unused));
static void usage(void) __attribute((unused));
#define inline
#include "airmass.c"
#undef inline
...

(Ответить) (Parent) (Thread)


mbr
Link:(Link)
Time:2017-02-01 12:40 pm
Глянул. На самом деле у меня там workaround уже давно есть, см. внимательно в stm32.h
(Ответить) (Parent) (Thread)


balmerdx
Link:(Link)
Time:2017-02-01 06:13 am
Ужос! С таким возиться только за деньги. Прямо чувствуется гемморой.
(Ответить) (Thread)


mbr
Link:(Link)
Time:2017-02-01 06:23 am
Во-первых - почему геморрой?
Во-вторых, а есть какие-то еще варианты, кроме как за деньги?
(Ответить) (Parent) (Thread)


balmerdx
Link:(Link)
Time:2017-02-01 07:22 am
Во-вторых - можно возиться с железками забесплатно.

Во-первых:
Судя по описанию - там такая "наполовину доделанная" железка. Я правда чисто софтварный девелопер. Но и у нас в проприетарных библиотеках часто находятся критичные баги (или концептуальные недоработки интерфейса), которые хрен исправишь.

Так что на работе почти полностью перешли на софт, поставляемый в исходниках. А те библиотеки, которые вынужденны покупать - тоже с исходниками покупаем, чтобы допилить можно было в критических случаях.
(Ответить) (Parent) (Thread)


mbr
Link:(Link)
Time:2017-02-01 12:32 pm
Вспоминается анекдот про проститутку, пляж и станки.

Что значит "наполовину доделанная"? Вполне себе годная. Я бы даже сказал безальтернативная для определенного ряда задач.

А ничего, что в микроконтроллерах есть еще бутром, в котором тоже могут быть баги? А даже если нет, как, например, в кинетисе - всегда есть баги в самом железе, которые никак не исправишь. Так что приходится работать с тем, что есть.
(Ответить) (Parent) (Thread)


boud
Link:(Link)
Time:2017-02-01 08:01 pm
Как раз вчера стлкнулся. При размыкании одной небольшой релюхи ( то-ли встроенной, то ли внешней дополнительной на том же канале) проседает один канал АЦП. Всё бы ничего, но на этом АЦП канале висит кое-что интересное, отчего дергаются пускатели, загораются индикаторы и вообще... Думаю стоит-ли бороться аппаратно, установкой гасящих диодов, или программно поднять латентность каналов...
Недоработка! В железе. И вылезло не сразу, хорошо местные заметили - как кнопку жмёшь, пускатели щелкают...
(Ответить) (Parent) (Thread)


mbr
Link:(Link)
Time:2017-02-01 08:08 pm
Да, диод желательно. А еще конденсатор по питанию.
(Ответить) (Parent) (Thread)


boud
Link:(Link)
Time:2017-02-01 08:20 pm
Контроллер новый, необкатаный. Раньше такой херни не было - факт. Питание-то там норм 24В... А вот доп.релюхи на ~220В.
(Ответить) (Parent) (Thread)


mbr
Link:(Link)
Time:2017-02-01 08:24 pm
Сэкономили три копейки на конденсаторах :)
(Ответить) (Parent) (Thread)

[icon] Opensource животворящий - Segmentation fault
View:Свежие записи.
View:Архив.
View:Друзья.
View:Личная информация.