关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 F! E2 k8 [  O6 m/ p/ s
; _$ \3 B3 y4 g  t; [' v    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
; F: H' v# m6 S3 Q) i
, e* @" e5 _$ [- y其他程序段。。。。。* ?8 {- p- Z& X( b

( ?* I) Q' d/ ?. `$ w  c9 T3 h" M   free(x_d);
) i* o+ _8 ]( V5 d' X3 i$ c
) ~2 c2 S7 O4 u" a使用DSP侧单独调试功能,验证动态申请没有问题,+ c  ?, a/ H# D
, c5 C8 E& `; d. a  b
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. _3 D2 o9 f# g$ b/ g# d- z

$ P" ^$ a2 r& |- |( t6 n( f/ t( h8 M

( K+ k/ P) e/ t+ H* y7 P0 C1 e8 E
' P+ m. B6 P. \! [/ P0 ^* p- j# G! ~4 l
+ G; c. }/ Y* x- @1 \

2 H' C2 [  ^7 ^0 T! I
7 j) {, U* z- g' f
& g& b) c$ ]& d, Z) R' O6 T1 X1 L8 b  P0 Q
分享到:  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 */0 _0 A( N' H) @# @2 j
Program.heap = 0;& Z8 @1 B' G; r+ u) f
Program.argSize = 100;  /* minimum size *// l. W+ X5 ^+ G2 j
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
9 S8 }* {! y# G8 h: A2 Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* M) r" o9 G1 u$ M! \2 Svar heapMemParams = new HeapMem.Params();
: H; i1 m' ?  F# OheapMemParams.size = 0x4000;, E. ~1 e% O; K+ L
+ E# m! N; Q0 m1 f* ]8 j: @% {/ W
var Memory = xdc.useModule('xdc.runtime.Memory');+ w, l( _3 _! R) H
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
" n) @- g% ?8 E
  L0 A! Y/ N+ t' W3 f- u' Z7 f- D我大约calloc  每次共计大小为5K*16bits,
  k" X! o  E' `& v而默认配置才0x4000、需要改大。% f5 r/ x  l1 U, S

6 s4 L4 B4 Y) g; v4 J  n
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
2 a. c3 t( z3 P1 B2 @+ ~. W我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# R4 O7 \( L% s* t, k+ K+ Z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 o9 `8 m' m& e) i9 G
9 F8 ^' M/ x/ U) `9 w- n# V
是不是需要在DSP.CFG中进行配置
" [& b; ~1 T+ P9 s, K我现在的配置为4 l) _; P# U/ ^* Z

+ Q1 n2 n/ G3 j( V7 h  H. d! E/*
1 X  ]- j, ^- Q" a *  ======== Operating System Configuration ========: M7 r: K  z$ |) a4 t( D0 B
*/
6 u% n& B; G- t8 y; ]" d% ]) B
" O6 s* l/ E" r+ u# F  x/* no rts heap */
* Y8 |- L; A- d/ Z8 x1 AProgram.heap = 0;
8 M6 u/ A0 n0 c; o3 D- {Program.argSize = 100;  /* minimum size */
! w) h3 C& x8 c' v; @' AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
' e/ \* F+ M) ~* ?7 E
& ]4 P8 c5 L6 J% H9 O& B/* create a default heap */
+ G+ T' W  Y+ C8 A0 G3 _var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 o% Z0 D. F# m" Y# o0 rvar heapMemParams = new HeapMem.Params();
; n" f( ]% f( m/ Y5 XheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 g0 r/ b( ?  Q$ k8 {5 C
2 j3 H( Q1 A. |* E$ L+ R+ c' `1 ~/ L
var Memory = xdc.useModule('xdc.runtime.Memory');
' X5 W2 K% d8 Z6 T5 SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& ?) [/ M2 R2 g. G9 _. w* L
" x) z# `! j. T  _7 r2 H/* configure System module */3 M9 b8 [. M$ U2 }' J; v
var SysMin = xdc.useModule('xdc.runtime.SysMin');
: j7 f' P  Y9 _3 @& i6 qSysMin.bufSize = 0x1000;
# u: Q; ~1 [$ p* w7 Q0 c# J" O. l0 rSysMin.flushAtExit = false;' j. {' F  u9 s7 P. F
' c3 k8 _$ C( A7 I2 b- K, C& B
var System = xdc.useModule('xdc.runtime.System');
5 ?! G3 U! o" g7 @3 H. }. ASystem.SupportProxy = SysMin;
! Q1 X7 n2 W, g% t$ k; _" l3 J% m/ C& \
/* configure SysBios to use the lower half of Timer 1 */
8 g. c- N  ~1 t2 n; U* p6 C( p+ Yvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ Z$ V; X; S6 n) P) A3 n1 b
var Clock = xdc.useModule('ti.sysbios.knl.Clock');' G# ^" |% U0 |
Timer.timerSettings[1].master = true;! o. Z" J6 h- l
Timer.defaultHalf = Timer.Half_LOWER;
4 A2 n) w5 {: G0 g8 }Clock.timerId = 1;% P9 m- ~8 `" {+ Q' i: b4 `
* K3 b0 Q9 s: a' e2 m3 i5 c) J8 e

