ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
27 июня
1300017
Связанные сообщения
GccRisc-VCh32Ch32V003Ch579
для CH32V317 ключи: -mcpu=ch32v317 -mcmodel=medlow -mabi=ilp32f -Os. в данном случае ключ -march=rv32imafc не является не...2025-06-18
свежак KGP для riscv:32 gcc16.0.0 bu2.44.50.20250610 хост x86_64 zenv4 avx512 linux. похоже мне наконец то удалась таки сделать ...2025-06-11
Про FLASH в CH32V203. Вкратце: похоже, что при частичной записи страницы, автоматически стирается и перезаписывается вся страниц...2025-04-02
На озоне за сутки выкупили все отечественные RISC-V микроконтроллеры2025-03-15
Вот моё творчество:2025-03-09
В приличном обществе принят BOM (Byte Order Mark). 0xEF 0xBB 0xBF в начале файла.2025-03-04
У CH32V003 отладка и загрузка ПО по одному проводу идет что ли? О.о2025-02-28
всунул и протянул. gcc теперь умеет так: riscv32-kgp-elf-g++ ..... -mcpu=к1948вк018 ...., мой вклад в импортозамещение - буквы р...2024-10-10
Приемлемо, но всегда в 2 провода обмотки мотались, а 2 выходных что бы 2 диода экономить? Там разбаланс можно получить, даже из ...2024-07-11
Немного рассуждений про ch32v307+freerto+libwchnet.a2024-07-10
Китайский CH582. Я тут опять немного прихренел от китайского МК.2024-06-19
китайцы что то изобретают - ch32v006/ch32v007/ch32m007 : Streamlined Timer. непонятое... но интересное2024-05-18
Я тут как-то выкладывал самопальный FlashLoader для CH579, там довольно тривиально все. Вот сорцы от него.2024-05-16
Если кто пропустил, флаги компилятора GCC для Embedded разработки.2024-04-11
[09.01.2024] по ходу подпрыгивании на тему "подъема-взлета" ch32v003 всунул в него CoreMark. промерил...2024-01-09
нашел на китайской версии сайта WCH ннфографику про семество riscv ch32 - сделал картинку. теперь легче понять отличия. удобно ч...2023-12-11
VisionFive. SBC на RISC-V со встроенным GPU.2023-11-16
Я извиняюсь народ.) Но пролейте пожалуйста свет кто чем сейчас programmирует чипы на RISC-V?2023-11-07
[заработало] у кого есть удачный опыт "i2c заработало в ch32v003" ? промудохалсо весь выходной... выводы неоднозначные. может чт...2023-08-09
Пришел десяток CH32V003 в soic8 с Ali по 13 руб. Показались удобными для всяческой мелкой хренотени. Ну и как у китайцев положен...2023-07-26
Тож с хабарки: Zigbee координатор.2023-07-18
СH32V203F8P6 - 96МГц. SPI - 12MГц, ENC28J60. Ping + UDP ping-pong 50 байт + UDP "спам" 1500 пак/сек. Вот такую вот картинку вижу...2023-07-03
Столько полезной информации...2023-07-03
Цука... CH32V00x с WCHlink нихт арбайтен. Требуют WCHlinkE. "Вот нахуя так делать? И, главное, зачем?"(С)... Да знаю, знаю зачем...2023-05-12
У ядра QingKeV4 есть расширенный набор коротких команд. Их пока только WCH-ный GCC порддерживает.2023-04-06
Траблы с WCH для CH32V203RBT6.2023-03-24
Risc-V, CH32V203RBT6, MounRiver Studio IDE, Си. Отладчик WCH-Link.2023-03-22
почитал доки на свежий китайский микроконтроллер ch32v307, есть много фич которые я воображал но не было в cortex-m. похоже risc...2023-03-03
Кто-нибудь уже пробовал использовать IAR EWARM для разработки под CH32F* от WCH? У производителя можно найти примеры и библиотек...2023-01-04
[RISC-V от WCH] - перспективно для замены всего недружественного. Klen, просьба покурить. ch32v103, ch32v307. - брать. Ес...2022-03-24
Китайцы выложили официяльный ангельский даташит на CH5792021-12-07
Платочки в формфакторе Raspberry Pi на RISC-V грядут. Заметим, сразу идет bare metal ПО, FreeRTOS, и на картинке видим ChipLink....2021-12-01
Проц среди прочей периферии имеет некий LED Controller. Шо это такое и куда его применить - понять не удается никак. Если кто по...2021-06-01
Ура! Заработало! Если в InfoFlash сбросить битик CFG_BOOT_EN (можно не стирать флеш, ноль поверх единицы прекрасно пишется), то ...2021-05-31
Простейший драйвер Ethernet, просто иллюстрация отправки и приема пакетов2021-05-24
Поддержка чипа в IAR. FlashLoader, регистры, файлы линкера. Просто развернуть поверх установленного IAR в соответствующие папки....2021-05-23
"Сводный системный топик" :-) по китайской микрухе CH579. Предлагаю сюда добавлять кто чего нарыл. Для начала гугл-перевод даташ...2021-05-23
У Cortex-M0 отсутствует регистр VTOR, т.е. перенести вектора прерываний нельзя. Что несколько неприятно для реализации бутлодера...2021-05-23
Починил работу с PHY. В общем, вот минимальный пример. Без прерываний, без нихера. Просто принять и отправить пакет.2021-05-21
Есть китайский сорец на це, в нем камменты на китайском. Кто знает: какая там кодировка используется? Можно ли преобразовать во ...2021-05-18
Обновил. Запилил для IAR поддержку чипов CH57X, если вдруг кому надо. Линковка, прошивка, отладка с регистрами. Развернуть архив...2021-05-15
Что то пока не удается совокупить NRF52 c CH579 без BLE стека, используя только трансивер - железо BLE у китайцы прячут... Решил...2021-05-01
Allwinner обещается в этом году выкатить жЫрный RISC-V2021-02-09
Не знаю пока, как там с радио, но то, что уже наблюдаю, очень сильно впечатляет. Пришла сейчас платка с CH579M. Начал с примера ...2020-12-21
Переведенный датаговн CH579.2020-11-26
ну давай Муська! еще капельку!: поразгонял gd32vf103cb + oled 0.962020-05-31
gd32vf103: выполнил обезжиривание кода rv-link/longan-nano, пришлось переделывать китайский код. меня попросили дать бинарь для ...2020-04-26
кто нибудь знает? GigaDevice планирует в gd32vf всунуть FPU или еще что нибудь, нигде не нашел их планов по захвату поляны - я б...2020-02-12
Computer Organization and Design RISC-V edition. просто бесподобны мануаЛЬ!2019-11-30
gd32vf103: Думаю можно подумать открывать новый раздел - RISCV2019-10-28
Китайцкая GigaDevice залепила мелкокристаллку на RISC-V. 108Mhz, 128K Flash, 32K RAM. На замену STM32F103, вроде как совместима ...2019-08-31
[RISC-V: ядра, SoC для микропроцессоров и микроконтроллеров] Сводный системный топик.2018-12-04
[RISC-V как предел софткорного процессоростроения]. Текущие результаты капиталистического соревнования.2018-04-28
[Сводный топик про RISC-V] Гнездо архитектуры -> -->2017-08-11
IAR сливает однозначно. Наверняка масса багов и нет публичного бэктрекера (у GCC есть). В IAR масса опенсоурс кода не скомпилитс...2016-01-30
свежак GCC под2010-07-27
например2010-02-01
klen (10.04.2023 03:27, просмотров: 11865)
проект выходного дня....вроде заработало! свежак KGP для riscv32-kgp-elf с поддержкой CH32Vxxx (QingKeV4, QingKeV4B, QingKeV4C, QingKeV4F) 

