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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构; g3 B9 a$ O6 U

  _% G- c( @5 @; x2 A6 Q8 H    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# i  `% D) ?' x3 Y' f5 e8 {2 r1 k% Q) |) D' b' M! u
其他程序段。。。。。9 z. y: @9 V' W! ]* Z
2 I' k) ~* v+ f& N: ]" C7 U% ^
   free(x_d);
# Z" _7 k# `: X, @6 Q( R/ v# ]" W4 ~6 K. N9 m  ~9 q+ o
使用DSP侧单独调试功能,验证动态申请没有问题,
# t" s) t  Z6 ]" U& `, I2 W+ n6 W3 X' F) [
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" s) f( _7 Z+ ?( P, r9 j7 h
% H! d1 a8 r& F  V" O3 N

0 ]) C! f; Q; G1 K# o
1 B4 X; V6 h  s' y  t. X5 X$ ~7 s$ Z5 W! T$ }+ h8 \
4 Z" n0 F% j0 K( X" ~. b" W: E
6 j1 r' n/ A' u& F$ t6 z
/ J2 F5 z9 G1 I) S
& T) e7 t" M. g8 R! I2 k

7 r' h$ q% F2 J, T  ~: L
- h1 j- ?+ C6 l7 d! B4 M5 x! z5 T9 i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明. B" x/ p6 {0 g, K, D1 [
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下/ }0 f$ p8 E* w0 m4 Y
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ s+ H2 b2 ^" w7 z
' ?$ W: C9 n' R5 O. N# u( O6 V
是不是需要在DSP.CFG中进行配置
* Y5 q) m, w7 t- H我现在的配置为
8 C5 }: a3 ?7 ~1 e4 a5 [- y" r( C3 ~+ y) H! T; I
/*  q( j  C2 s5 y3 g3 T7 R: c5 U
*  ======== Operating System Configuration ========; U7 L1 |, d& f. v; `" b4 [2 J
*/) a9 S4 Y5 d- X+ @- v( H* Z/ ^

0 K, ~  x( G8 y6 S% c5 ^: |( e/* no rts heap */3 u2 d+ w$ s1 G2 y( c
Program.heap = 0;. a: E9 ^  s) L: b
Program.argSize = 100;  /* minimum size */
8 b. q. s3 s7 f& e- ^5 Z8 vProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 |1 ^& f. Q7 V. O9 V1 j' j

: U' w  o3 }) L; s% J$ @/* create a default heap */
$ g% d- D4 \* X$ Y0 v7 tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- e% Q/ [( y& }7 E1 B" Q+ \" yvar heapMemParams = new HeapMem.Params();
9 p9 [% h& M+ T' yheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 f8 p! O1 `! q2 S# r# M( j
4 }- P( o, S3 t* n
var Memory = xdc.useModule('xdc.runtime.Memory');9 q) g( y% j: Q: m
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 _3 `7 F9 B- J. |: O4 V7 p6 Q
; i2 k0 Q. C4 m. C) g  \/ H/* configure System module */
% A! E0 \$ k+ f8 _var SysMin = xdc.useModule('xdc.runtime.SysMin');+ O4 k$ A# L8 C- W  y8 y. Q
SysMin.bufSize = 0x1000;
6 M6 A: I5 e5 zSysMin.flushAtExit = false;* U4 [0 x2 [, v/ j& j2 i$ |9 [

2 c! }' ?1 E0 uvar System = xdc.useModule('xdc.runtime.System');0 y0 B# l, U8 |/ p* s* I
System.SupportProxy = SysMin;/ \+ ]6 K) u0 m# ]: j# S

' u: U6 M( |! I* E# b4 [; a9 [; Z/ g/* configure SysBios to use the lower half of Timer 1 */9 b+ |! e- }1 A" l& o5 a, M1 h  c
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" n, n. Q8 f2 N% y
var Clock = xdc.useModule('ti.sysbios.knl.Clock');2 {- x* S9 C8 g. J; c( u& H
Timer.timerSettings[1].master = true;! T6 Q3 ]! g) q; {5 ?. t5 s
Timer.defaultHalf = Timer.Half_LOWER;5 B7 r; {4 w! J- E5 a; K
Clock.timerId = 1;) d+ |" T" `3 A1 x' Z# e3 r

  H% m+ K9 f5 }
! w# o: B+ q0 g4 c/*5 _! A: F9 o9 w% b+ z$ v; g
*  ======== Miscellaneous Configuration ========
( j/ U2 d; S& s0 U5 Z3 d: o */$ s# v) o$ L) R

0 O3 P/ @$ {1 U: `8 t- @/* set default diags mask */$ K* R/ D( z* Q5 v
var Diags = xdc.useModule('xdc.runtime.Diags');
% G# q) Z4 I( V+ |) F4 qvar Defaults = xdc.useModule('xdc.runtime.Defaults');
; t3 W3 \0 }  t0 Z5 Y+ J/ b2 r
* T$ z/ T4 a6 o8 {' m+ b5 {Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 r3 I( T4 M5 H! n: N0 p) U4 e
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ f0 ~2 A1 b! Y, ~: KDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# f! M- C2 G# q: |* |8 h; n! {+ e- K
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: r- B- T( b0 y# M! b. c" R
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ B8 R6 h+ t1 \4 {; F
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) j/ e7 H# z' n3 S3 ADefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 m; F2 Q7 }5 x' d3 PDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 U7 b, E( V1 L1 F' ZDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) h* c. d, @" u& WDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 q& B) T, @4 ^" p. NDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 M8 V9 \, ]' m; Z$ N4 ZDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 Q# a( G) }2 {Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; E8 M( v* X9 L% r
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;- I- K+ }  J, A8 ~' @

/ J1 I/ ~8 h" H/* override diags mask for selected modules */
- ^( `& C  v, w6 ]  ixdc.useModule('xdc.runtime.Main');* {0 G6 i4 w0 Z  z1 n# N' P
Diags.setMaskMeta(
+ M! k$ E' h* f    "xdc.runtime.Main",
$ I4 ^8 a4 u. V  s5 z    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- j6 @9 C, i9 z    Diags.RUNTIME_ON& x7 u, N) i& @4 x' u9 f5 J
);2 _& k+ f% A; K0 m
, t- {: j% }, O5 ^- d0 ^
var Registry = xdc.useModule('xdc.runtime.Registry');7 Z4 q5 Y) d3 z+ W
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;1 t6 Y9 ~: J8 }0 S
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 J! }7 b8 t+ L
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 p4 V9 a  U/ c& `Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ w( }0 F. C* ~! r- _; [
, Y2 ^- P7 z" a+ h8 D% |. c/* create a logger instance */
) C& S$ J% d3 ~* hvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 c4 F& \9 L0 D" a1 B. T
var loggerBufP = new LoggerBuf.Params();0 z$ w6 |4 f0 N1 L* w
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  s2 x1 v6 Y8 h* q) kloggerBufP.bufType = LoggerBuf.BufType_FIXED;
) {, }! s) Y% W0 \- k' e& K
& Q( z2 q/ q6 Lvar appLogger = LoggerBuf.create(loggerBufP);* C" ?, B; |/ d2 F3 _- n6 d
appLogger.instance.name = "AppLog_Core1";7 x9 @$ O5 r' R( }5 l- n( d) r
Defaults.common$.logger = appLogger;
' s0 Y2 ^/ f; `. Z' t. R3 mMemory.defaultHeapSize = 0x8192;   
) y3 C7 n0 ~0 G* nIdle.idleFxns[0] = "&LEDStatus";0 R9 p# g- e7 e* r# p- W
Cache.initSize.l2Size = Cache.L2Size_32K;
2 o4 j& v0 h" Z: a1 R6 @) o8 O0 T" o6 q
回复 支持 反对

使用道具 举报

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$ z7 v: A$ k" Y4 K. k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. d; a# |; b5 z5 cvar heapMemParams = new HeapMem.Params();" c6 `& {, [  J) k+ O! E
heapMemParams.size = 0x4000;
$ S% G' D4 H: m% B! g, w7 v0 L& o* q) X/ o3 J
var Memory = xdc.useModule('xdc.runtime.Memory');$ w7 R3 P" R  e, Z% q0 e( m
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! O6 a7 L$ ~' J2 z3 W
  W1 i. s; w' d# p& [: ?
我大约calloc  每次共计大小为5K*16bits,7 A3 S$ d3 f* _) q! Y
而默认配置才0x4000、需要改大。
1 J9 r/ j! X7 \9 ~/ q( |  E
* s/ w, g0 _& w7 S/ Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */! k9 p  x5 d2 O4 s8 L3 @. n
Program.heap = 0;" C$ ]  D' U0 a+ B% x- B
Program.argSize = 100;  /* minimum size */8 ]) ]* B1 l6 N! z" ]7 B
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-25 07:23 , Processed in 0.047385 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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