4 E. V- L  b- D0 `7 f. S  M/*
3 G* H6 g1 F, C8 w7 X9 f *  ======== Miscellaneous Configuration ========
; D+ |* i" M2 U! T% G# p */( M: G% Q+ C2 D9 q" f4 I
$ N! y% `# G  L5 J
/* set default diags mask */
9 @6 m( _; C% s! Z0 ~var Diags = xdc.useModule('xdc.runtime.Diags');6 H; Q' W# K0 D
var Defaults = xdc.useModule('xdc.runtime.Defaults');7 e/ B0 t# K' e
0 S- N0 m* P* u+ E  r+ s
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- d' [1 r# p% h4 \1 O# F% a0 m
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ `+ i  |9 j. i: d# D  e' EDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
( |& l8 N+ a" c& PDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# o$ L7 _& ]& j6 {' CDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
" E' ?* c' ^& m6 `Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& g/ @$ n0 Y  ~" UDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+ k" ~, t4 a) f/ n8 ZDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 V8 L: M9 ?' z' \6 E
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. c. g( \- I1 @4 L$ xDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;. j. y4 X9 M. J5 ?% q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 j# Y7 i6 s* ?, @. jDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* W) O+ R# Y; r9 z# r% q+ D5 RDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; j+ A9 N# d, [9 ]' f1 D& C. K
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: u$ j( j- a% D+ j! W
+ ]0 M' V( L; |1 w/* override diags mask for selected modules */# @8 P$ H; j' A
xdc.useModule('xdc.runtime.Main');+ S( f+ ?7 ^- Y5 |9 P+ ^0 q
Diags.setMaskMeta(
+ h1 Y( X* j1 M  w; @5 \    "xdc.runtime.Main",
  P, e5 ?$ ~2 R4 u+ F    Diags.ENTRY | Diags.EXIT | Diags.INFO,, H5 S+ a0 {! o: q" L
    Diags.RUNTIME_ON' O1 Y  x  T% p8 M0 }' H5 B6 E3 i, w
);$ p2 }1 k# x) |, \6 i: r4 t  M

1 m5 D$ v2 g, [4 P/ q8 Rvar Registry = xdc.useModule('xdc.runtime.Registry');% Z& l( h6 ]3 N; d, u- z+ x) k
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 }3 q8 M3 I# |( ZRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 l- a1 i" }( m2 a) I5 V6 Y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# E' o' ^4 G1 [Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;. n+ C! n  e' N0 S9 G# W" B

; T# D1 z+ C  U$ R  Q/* create a logger instance */2 I) i% h3 L# q. z8 O' }, M/ @: q
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" J% y9 G6 p% W; C1 J8 L6 _var loggerBufP = new LoggerBuf.Params();
$ i4 t% b  J# HloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' z( _3 B9 u& i# E
loggerBufP.bufType = LoggerBuf.BufType_FIXED;1 R/ P4 u8 Z. Y; u

& J' Y9 E8 [! g8 @7 ^var appLogger = LoggerBuf.create(loggerBufP);
: w) E/ j4 w+ C  oappLogger.instance.name = "AppLog_Core1";
4 C3 }  S% j' Q5 R& B* a  Z6 E# G! \Defaults.common$.logger = appLogger;
9 q+ k7 Q( _8 i/ }Memory.defaultHeapSize = 0x8192;   
+ l& d" z# V) ?' Z' b0 [$ N3 KIdle.idleFxns[0] = "&LEDStatus";& W& E. x2 g6 h4 F
Cache.initSize.l2Size = Cache.L2Size_32K;
" {% E/ A1 z+ C) {% }
. I! W0 [9 J! [: S0 l; y
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-8 01:51 , Processed in 0.055818 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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