с подачи VladislavS, я возбудился на "поднять" код из транка c добавкой поддержки ядер bamblebee N200, QingKeV4, QingKeV4B, QingKeV4C, QingKeV4F


тестирование сборки тулсов из пакета MounRiver обнаружило злобный косячищще - при включении оптимизации LTO почему то линкер нах выпиливает код обработчиков прерываний, атрибут used не спасает ситуацию, также не помогло притягиванияе моего свежего линкера из бинутилса. из этого я делаю вывод что что то еще до линковки пошло не так в компиллере. непонятно - это только мой сценарий или всегда так, мне не интересна сборка китайцев.... но тем не менее как бэ намекаэээ.


в код из транка я добавил следующие моменты для обработчиков прерываний

1. для таргета riscv*-*-* добавлено поведение кодогенератора прологов/'эпилогов :

__attribute__((interrupt)) - генерится запись/сохраниене контекста в стек (в случаее QingKeV4F сохранябтся также регисты fpu)

__attribute__((interrupt("hpe"))) - hpe сокращенно от Hardware prolog/epilog, аппаратное сохранение регистров CPU и FPU в теневые регистровые файлы

__attribute__((interrupt("hpei"))) - hpei сокращенно от Hardware prolog/epilog integer regs, аппаратное сохранение регистров только CPU, для регистов FPU генерятся прологи и эпилоги.


