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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

/ r6 D; s; m" K, O    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* i& @7 _& C  ^* R# b& ~; i
0 S- n& N0 a3 |: Q- W( P其他程序段。。。。。
- p5 b. b* m1 o3 \
% V! Y2 Y; d- k3 ^" Q   free(x_d);
; I2 C3 K0 ?- V  b# O9 I9 O  n" ], ~5 b8 ^3 U! r- d& U3 V
使用DSP侧单独调试功能,验证动态申请没有问题,
3 N  v' i; f% E" F5 e! [
1 s, o0 V2 Q; X9 _' }) j但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
) o) A# v3 o: I7 r4 H5 T. |

" z$ R, J# f- M, u3 O+ q0 |9 T5 `: W' g$ H/ h
# k; g1 L4 f0 P. @7 v
! N- S0 n' g2 C

6 X, N* Q* X- g4 Q: i
& ]# h9 z, O( \: _4 B3 f" l5 |& P6 N( y* o' _
2 f( c# i) F, o0 E* F
4 R( E2 M" e8 a; U7 D; C# e$ U( |9 v
6 W' _+ U! R( K/ Q) V
分享到:  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 */
2 [6 l1 S2 _# R! {0 hProgram.heap = 0;
! e6 L; S7 T8 R$ [; S0 p) r1 u) {Program.argSize = 100;  /* minimum size */
; b$ j4 D/ f4 `" p) K; o$ u# eProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
2 a' O# E) `7 Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 o+ I5 v/ i, l' a4 Qvar heapMemParams = new HeapMem.Params();
% s6 {6 A, R5 E& k4 `. D1 FheapMemParams.size = 0x4000;
3 x# `8 a6 f' j& Q9 ]9 |; b/ H
8 C( O3 F) o% svar Memory = xdc.useModule('xdc.runtime.Memory');
$ y9 f: w9 w  X6 P4 D2 W' [8 |$ n9 l; EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);2 l/ K0 x) x- q( H* [

- B/ F6 i7 }- X; }9 F/ U: D; p我大约calloc  每次共计大小为5K*16bits,
5 ~2 z% W7 \6 k1 m而默认配置才0x4000、需要改大。
# H+ |! |9 A+ ]( K( I. P6 P0 [- E, H
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
1 f$ g: _+ a8 j/ g5 g6 J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) A, v9 ?" c* k* u' I2 ~" K
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 J+ D4 q$ a- V( `5 |$ I
1 N' ]# {/ y  i. u$ J1 M7 T! B
是不是需要在DSP.CFG中进行配置1 q1 {& k  T& G8 g* R
我现在的配置为% p. G* S# j8 {' \9 ?

7 @! G4 [" i5 @/*
3 h: O2 n6 f/ q( m) |! H *  ======== Operating System Configuration ========
  t0 \2 u, E" r5 W' o! ^7 \9 l */7 `4 y2 K# `. Y1 l- ]4 b

- E4 T- a+ N! G& ?$ A, G. y/* no rts heap */
) _! _' N1 }0 l2 P9 z3 n1 ]Program.heap = 0;
6 G$ W2 [: b/ X# r& ~Program.argSize = 100;  /* minimum size */( z6 K1 l* \1 z+ c( ~( o
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
5 j6 l' j3 T# k2 j, D: e6 z3 f
$ K: d8 r: E1 i0 y/* create a default heap */
3 [3 p6 v, w) xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  y  a; }8 n% w, x2 ivar heapMemParams = new HeapMem.Params();" h8 e9 D) {6 m4 g5 \. P' c
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) }( u/ I" y+ r" L2 s
7 k# o9 R  ^% J4 [! q
var Memory = xdc.useModule('xdc.runtime.Memory');
( `; n! I: N1 zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 t2 Q. k3 ~% ?8 L9 Z

; v. Z3 w6 G' e3 q8 r/* configure System module */9 C- B+ m  a+ j# g
var SysMin = xdc.useModule('xdc.runtime.SysMin');5 V5 r. u( G9 v
SysMin.bufSize = 0x1000;% b$ ]; G5 x$ R6 r  [2 M; y
SysMin.flushAtExit = false;
4 y5 ?* W/ j1 I5 U) E. ~+ `- H1 r% f( q# N# O* H
var System = xdc.useModule('xdc.runtime.System');
% o/ U- {& E1 u( cSystem.SupportProxy = SysMin;9 t$ U1 ~$ y5 [
: K! k+ {8 R# Q
/* configure SysBios to use the lower half of Timer 1 */
9 u  x1 x9 H1 C, bvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ V, x1 T0 O9 {5 }, mvar Clock = xdc.useModule('ti.sysbios.knl.Clock');0 [7 k0 }! a* t" a
Timer.timerSettings[1].master = true;
( q3 i+ C4 T; f# ?Timer.defaultHalf = Timer.Half_LOWER;
( ^: [, u3 V" h  GClock.timerId = 1;, ]9 A- }# i2 A7 d5 b( h

/ P0 Z; z) T. m# M8 [  M7 J
: B& G& c# p: @/*
7 w, _% R+ ?( G# c *  ======== Miscellaneous Configuration ========* J! s! t& P, ~
*/9 i0 t, `9 b2 ~4 K

. I% v! h3 j# P/ b4 p/* set default diags mask */* x* H% i! S' }1 e' t$ X
var Diags = xdc.useModule('xdc.runtime.Diags');
  I. {7 O3 D& Q$ h+ E: e3 [: z; lvar Defaults = xdc.useModule('xdc.runtime.Defaults');
/ Z# {' \5 k# r. M' N! H, P9 y9 }" _9 f9 m
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, J% ^; a5 l) C/ P- y5 Y5 KDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( s3 |- H  J/ Q# H8 S& K( K) ^0 Z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 B, r% x' y* p/ w+ h/ W- V
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* n$ J3 s2 k/ @! I7 Y' L) r
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ i' d; s/ I2 `0 h/ B1 B" V/ P+ e
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;0 o, m7 @7 j8 o" k
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 J& t3 f7 s  H2 `: T' FDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 ?( p& t! b, L
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  `; L5 T, N6 F0 H0 T5 L8 U
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* Z- z0 x8 Z2 W" W& w% ~
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 J0 o6 Y1 }$ ?& {
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* I( H9 N# P% }1 o" R8 e
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 b7 f0 a8 n+ Z; A
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: ]  x& Y# u. a! b; @3 Q& {

2 U9 r, h3 j# y* o4 M/* override diags mask for selected modules */5 A& c& r' w, R8 {0 c% I7 S9 f( @
xdc.useModule('xdc.runtime.Main');, h3 V$ ^( {4 s1 }9 \6 k
Diags.setMaskMeta(
$ Y7 T" k# ]* k' n* g8 G1 d    "xdc.runtime.Main",
: r8 u/ k# a5 W# T3 R7 O    Diags.ENTRY | Diags.EXIT | Diags.INFO,5 S  @2 H1 C9 Y8 l- [# }( ^! A
    Diags.RUNTIME_ON
( [2 c4 ?- ]+ ?& F0 A5 T" P# g2 k3 Q);
) X" d5 D( ?' v/ E: D6 E. `
- k) ~: Y2 G9 B6 L* V1 Ovar Registry = xdc.useModule('xdc.runtime.Registry');
$ y1 {; Y7 b( o8 [6 {Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 V& j* ]% U$ F5 b7 ^Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
: Y2 M* H8 o: I# pRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;# z7 P" x  S0 [
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. G4 A8 C; u0 k2 \8 z
4 j; v- c' I% U1 L) D! K! q/* create a logger instance */5 r: L& f5 \! @7 h7 C0 c7 U
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( }; K5 S7 Y& x9 r4 W* ?var loggerBufP = new LoggerBuf.Params();
( K) ?8 R) S# h) M2 y6 a) x' i  }  gloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
, I8 z0 _* d# E- o8 r' d5 y1 R% ploggerBufP.bufType = LoggerBuf.BufType_FIXED;
! H) ~5 {; F' _+ Y1 G8 p1 p' Y5 j2 g1 D
var appLogger = LoggerBuf.create(loggerBufP);
1 K; F& [) i/ J9 RappLogger.instance.name = "AppLog_Core1";$ ~$ A; L# R2 L$ X
Defaults.common$.logger = appLogger;
' ^8 w, f9 K7 u5 g. a* r, F0 eMemory.defaultHeapSize = 0x8192;    . d4 e6 D! Z( O) {
Idle.idleFxns[0] = "&LEDStatus";% d. B, g  A2 [
Cache.initSize.l2Size = Cache.L2Size_32K;% N9 N& j8 M. b1 s
: g" m' F) X& r5 C) U
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-14 04:55 , Processed in 0.044414 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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