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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
8 X& f; B9 x4 u9 i) X0 |# k5 {
# o& o+ e5 x" Y5 |! a9 k* @1 |; U/ z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: p$ G0 K2 M" j5 g/ V: T

  Z* \. o0 s: `" [* @其他程序段。。。。。" V8 ^5 v1 @4 ]$ z0 f' A
- A, K. s% ]* b$ ~$ ]- X7 K
   free(x_d);/ j3 L# L( e3 z' f# s0 V

( P$ ]  U" ]( z使用DSP侧单独调试功能,验证动态申请没有问题,
4 ^! j: H- X  h; b, x* ]# }, G3 V5 u2 V  A3 S1 k$ o2 l, h( j
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, o2 S+ f# H2 p  s/ [2 N  w5 a

# R7 d7 K  Q& ?. w6 ?9 |& ~; u- O0 D% }  W

) W% i. v$ W( _9 r
: k' Q# Q6 r6 i$ ]: r. H& P+ Q: w5 X3 w( u; _) E. m

) w! ^3 \6 B2 Y+ X! c; Z" P- p
* c/ \% P. C" M/ \! z6 m
6 D& v) Y$ L+ E( L8 g& K3 t4 i( `( S6 s6 k/ t% r+ O

% _/ [' U  v6 n0 X8 y( }% h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 o* F* F; `7 p% d8 e/ C' z( N/ g* h
Program.heap = 0;
) @; z* u* t$ \, Q" b; rProgram.argSize = 100;  /* minimum size */2 B, b  o* P, g4 z  r* C' n  M) X
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
% b5 }! v1 k% `9 Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' B% W7 }$ O( I8 c% I8 R! }
var heapMemParams = new HeapMem.Params();1 x4 R! n( A7 j. g* b3 s# @' I6 a8 p
heapMemParams.size = 0x4000;
5 \! F$ Z1 a5 B7 X! A
0 T( t# ^9 D7 A5 Y' kvar Memory = xdc.useModule('xdc.runtime.Memory');3 r& [* R; `/ `* d: D% x- R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ \7 Y; o9 Z2 _
; F% [. M0 ~' ?8 O
我大约calloc  每次共计大小为5K*16bits,
5 l$ ]3 s* d- r7 I! S6 j而默认配置才0x4000、需要改大。& z1 P( T9 A4 c5 E2 H) h

3 \) R- m) x  M7 G6 k) S! t) |! o
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: L; u$ G5 c* e9 J. r9 ]我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 p" z5 U) @. E# g5 B6 D
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 _9 d  w+ c! ^1 ?, u0 T

) C; ?' j# w8 n6 V& }9 H是不是需要在DSP.CFG中进行配置
! C: P! Z3 {. Z6 _9 K; L* Z( K我现在的配置为% V/ O; N" ]6 P4 l

3 J9 Q6 {/ q  C8 J4 p( R/*
0 r8 C; z; i* l- P1 r6 p/ A *  ======== Operating System Configuration ========5 U, p. J" E0 }% l( j
*/1 w% y- i; o6 M& ?# e3 _3 Z

; j" O" H/ E% ?' Q/* no rts heap */0 A1 N* Q8 h- Z; P3 R8 }. C
Program.heap = 0;' A4 p# p& c- M0 E9 W! n: J
Program.argSize = 100;  /* minimum size */$ M0 L- e  h4 _- I- J3 s3 [, S$ T* ]
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: U. |! R9 O$ C2 K# `

6 [# v2 f/ u* s, Z3 G/* create a default heap */: V5 r2 u4 v. h. A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( u$ v! @' s" A1 K; n- o% H1 I. ~" l4 avar heapMemParams = new HeapMem.Params();& d, h+ ^7 v+ q2 p; q8 Z
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" M( F( w7 U6 j
) M, t( g$ m6 Y: j4 g" Y
var Memory = xdc.useModule('xdc.runtime.Memory');
% c& k( T+ z5 E+ F4 U3 @Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 u( Z: Z) g2 K9 h' k

2 ?! u  l/ n6 M- G- g; R  D5 C) D/* configure System module */
4 S7 P6 g! w, ^* i, _var SysMin = xdc.useModule('xdc.runtime.SysMin');
$ Q) t" \, M7 s6 _3 J6 ^SysMin.bufSize = 0x1000;
% S4 W8 i3 S, P5 WSysMin.flushAtExit = false;2 d; z8 i' |( H$ e" m' \

7 C% ^; B% @1 R% p6 g/ Evar System = xdc.useModule('xdc.runtime.System');
2 Y' f& m9 ]. K) e. A8 XSystem.SupportProxy = SysMin;  j* O  \9 S; ]2 D: t
- n+ r! ?# l. V4 e
/* configure SysBios to use the lower half of Timer 1 */
# q' g2 @% r* W/ z* }/ Q  ^/ Hvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 g) \3 R  M6 r( N
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
/ Q- I, U! t/ W6 @* J9 {Timer.timerSettings[1].master = true;
. S* x  ?$ W, e, H6 @2 aTimer.defaultHalf = Timer.Half_LOWER;
% i- ]* A6 o" A$ }# g9 Q) F7 S" G: AClock.timerId = 1;- y" H/ B& [$ n+ l$ G: K2 p7 Q
& v$ h1 L, W0 S$ y* t9 x. F

* g: w; j" M- P. Y; V/ h/*
  \$ v2 D: h% a+ t *  ======== Miscellaneous Configuration ========4 ^" s* x( l) z4 D5 l8 A
*/
+ u  Z# o( @! O- J$ q, q0 U+ v2 h, Q
/* set default diags mask */
" n: d. ]$ z" c4 b; vvar Diags = xdc.useModule('xdc.runtime.Diags');
7 R6 ~- j% k/ d8 }1 v1 Tvar Defaults = xdc.useModule('xdc.runtime.Defaults');
, y4 O# [# W+ ?8 n1 ~
/ \& d& E9 |) c' C7 ~Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% t6 \& P7 l: ~; u& i
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 h+ o: {6 ~8 Z" n3 q3 x8 b. YDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* q6 C: u$ w, {9 i5 o: j: LDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 X1 g5 Q8 A! \# }+ MDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" y+ ]$ P0 F# q  n7 J$ v
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  s% Y/ F# E) e$ R& E! v
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
, Y: \: \0 U! Y2 F5 DDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;/ ]) ]5 Q0 R- g" g
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;1 U: V: a- z. S4 y; K% \  p
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! w! W3 g! A7 H. RDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 q. ~  ?( c" A1 w; g/ ?
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 E, h5 y( p+ ~0 g0 \3 ^
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; G5 ^4 \1 ^$ W) q* A9 G9 X' Z3 g
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ @% d! ^/ [  \3 v8 I, W

. z* D7 r3 n5 U, n2 m+ s/* override diags mask for selected modules */
5 j) }2 H7 t- p- N6 mxdc.useModule('xdc.runtime.Main');4 p% d* r3 q; ?8 R- N, j% L
Diags.setMaskMeta() z: K' y# v/ A' N" W- O8 [( C3 X
    "xdc.runtime.Main",) M: X5 ~; B4 u% ]; m
    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 r( I4 l1 R3 e8 O1 D) g3 Q& z$ C
    Diags.RUNTIME_ON