таким образом покрываются ситуации когда есть аппаратная поддержка сохранения контекcта или нет , когда она только для целочисленных регистров или нет.... и никакой жесткой привязки к кастомным расширениям вендора процессоров


далее примеры компилялись с ключиами

-march=rv32imafc_zicsr -mabi=ilp32f -mcmodel=medlow -mtune=qkv4f


случай обычной функции - характерно для сценария GD32VF103

код

void TIM8_IRQHandler(void) { TIM_ClearITPendingBit(TIM7, TIM_IT_Update); GPIO_WriteBit(GPIOA, GPIO_Pin_0, GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) ==  Bit_RESET ? Bit_SET : Bit_RESET );  }

выход кодогенератора

0000038a <TIM7_IRQHandler>:
   void TIM7_IRQHandler(void) { TIM_ClearITPendingBit(TIM7, TIM_IT_Update); GPIO_WriteBit(GPIOA, GPIO_Pin_0, GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) ==  Bit_RESET ? Bit_SET : Bit_RESET );       }
     38a:	40001537          	lui	a0,0x40001
     38e:	1141                	add	sp,sp,-16
     390:	4585                	li	a1,1
     392:	40050513          	add	a0,a0,1024 # 40001400 <_eusrstack+0x1fff1400>
     396:	c606                	sw	ra,12(sp)
     398:	359000ef          	jal	ef0 <TIM_ClearITPendingBit>
     39c:	400112b7          	lui	t0,0x40011
     3a0:	4585                	li	a1,1
     3a2:	80028513          	add	a0,t0,-2048 # 40010800 <_eusrstack+0x20000800>
     3a6:	2f89                	jal	af8 <GPIO_ReadInputDataBit>
     3a8:	40b2                	lw	ra,12(sp)
     3aa:	40011337          	lui	t1,0x40011
     3ae:	00153613          	seqz	a2,a0
     3b2:	4585                	li	a1,1
     3b4:	80030513          	add	a0,t1,-2048 # 40010800 <_eusrstack+0x20000800>
     3b8:	0141                	add	sp,sp,16
     3ba:	a7a9                	j	b04 <GPIO_WriteBit>+0x104>

случай обработчика прерывания - характерно для сценария СH32V3xx ( fpu используется)

код

__attribute__((interrupt)) void TIM7_IRQHandler(void) { TIM_ClearITPendingBit(TIM7, TIM_IT_Update); GPIO_WriteBit(GPIOA, GPIO_Pin_0, GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET ? Bit_SET : Bit_RESET ); }

выход кодогенератора

