关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7438|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ }. o2 E! f- A& @% t0 `; x# h2 T; N# m
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 i* D: ^, ]2 X8 ?% Z+ x3 m7 i/ _1 b- L! l$ m
其他程序段。。。。。
! L7 \% j; I( p9 t" g( u% X0 J 2 Q. X3 f5 L" n
   free(x_d);
  I+ ^2 M" d8 O+ e& E4 d' {$ \% ~) o$ \' |9 j
使用DSP侧单独调试功能,验证动态申请没有问题,3 }5 o2 D& U6 N/ j

; @/ g9 }0 Z. W, D* Z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 F8 S" @8 i$ E" I

! f* ^" n  [" ]) ]; `3 k
5 [: q0 a# _! X3 N% R$ o  [3 |- C3 Y0 y6 w
. a+ X$ t( l* [/ S4 A

3 l2 @5 d6 d9 ?& b  B
# B2 l; @+ ^, a: Q4 C% f1 v
: T# ]* N2 t$ C' U1 o& M/ \. I1 x7 {
9 r; c  T' I4 }; j( R% G
1 S9 ^( [: |, b& v6 U# E7 b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, L4 V: l$ n) v3 K6 i
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 V2 K3 R1 n- V0 C
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' c  ~6 f  h+ a  d+ b
7 d: r' B+ J( K4 U
是不是需要在DSP.CFG中进行配置
% i- M9 [9 n. W& q7 R( s6 ]" L5 Q4 _我现在的配置为
5 m9 R" `7 }6 |) s0 @
$ y/ {' ^7 q" B/** \! q# k" U0 |7 ^; A+ S6 Y
*  ======== Operating System Configuration ========+ l1 m- P5 l" j
*/
, U9 q6 t/ C6 H* ]) i1 i9 J" Z- ^4 i
/* no rts heap */
1 E/ L+ B2 u5 q+ lProgram.heap = 0;
# w$ r4 h# t4 U( O1 b" k& kProgram.argSize = 100;  /* minimum size */
) h. L: l; k- D: A! e2 u% Z- d. w" P+ mProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
1 F- s* W+ B* w8 G# m5 i; a& F( x) E3 F" h+ `3 M
/* create a default heap */2 J& ^0 E' s( f& i
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. v' R" R% {8 O0 Q- Y( i0 j8 N7 }var heapMemParams = new HeapMem.Params();" H5 [  D/ s. J1 Y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
! {( n0 J4 z  u+ g! G: z, |- @' g/ R; M# j( W! K6 z6 ~' k* p) U- Z
var Memory = xdc.useModule('xdc.runtime.Memory');& A: ^2 \6 q5 ?
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( H8 v( y1 {; b( ?' T( J! m7 l/ }8 M3 i# ^$ q+ `7 w
/* configure System module */
  o: h+ @  ^8 d% nvar SysMin = xdc.useModule('xdc.runtime.SysMin');" O7 v; q1 I& P4 w# \
SysMin.bufSize = 0x1000;
$ ^4 Y' Z! t# fSysMin.flushAtExit = false;- |2 d. a# v- F  G. X& D% e

6 l8 g# h2 P0 g2 N- _var System = xdc.useModule('xdc.runtime.System');9 e7 X6 U8 y, J
System.SupportProxy = SysMin;
# {" q% ]2 N" v' \2 _0 a  T
+ W0 h: g  A4 L9 `8 {  U/* configure SysBios to use the lower half of Timer 1 */
4 [3 A. D! E# g6 Vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& P6 k  Q& e. T$ c' u% @1 i
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
- H# K2 A3 K+ ~0 c4 Q$ G: B+ cTimer.timerSettings[1].master = true;' a0 N$ }) P: ~+ B
Timer.defaultHalf = Timer.Half_LOWER;' T' P6 E$ m# E( B* q6 m0 \7 }9 m
Clock.timerId = 1;1 A' P, }) S* w0 C+ y

  _& Y& B1 }& A! F2 f6 Z# h4 Y0 O$ B# M! l
/** u* h4 Q# n3 E4 t) |
*  ======== Miscellaneous Configuration ========! q) g- ?- `! L  \: M) P4 k
*/
- N" v4 H4 Y5 X9 V
$ g. v! O1 x  L: `' f/* set default diags mask */& i+ d% y& ~5 @3 G6 @7 s
var Diags = xdc.useModule('xdc.runtime.Diags');2 [% @4 q+ l( h6 Y
var Defaults = xdc.useModule('xdc.runtime.Defaults');7 q* _& q% j; L0 j5 v7 }

8 V$ ~9 r/ c( V9 m# g7 cDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* d( w% }: Q6 ADefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& _+ f! g% v+ {1 I& l7 fDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 a! C) p/ q; @! q/ [+ [' |Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
6 `$ @0 v2 f/ V% IDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ m% {7 i- F" H; n6 D* Y: V0 oDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% o& ^7 Y, G2 e
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 ~; |0 h0 @4 K' a
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 i8 K  b: c" W: L
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 D' I" L9 p3 EDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" Y9 I* h! w0 MDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: s9 g  ^1 N* D: Z, nDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 U3 R; t4 E7 Q$ @+ ^% ^4 E# J. W0 }
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( |4 b5 m' O/ g7 q  P  T
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# W0 F8 z8 G. ^' r$ g# x( g

+ ~- i5 D% L% n8 c9 I: L4 H6 m' ?/* override diags mask for selected modules */2 `) c. w# l; m) T
xdc.useModule('xdc.runtime.Main');4 Z, l7 l& {. K+ C8 P
Diags.setMaskMeta(
6 z& \3 l! o) s6 r- f. a1 Z5 o4 o7 n: \    "xdc.runtime.Main",
: o8 j+ m3 f8 N: @* p" q    Diags.ENTRY | Diags.EXIT | Diags.INFO,& \1 G8 e7 ~: N" ]
    Diags.RUNTIME_ON
4 f4 ^7 H# {! g* S);
. `4 T$ O% O$ M# @3 z( T+ l: X0 V6 w% y/ k/ [
var Registry = xdc.useModule('xdc.runtime.Registry');1 u* o8 W- I# C& c
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
* M9 z' i5 \# T" @3 cRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* w' p- h& y- h1 p& e$ e
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. \) E! t2 t2 A% \Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( l0 R! D5 @" B* u' v4 v
1 w$ S# R( X3 I/ K8 a2 k/* create a logger instance */
8 S' ~- p4 H6 a+ c* evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
4 Z5 C: _8 T$ {3 b2 v0 f1 l+ L% Lvar loggerBufP = new LoggerBuf.Params();6 o( k' R$ {- z8 L
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 h: P4 r, A2 A& i# c' }4 HloggerBufP.bufType = LoggerBuf.BufType_FIXED;2 B" e' Q8 `! C, ]/ r" Y

2 s& O& U9 _; }6 D/ ?7 {( Z7 r9 }var appLogger = LoggerBuf.create(loggerBufP);7 J$ H& Q* I% N& ^
appLogger.instance.name = "AppLog_Core1";
, f2 J% v" t1 y$ ^& D5 O4 oDefaults.common$.logger = appLogger;
. ?* I, y( I. o' MMemory.defaultHeapSize = 0x8192;   
& f* D5 s. R, rIdle.idleFxns[0] = "&LEDStatus";
0 s7 Z  l8 r0 Z3 l; v, \Cache.initSize.l2Size = Cache.L2Size_32K;9 m/ w. O: _& i& J5 f' b; A2 X

6 H) B. \5 d! O& P* A' f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */; w5 q3 n  H& E( J0 Y( H
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: ?$ e) W& w  I: Q" Q: L
var heapMemParams = new HeapMem.Params();9 v- m$ k8 m3 V3 x5 j4 \
heapMemParams.size = 0x4000;$ c  E4 ?5 ~% g
2 _3 p( S/ r1 i9 a% b
var Memory = xdc.useModule('xdc.runtime.Memory');0 {3 s/ i" F1 b0 O4 }8 u9 C$ b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ c4 `. N' d6 S# D  {
! G3 j" e# M+ I% o1 r  g我大约calloc  每次共计大小为5K*16bits,
% w9 C/ }  g  [. k而默认配置才0x4000、需要改大。
5 ^2 T" y4 d" `8 i$ \2 I1 g5 O. L9 Y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, H# V$ o( r( X
Program.heap = 0;
: Q( F3 r# ~, y1 T2 KProgram.argSize = 100;  /* minimum size */  ~: Y9 ?4 [& ]7 }
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-1-27 06:06 , Processed in 0.049320 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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