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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 E+ o& F; p, }. P. B2 f; R, d- F5 ^4 }" K$ x/ G
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
7 J- k+ K$ X; N% A9 ?; M  B$ e+ K% V8 M" y1 q; {- Q4 x
其他程序段。。。。。
: o: C- T0 [) A2 V( B # g$ b; `. D$ ^1 |8 ]7 Q
   free(x_d);
- \9 Q3 E* ^: k' ^& ?8 t! x  [  \% R6 k% k
使用DSP侧单独调试功能,验证动态申请没有问题,$ r3 G& F# A9 o* ]0 \1 V- O& v

9 r# G9 g- J: x/ y5 ^' a但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, ?0 H: y1 F* u' K

7 b7 y  o: b( Y' s
3 _8 ?* G- s8 |5 K0 v4 P8 \0 L3 o
& U9 d# v) m- W9 y" Z9 A1 A

8 w+ C- K/ {5 M
( r6 ^. o5 \6 L% Z( q/ r) q' j& X6 p; {4 N, {# \

$ h9 A4 l: v8 v. `; K; G" w3 V* @5 ^' @
+ v. N* g6 J3 F4 |- \  b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& C6 K1 F5 y9 c8 i7 l4 b/ ?( T# D我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下. ~. F( v; w' M1 a
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 z! c" @# {2 n7 w6 i0 [5 e
3 P' b" }7 r2 t) n# V4 X
是不是需要在DSP.CFG中进行配置
$ r( s9 {. S2 z2 w) l/ v) Z我现在的配置为6 b: Q% J: z( m4 F2 d6 d

2 F( P' i% b, n5 R  S0 l7 b4 U2 d6 k) y/*
: s# N% m# U* a  P *  ======== Operating System Configuration ========1 e# x/ {7 ?$ b# @# L
*/
7 `* Y) O  H  j  [% a0 }7 A5 F; {- }. d1 }9 \
/* no rts heap */
" U& D. E% P8 C" W. K( HProgram.heap = 0;
. P& V- o4 n3 ?. M, q( S1 jProgram.argSize = 100;  /* minimum size */0 y2 k, o$ j4 a+ e5 F$ P* E  L
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% M! f6 ^* F7 x- i8 J( ^5 Z0 z( A6 U; ]7 E  U
/* create a default heap */0 z9 U# q) F* A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 D# o1 U) @( B; v" {var heapMemParams = new HeapMem.Params();5 |+ }. L1 x* p  h3 g1 I4 t
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; \/ ^4 f6 u# k# A) q3 _2 P) F
' m2 m; r0 h2 S# m  f
var Memory = xdc.useModule('xdc.runtime.Memory');
$ i+ i( y# h. g1 J* \" t. X' g9 w, CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! l1 ?* s7 N) T2 }! C. F7 x
8 m$ G2 e; N2 n) q
/* configure System module */
, `9 A) f- q5 ~* W0 a2 C8 i- U4 Ovar SysMin = xdc.useModule('xdc.runtime.SysMin');: v) ]; n  X/ ^
SysMin.bufSize = 0x1000;
. P0 K) k) }0 X; VSysMin.flushAtExit = false;
, o' K* b: x: Z- n7 a' z* d; x4 P7 ]8 P* `  E( k* L: b, i
var System = xdc.useModule('xdc.runtime.System');7 J: b( e# w; \
System.SupportProxy = SysMin;
- o/ ?; _- q7 C# \* U1 y' {- Y
( t. i* B1 C/ L9 X. I  q: `: K* f5 X/* configure SysBios to use the lower half of Timer 1 */
: u* j/ p5 X# T; y# tvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# T* E4 C9 w; A4 g7 J1 ^var Clock = xdc.useModule('ti.sysbios.knl.Clock');
, w5 Y4 S5 f; d) f/ DTimer.timerSettings[1].master = true;4 c4 J& z# l+ W; ^0 {& c  _
Timer.defaultHalf = Timer.Half_LOWER;
" k! Q1 G& d1 m5 AClock.timerId = 1;
0 m# S( Q% o3 Y+ e* M# z
. z9 T' t5 x8 Z3 a. `" d6 S! X2 i' n' u. X9 D5 p! M$ }: N4 S6 Y3 L
/*; _4 r! v$ h( d! L9 b8 u
*  ======== Miscellaneous Configuration ========
$ K& K! \, G* T- z1 r1 J) s  W2 F */: n4 E+ F2 B: c% @) B( N

2 T) _3 d% U6 ^2 y% q+ v5 K/* set default diags mask */  b$ e  n4 ?$ K4 A
var Diags = xdc.useModule('xdc.runtime.Diags');
, V- i% n% y; i. _. _var Defaults = xdc.useModule('xdc.runtime.Defaults');) U, z( b3 X$ u

: ?' Z, p3 c4 P( kDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
& U3 Z6 Y+ f$ b" U1 YDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
' U3 ^# s8 ~. e/ R5 TDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 d! Y) [& G' Q1 HDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ v  J  |* i3 RDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 X6 O. ?% p( c, y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% l$ b/ n- i7 {# j, mDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- ^  Q! z" J+ T
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 ?7 @8 Y' f7 J- BDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* N' h- E0 t% e2 J* UDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* A  T' Y7 J, s0 B, }. @Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
. m. _6 E5 z- j! t" O7 RDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; ]% s2 {" K# s
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;" t% l: H, P0 J  H3 h6 V& r/ y- A
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;- m7 G! |: K+ ]/ r7 y
% \7 \4 Z  F) W% q( s2 }" p! m
/* override diags mask for selected modules */& D" W" U. N5 g% q7 ^( l9 u; B# {
xdc.useModule('xdc.runtime.Main');  y$ i0 b2 I/ ?4 x3 J
Diags.setMaskMeta(8 ~3 e' ]' K9 V8 T8 F# N
    "xdc.runtime.Main",
4 Q: ?' N* y/ Q- b7 ?- i& O1 [    Diags.ENTRY | Diags.EXIT | Diags.INFO,* m  W$ h) \: F
    Diags.RUNTIME_ON
3 s! C: b* u! L+ C) O+ y);
, w' Q+ K: B- ~: S8 q2 X  z1 V( P6 D9 v/ p
var Registry = xdc.useModule('xdc.runtime.Registry');6 k) ]2 s$ C. ~% s; s* a
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: Y  U3 I) g; M+ I( [) L
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ Q) ]3 M0 o' r$ gRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;) ]2 P6 `. _# j, }
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 _  @5 Y& W% v! g7 A$ J- i
5 K" ?; X. D5 U* N8 r0 ^3 n
/* create a logger instance */+ W( O+ E' M! F
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" n6 j- U- |3 f8 l. T8 o  R# {
var loggerBufP = new LoggerBuf.Params();
: l& U8 r5 Z5 w1 M5 FloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* R+ w9 x- m# o, W3 ^, m& o
loggerBufP.bufType = LoggerBuf.BufType_FIXED;9 a3 b% P1 t5 Y
8 B, J+ e& O7 e$ h, W
var appLogger = LoggerBuf.create(loggerBufP);
! [/ {9 Q7 N8 s0 U# ZappLogger.instance.name = "AppLog_Core1";4 p7 B6 P2 I/ i* M2 R
Defaults.common$.logger = appLogger;
& t: d! V" N& B* `0 SMemory.defaultHeapSize = 0x8192;    ( I1 t4 N0 S4 K4 F1 v7 w% x- ?4 Y/ z( P
Idle.idleFxns[0] = "&LEDStatus";
0 f5 j, }2 v) ~& iCache.initSize.l2Size = Cache.L2Size_32K;1 k' C; ~3 e0 `. m# z, m; o

* R0 u* \0 f+ j) @; U! v; a3 \
回复 支持 反对

使用道具 举报

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 */3 b' U& i& G4 ?$ E% a0 {/ `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- Q7 U( y$ s3 G
var heapMemParams = new HeapMem.Params();% p# U3 d* V8 m- G1 Z: x
heapMemParams.size = 0x4000;' S' K) G' s2 d
- x% L/ S) {; ~" H. {
var Memory = xdc.useModule('xdc.runtime.Memory');
8 Z- F5 K$ r3 KMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 m# h- I+ V1 c1 s
  f" f& k* C0 [5 V" u( S我大约calloc  每次共计大小为5K*16bits,
' W/ h' x) N( J3 R" r; h+ g8 ~而默认配置才0x4000、需要改大。
3 h0 m. Z( Z' Z6 \4 p2 v
" Z; G4 y' c& ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
, @8 V! Y0 r& J2 D% UProgram.heap = 0;- b! I0 |) u6 G9 E1 C4 \2 g- g
Program.argSize = 100;  /* minimum size */) Q. [# h: z7 ~! V6 f
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-14 21:06 , Processed in 0.045202 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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