硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2294|回复: 4
收起左侧

[有问必答] 在STM32F103C8上跑RTOS的例程进hardFault

[复制链接]

6

主题

13

回帖

31

积分

新手上路

积分
31
发表于 2018-4-8 23:57:29 | 显示全部楼层 |阅读模式
例程是用 V4-341-FreeRTOS实验_FreeRTOS+RS232(串口中断,FIFO机制与PC通信)这个例程,由于公司用的是103C8,RAM 才20K,我就替换了HD换成MD,把HEAP改成了10,就是#define configTOTAL_HEAP_SIZE                ( ( size_t ) ( 10 * 1024 ) ),另外把串口接收的缓冲大小UART1_TX_BUF_SIZE 和UART1_RX_BUF_SIZE改小了点改成256,这时编译通过,但是串口一发送,就是跑
comSendBuf这个函数,立马进入hardFault,有没人遇到过这个情况呢,求指导下,谢啦
回复

使用道具 举报

6

主题

13

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2018-4-9 00:21:24 | 显示全部楼层
static void UartSend(UART_T *_pUart, uint8_t *_ucaBuf, uint16_t _usLen)
{
        uint16_t i;

        for (i = 0; i < _usLen; i++)
        {
                /* 如果发送缓冲区已经满了,则等待缓冲区空 */
                /* 当 _pUart->usTxBufSize == 1 时, 下面的函数会死掉(待完善) */
                while (1)
                {
                        __IO uint16_t usCount;

                        DISABLE_INT();
                        usCount = _pUart->usTxCount;
                        ENABLE_INT();

                        if (usCount < _pUart->usTxBufSize)
                        {
                                break;
                        }
                }

                /* 将新数据填入发送缓冲区 */
                _pUart->pTxBuf[_pUart->usTxWrite] = _ucaBuf[i];

                DISABLE_INT();
                if (++_pUart->usTxWrite >= _pUart->usTxBufSize)
                {
                        _pUart->usTxWrite = 0;
                }
                _pUart->usTxCount++;
                ENABLE_INT();
        }

        USART_ITConfig(_pUart->uart, USART_IT_TXE, ENABLE);
}
对了,在仿真跑这个函数的时候,明明只是发送一个字节,这时_pUart->usTxWrite莫名其妙变成了0x075D,很大的一个数,导致数组溢出了,但不知道为何会变成这么大的一个数
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2018-4-9 00:29:11 | 显示全部楼层
kaxilion 发表于 2018-4-9 00:21
static void UartSend(UART_T *_pUart, uint8_t *_ucaBuf, uint16_t _usLen)
{
        uint16_t i;

没问题的,只要你发送的字节数不超过缓冲区大小就没任何问题。

对比下我这个例子,bsp_uart_fifo.C文件配置串口1,2,3,4,5,6可以同时使用的例子:

http://www.armbbs.cn/forum.php?m ... ypeid%26typeid%3D41
回复

使用道具 举报

6

主题

13

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2018-4-9 00:58:57 | 显示全部楼层
无解...我重新拿个工程来重新改又正常了...也没发现哪里不一样....晕死
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2018-4-9 01:00:59 | 显示全部楼层
kaxilion 发表于 2018-4-9 00:58
无解...我重新拿个工程来重新改又正常了...也没发现哪里不一样....晕死

特别注意一种情况,有时候MDK会遗漏你已经修改了的文件,最好先单独对你修改的文件进行编译,然后全编译。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-12 09:50 , Processed in 0.247839 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表