0000038a <TIM7_IRQHandler>:
   __attribute__((interrupt)) void TIM7_IRQHandler(void) { TIM_ClearITPendingBit(TIM7, TIM_IT_Update); GPIO_WriteBit(GPIOA, GPIO_Pin_0, GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) ==  Bit_RESET ? Bit_SET : Bit_RESET );       }
     38a:	7175                	add	sp,sp,-144
     38c:	deaa                	sw	a0,124(sp)
     38e:	40001537          	lui	a0,0x40001
     392:	c706                	sw	ra,140(sp)
     394:	c31a                	sw	t1,132(sp)
     396:	c11e                	sw	t2,128(sp)
     398:	dab2                	sw	a2,116(sp)
     39a:	d8b6                	sw	a3,112(sp)
     39c:	d6ba                	sw	a4,108(sp)
     39e:	d4be                	sw	a5,104(sp)
     3a0:	d2c2                	sw	a6,100(sp)
     3a2:	d0c6                	sw	a7,96(sp)
     3a4:	cef2                	sw	t3,92(sp)
     3a6:	ccf6                	sw	t4,88(sp)
     3a8:	cafa                	sw	t5,84(sp)
     3aa:	c8fe                	sw	t6,80(sp)
     3ac:	e682                	fsw	ft0,76(sp)
     3ae:	e486                	fsw	ft1,72(sp)
     3b0:	e28a                	fsw	ft2,68(sp)
     3b2:	e08e                	fsw	ft3,64(sp)
     3b4:	fe12                	fsw	ft4,60(sp)
     3b6:	fc16                	fsw	ft5,56(sp)
     3b8:	fa1a                	fsw	ft6,52(sp)
     3ba:	f81e                	fsw	ft7,48(sp)
     3bc:	f62a                	fsw	fa0,44(sp)
     3be:	f42e                	fsw	fa1,40(sp)
     3c0:	f232                	fsw	fa2,36(sp)
     3c2:	f036                	fsw	fa3,32(sp)
     3c4:	ee3a                	fsw	fa4,28(sp)
     3c6:	ec3e                	fsw	fa5,24(sp)
     3c8:	ea42                	fsw	fa6,20(sp)
     3ca:	e846                	fsw	fa7,16(sp)
     3cc:	c516                	sw	t0,136(sp)
     3ce:	dcae                	sw	a1,120(sp)
     3d0:	40050513          	add	a0,a0,1024 # 40001400 <_eusrstack+0x1fff1400>
     3d4:	4585                	li	a1,1
     3d6:	e672                	fsw	ft8,12(sp)
     3d8:	e476                	fsw	ft9,8(sp)
     3da:	e27a                	fsw	ft10,4(sp)
     3dc:	e07e                	fsw	ft11,0(sp)
     3de:	3a3000ef          	jal	f80 <TIM_ClearITPendingBit>
     3e2:	400112b7          	lui	t0,0x40011
     3e6:	80028513          	add	a0,t0,-2048 # 40010800 <_eusrstack+0x20000800>
     3ea:	4585                	li	a1,1
     3ec:	2f71                	jal	b88 <GPIO_ReadInputDataBit>
     3ee:	40011337          	lui	t1,0x40011
     3f2:	00153613          	seqz	a2,a0
     3f6:	4585                	li	a1,1
     3f8:	80030513          	add	a0,t1,-2048 # 40010800 <_eusrstack+0x20000800>
     3fc:	2f61                	jal	b94 <GPIO_WriteBit>
     3fe:	40ba                	lw	ra,140(sp)
     400:	42aa                	lw	t0,136(sp)
     402:	431a                	lw	t1,132(sp)
     404:	438a                	lw	t2,128(sp)
     406:	5576                	lw	a0,124(sp)
     408:	55e6                	lw	a1,120(sp)
     40a:	5656                	lw	a2,116(sp)
     40c:	56c6                	lw	a3,112(sp)
     40e:	5736                	lw	a4,108(sp)
     410:	57a6                	lw	a5,104(sp)
     412:	5816                	lw	a6,100(sp)
     414:	5886                	lw	a7,96(sp)
     416:	4e76                	lw	t3,92(sp)
     418:	4ee6                	lw	t4,88(sp)
     41a:	4f56                	lw	t5,84(sp)
     41c:	4fc6                	lw	t6,80(sp)
     41e:	6036                	flw	ft0,76(sp)
     420:	60a6                	flw	ft1,72(sp)
     422:	6116                	flw	ft2,68(sp)
     424:	6186                	flw	ft3,64(sp)
     426:	7272                	flw	ft4,60(sp)
     428:	72e2                	flw	ft5,56(sp)
     42a:	7352                	flw	ft6,52(sp)
     42c:	73c2                	flw	ft7,48(sp)
     42e:	7532                	flw	fa0,44(sp)
     430:	75a2                	flw	fa1,40(sp)
     432:	7612                	flw	fa2,36(sp)
     434:	7682                	flw	fa3,32(sp)
     436:	6772                	flw	fa4,28(sp)
     438:	67e2                	flw	fa5,24(sp)
     43a:	6852                	flw	fa6,20(sp)
     43c:	68c2                	flw	fa7,16(sp)
     43e:	6e32                	flw	ft8,12(sp)
     440:	6ea2                	flw	ft9,8(sp)
     442:	6f12                	flw	ft10,4(sp)
     444:	6f82                	flw	ft11,0(sp)
     446:	6149                	add	sp,sp,144
     448:	30200073          	mret

