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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 X$ Q- N! ?( }  e8 t) v5 W  U' V5 K
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( H2 ~0 l) V5 y: q0 \2 \8 e, _7 h1 ^- Z) V! M7 M
其他程序段。。。。。# Q7 r+ o$ E- d1 U5 }  j7 a& J

+ B5 O( p6 a1 L0 ^8 `* v; Z6 D   free(x_d);, t/ \3 E7 q9 q/ r% [) I

6 Y7 t3 o! R9 w4 ?, z" p使用DSP侧单独调试功能,验证动态申请没有问题,
  d' J! x9 J9 p" L/ [1 b- R3 ~7 X8 e. q2 R2 J5 J5 W
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 r5 z/ J  [2 Y; ~3 M- q7 ?

* o- K( R& ~9 K' m5 w  R4 C. j# |2 G- b
% s9 {8 M$ E' G- S. N% x# W
6 q: K1 ]! p+ ]& D' }4 @! h- c
# Q9 ?) S! K' T# q
% |5 J; l, P; S
& \1 I6 ?) H1 K) T
! ?1 a% L. q: x0 j+ ^1 R; F- H

4 e/ s- |$ V  M5 K, i' U3 p" W4 L2 e( Y$ [- K$ R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- o% s1 \3 o0 x$ U* G' }. m
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( j( a" s3 ]) t6 s5 K+ s+ ~4 ^(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" t/ e+ w+ |( i9 T  H

" A% @: x8 v6 k是不是需要在DSP.CFG中进行配置
' h) e0 j# r' E# I" d我现在的配置为6 {6 `1 c, @; m( X7 {  S
, E. d% |/ K3 h  U  i8 o! |
/*
5 W; B! m* X4 z! P( T  ^- ] *  ======== Operating System Configuration ========. |/ ^( `5 u" U7 Y$ Q
*/
. F8 d) Q5 v/ r1 B% w' P; x/ B, v. ]# Z0 t4 W% {; L
/* no rts heap */
, i6 h/ V) s7 @0 QProgram.heap = 0;( Y; y$ t6 R9 ~& f
Program.argSize = 100;  /* minimum size */. g+ L7 O- p9 _6 h% R$ Y5 B
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  v& B" Q" Y6 p. ^4 v
7 j) W- o7 ^3 Q* c8 Y8 V3 O/* create a default heap */
: ~, H4 _* E0 f+ k1 d9 L5 S6 s" rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; |. W8 w7 z9 a% \
var heapMemParams = new HeapMem.Params();
1 _% R0 V1 [& D8 J2 UheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
% G& |+ E: y! \$ a7 D
4 V& S% a+ l1 _+ \
var Memory = xdc.useModule('xdc.runtime.Memory');
) I  t5 P% B* Z* o3 t) N& R9 e  MMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
. _4 U. n9 W% ~5 Z4 K- h+ y2 b1 N! \. e
/* configure System module */
, z9 a* ^+ x/ G9 _# R! ?var SysMin = xdc.useModule('xdc.runtime.SysMin');
" G  e0 x* a8 V8 WSysMin.bufSize = 0x1000;1 Y- j7 D) l. d1 S4 u2 _
SysMin.flushAtExit = false;
3 f% A/ B8 f( {  T/ U. G  L% v) R3 J- Z
var System = xdc.useModule('xdc.runtime.System');
$ d, f0 w4 V# X% S# x0 U5 d2 tSystem.SupportProxy = SysMin;
" n. ^3 }* [" Y+ H( e" w  j
  X( L4 Y/ L* Y6 `& q8 v/* configure SysBios to use the lower half of Timer 1 */
: A& r, ~9 p# ~6 j8 ~; R# y3 ?# tvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ m* V3 B1 f" Y2 k6 cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
( Q2 |5 \! A' i" o% l- vTimer.timerSettings[1].master = true;
/ d5 N/ E' H2 Y! k# uTimer.defaultHalf = Timer.Half_LOWER;
) B" p% C" y/ _3 ~$ _" \* GClock.timerId = 1;3 m8 v" y$ F" |6 [" \0 C: B
: g) z0 G) Q; f- ]2 ?( z
8 E6 ], @6 O* E2 v" }
/*
% U  {. W" F% |+ r9 A *  ======== Miscellaneous Configuration ========* T; u: L& `' K# D+ r
*/
9 d  B$ B6 n# l  l6 W* S* J9 b  A& h; ~
/* set default diags mask */& O1 l, ~" Q/ U( L' t3 F
var Diags = xdc.useModule('xdc.runtime.Diags');( s6 q  R+ _3 I, y, k7 ?
var Defaults = xdc.useModule('xdc.runtime.Defaults');
5 u3 ?2 e. K/ L3 E/ e% O+ s. t$ g8 ~" H' m
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 V, t8 O" L! K2 q5 ?& l7 LDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;/ j) x, C) D" T! [. b+ m
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 C6 R. m9 `. @& k
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) D1 b1 }5 m  LDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
0 _& p0 K6 v8 I" eDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
! ?* }' M+ j, M" G6 oDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# ?$ c+ G* a- U& [- I) k% rDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;" X  w" h8 T8 J
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ w5 T6 k" I8 |" d, O
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! p9 ?% O, P2 \
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* y+ u; z/ Y- L' U1 K" {  U
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 _3 `9 Z" l7 T$ P& DDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( ~& [6 ^9 U) X4 m# N( t& S. h! `Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, Z2 V  v, k% X! B/ m4 a
" |( X- z- L  r# N8 F/* override diags mask for selected modules */
0 }( r! b% I4 [0 x, G; |" A0 p" |xdc.useModule('xdc.runtime.Main');6 L  M% \7 e. M0 Q/ p) A
Diags.setMaskMeta(  r* p/ N) n# w2 v) \+ c, z2 K
    "xdc.runtime.Main",
5 C: S) r2 G6 c) j9 H    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ `0 h. l. Y! ^& `, Y" Z1 m
    Diags.RUNTIME_ON
( _; J& H, h9 k7 N; C& ?);
3 Q  y1 Y9 ]" O: d; B. h5 u. s: w  k7 ]$ {4 U
var Registry = xdc.useModule('xdc.runtime.Registry');5 T3 h7 u" T: X& H4 t; J
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;& y& O% u" K- M9 f/ {7 X
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* l9 s9 f- b$ \% T; KRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 d0 ?# E* m3 M+ v2 ~Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ W& u$ v; K1 c: V0 |2 f+ A8 P7 }- r/ J+ Z0 s1 [
/* create a logger instance */0 E! Z' |9 y4 `5 \8 J8 h( |
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 J5 g1 j5 t3 X* t  q
var loggerBufP = new LoggerBuf.Params();
8 y& d0 j( d/ K' `/ Y/ hloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ y+ B& u( b( H' N8 |loggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ z7 s' ]& ]# |" W/ F
4 W: _& h6 u( ~+ N4 z$ ivar appLogger = LoggerBuf.create(loggerBufP);
' s& c/ K' r2 R% _0 g% O- vappLogger.instance.name = "AppLog_Core1";- V( Q' X9 b* h: X: |
Defaults.common$.logger = appLogger;
, j5 S4 p9 x; k2 C! C( uMemory.defaultHeapSize = 0x8192;   
. v2 C- W! Y) l, L) m( PIdle.idleFxns[0] = "&LEDStatus";
- X) l5 p( _/ I  R$ S  ACache.initSize.l2Size = Cache.L2Size_32K;' y# T; K2 T  h3 S; H
0 L  g: A0 W( b* n
回复 支持 反对

使用道具 举报

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 */' J/ s9 e0 \- u! Q) W
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, u5 ~6 L$ D: y/ u4 |% C! k
var heapMemParams = new HeapMem.Params();
, ~) n" J, E' J$ b+ a- KheapMemParams.size = 0x4000;
' r! r; G8 M3 i# ^( B
; b- G& w6 _. ^9 Z& D0 }var Memory = xdc.useModule('xdc.runtime.Memory');
" K+ H% X% ~% _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( M9 i) ]9 e7 n
+ z8 O- d; G  o( P( q3 l1 A
我大约calloc  每次共计大小为5K*16bits,4 _! |, }, w# m% y8 R
而默认配置才0x4000、需要改大。  |0 F2 h. x/ i7 D6 |5 K0 ]

6 h8 |3 B% J# x" R3 D5 I. E" s) E
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
. D7 S6 y, \$ O- q# ^: aProgram.heap = 0;
; _- ?7 `0 c0 S: D/ s/ R: k; ]0 Z+ MProgram.argSize = 100;  /* minimum size */
0 Z; W4 D6 J. p5 ~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-14 11:31 , Processed in 0.041510 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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