/ s# C0 K$ }/ H! x* O5 E/ z7 ?, m);$ _  h3 L" A9 X: z+ k! E
) y7 n" [+ ~- N8 Q5 v
var Registry = xdc.useModule('xdc.runtime.Registry');
+ y' {: P7 o; SRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 v% b7 z& G8 ?; fRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
) H' b% n; P: w% H2 q0 x  Y9 X  w7 IRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;  u  N4 ~2 O* `, f9 M
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 |- J  K0 k9 f6 k5 k" O

. u, e# a8 e( l2 g& g/* create a logger instance */. ^+ @3 X7 U$ Z  Y) d4 k/ Q
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. P0 h7 Z; g7 Y( r; B1 c* j* t- svar loggerBufP = new LoggerBuf.Params();
. p4 p* `; ]5 WloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 r4 E  R% k# M% X, _loggerBufP.bufType = LoggerBuf.BufType_FIXED;$ D; w- t! ?3 M1 n2 H
. C9 g/ G9 E8 S
var appLogger = LoggerBuf.create(loggerBufP);
) O5 ?* R' S# A! RappLogger.instance.name = "AppLog_Core1";
5 X  T- a7 X: `Defaults.common$.logger = appLogger;2 ?2 Y: Z) n- `" T  {( T0 @
Memory.defaultHeapSize = 0x8192;   
9 h3 q. n% g4 u8 z; Y; i% I- HIdle.idleFxns[0] = "&LEDStatus";4 g1 H$ @* ?( Z* l3 e) b& B
Cache.initSize.l2Size = Cache.L2Size_32K;
# E/ V; ^' N! Z; n& q+ R- A; p+ H: e. u; M  B2 l
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-19 05:23 , Processed in 0.041584 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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