случай обработчика прерывания c аппаратным сохранением целочисленных регистров - характерно для сценария СH32V3xx ( fpu используется)

код

__attribute__((interrupt("hpei"))) void TIM8_IRQHandler(void) { asm volatile ("nop") ; }

выход кодогенератора

0000038a <TIM7_IRQHandler>:
   __attribute__((interrupt("hpei"))) void TIM7_IRQHandler(void) { TIM_ClearITPendingBit(TIM7, TIM_IT_Update); GPIO_WriteBit(GPIOA, GPIO_Pin_0, GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) ==  Bit_RESET ? Bit_SET : Bit_RESET );       }
     38a:	40001537          	lui	a0,0x40001
     38e:	715d                	add	sp,sp,-80
     390:	4585                	li	a1,1
     392:	40050513          	add	a0,a0,1024 # 40001400 <_eusrstack+0x1fff1400>
     396:	e682                	fsw	ft0,76(sp)
     398:	e486                	fsw	ft1,72(sp)
     39a:	e28a                	fsw	ft2,68(sp)
     39c:	e08e                	fsw	ft3,64(sp)
     39e:	fe12                	fsw	ft4,60(sp)
     3a0:	fc16                	fsw	ft5,56(sp)
     3a2:	fa1a                	fsw	ft6,52(sp)
     3a4:	f81e                	fsw	ft7,48(sp)
     3a6:	f62a                	fsw	fa0,44(sp)
     3a8:	f42e                	fsw	fa1,40(sp)
     3aa:	f232                	fsw	fa2,36(sp)
     3ac:	f036                	fsw	fa3,32(sp)
     3ae:	ee3a                	fsw	fa4,28(sp)
     3b0:	ec3e                	fsw	fa5,24(sp)
     3b2:	ea42                	fsw	fa6,20(sp)
     3b4:	e846                	fsw	fa7,16(sp)
     3b6:	e672                	fsw	ft8,12(sp)
     3b8:	e476                	fsw	ft9,8(sp)
     3ba:	e27a                	fsw	ft10,4(sp)
     3bc:	e07e                	fsw	ft11,0(sp)
     3be:	383000ef          	jal	f40 <TIM_ClearITPendingBit>
     3c2:	400112b7          	lui	t0,0x40011
     3c6:	4585                	li	a1,1
     3c8:	80028513          	add	a0,t0,-2048 # 40010800 <_eusrstack+0x20000800>
     3cc:	2fb5                	jal	b48 <GPIO_ReadInputDataBit>
     3ce:	40011337          	lui	t1,0x40011
     3d2:	00153613          	seqz	a2,a0
     3d6:	4585                	li	a1,1
     3d8:	80030513          	add	a0,t1,-2048 # 40010800 <_eusrstack+0x20000800>
     3dc:	2fa5                	jal	b54 <GPIO_WriteBit>
     3de:	6036                	flw	ft0,76(sp)
     3e0:	60a6                	flw	ft1,72(sp)
     3e2:	6116                	flw	ft2,68(sp)
     3e4:	6186                	flw	ft3,64(sp)
     3e6:	7272                	flw	ft4,60(sp)
     3e8:	72e2                	flw	ft5,56(sp)
     3ea:	7352                	flw	ft6,52(sp)
     3ec:	73c2                	flw	ft7,48(sp)
     3ee:	7532                	flw	fa0,44(sp)
     3f0:	75a2                	flw	fa1,40(sp)
     3f2:	7612                	flw	fa2,36(sp)
     3f4:	7682                	flw	fa3,32(sp)
     3f6:	6772                	flw	fa4,28(sp)
     3f8:	67e2                	flw	fa5,24(sp)
     3fa:	6852                	flw	fa6,20(sp)
     3fc:	68c2                	flw	fa7,16(sp)
     3fe:	6e32                	flw	ft8,12(sp)
     400:	6ea2                	flw	ft9,8(sp)
     402:	6f12                	flw	ft10,4(sp)
     404:	6f82                	flw	ft11,0(sp)
     406:	6161                	add	sp,sp,80
     408:	30200073          	mret


случай обработчика прерывания c аппаратным сохранением всех регистров - пока такого процессора мы не знаем :)

код

__attribute__((interrupt("hpe"))) void TIM8_IRQHandler(void) { asm volatile ("nop") ; }

выход кодогенератора

0000038a <TIM7_IRQHandler>:
   __attribute__((interrupt("hpe"))) void TIM7_IRQHandler(void) { TIM_ClearITPendingBit(TIM7, TIM_IT_Update); GPIO_WriteBit(GPIOA, GPIO_Pin_0, GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) ==  Bit_RESET ? Bit_SET : Bit_RESET );       }
     38a:	40001537          	lui	a0,0x40001
     38e:	4585                	li	a1,1
     390:	40050513          	add	a0,a0,1024 # 40001400 <_eusrstack+0x1fff1400>
     394:	359000ef          	jal	eec <TIM_ClearITPendingBit>
     398:	400112b7          	lui	t0,0x40011
     39c:	4585                	li	a1,1
     39e:	80028513          	add	a0,t0,-2048 # 40010800 <_eusrstack+0x20000800>
     3a2:	2f89                	jal	af4 <GPIO_ReadInputDataBit>
     3a4:	40011337          	lui	t1,0x40011
     3a8:	00153613          	seqz	a2,a0
     3ac:	4585                	li	a1,1
     3ae:	80030513          	add	a0,t1,-2048 # 40010800 <_eusrstack+0x20000800>
     3b2:	27b9                	jal	b00 <GPIO_WriteBit>
     3b4:	30200073          	mret


2. добалена протяжка по реализациям микроарихитектур и соответствующая оптимизация

-mtune=bamblebee

-mtune=qkv4a

-mtune=qkv4b

-mtune=qkv4c

-mtune=qkv4f


3. добален биндинг -mcu -> -tune/-arch

-mcu=gd32vf103

-mcu=ch32v103

-mcu=ch32v203

-mcu=ch32v208

-mcu=ch32v30x




вроде бы все работает - потестил примерчик с вложенными + цепочными прерываниями на gd32vf103 и ch32v307. ничего не разваливается. но нада тестить.


в связи с тем что кроме общего описания ядер bamblebee N200 и QingKeV4 я не имею ничего детального - параметры оптимизации выставлены примерно как у похожих sifive.

нужны данные по затратам тактов для выполнения операций (стоймость операции)

fp_add

fp_mul

fp_div

int_mul

int_div

issue_rate

branch

memory

fmv

unaligned_access


если кто найдет доки - всуну чтоб все было красиво.


в принципе из данного положения на спортивном снаряде можно попробывать протянуть в GCC поддержку миландровских riscv микроконтроллеров .... но я их в природе не наблюдал печалька


архив тулсов host x86_64-kgp-linux-gnu_znver3-avx2 :

http://www.klen.org/Files/DevTools/x86_64-kgp-linux-gnu_znver3-avx2/riscv32imac-kgp-elf/riscv32imac-kgp-elf_@_x86_64-kgp-linux-gnu_znver3-avx2_20230410_BISTORTA.tar.7z


выходные полностью всрались.. в субботу проснулся, встал - сел в трусах за комп.... воскресение 18:00 в том же положении в трусах... бутыль кинзмараули.... доза не сработала - неотпускает...